Project

General

Profile

1
import {
2
  Component,
3
  Input,
4
  Output,
5
  EventEmitter,
6
  ViewChild,
7
  ElementRef,
8
  OnInit,
9
  OnChanges,
10
  SimpleChanges
11
} from '@angular/core';
12
import { Filter, Value} from './searchHelperClasses.class';
13

    
14
@Component({
15
    selector: 'search-filter',
16
    templateUrl: 'searchFilter.component.html'
17
})
18

    
19
export class SearchFilterComponent implements OnInit, OnChanges{
20

    
21
  @Input() filter:Filter;
22
  @Input() showResultCount:boolean = true;
23
  @Input() isDisabled:boolean = false;
24
  @Input() addShowMore:boolean = true;
25
  @Input() showMoreInline: boolean = true;
26
  @Input() filterValuesNum: number = 6;
27
  public showAll:boolean = false;
28
  public _maxCharacters:number =28;
29

    
30
  @Output() toggleModal = new EventEmitter();
31

    
32
  @Output() modalChange = new EventEmitter();
33
  @Output() onFilterChange = new EventEmitter();
34
  keyword = "";
35
  sortBy = "name";
36

    
37
  public isOpen:boolean=false;
38

    
39
    constructor () {
40
    }
41

    
42
    ngOnInit() {
43
      this.filter.values = this.filter.values.filter(value => !value.name.toLowerCase().includes('unknown') && !value.name.toLowerCase().includes('not available'));
44
      if(this.filter.filterType == "radio"){
45
        this.filter.radioValue = "";
46
        this.filter.values.forEach(value => {
47
          if(value.selected){
48
            this.filter.radioValue = value.id
49
          }
50
        });
51
      }
52
    }
53
    
54
    ngOnChanges(changes: SimpleChanges) {
55
      if(changes.filter) {
56
        this.filter.values = this.filter.values.filter(value => !value.name.toLowerCase().includes('unknown') && !value.name.toLowerCase().includes('not available'));
57
        if(this.filter.filterType == "radio"){
58
          this.filter.radioValue = "";
59
          this.filter.values.forEach(value => {
60
            if(value.selected){
61
              this.filter.radioValue = value.id
62
            }
63
          });
64
        }
65
      }
66
    }
67
  
68
  public _formatTitle(title,length){
69
      return (((title+" ("+length+")").length >this._maxCharacters)?(title.substring(0,(this._maxCharacters - (" ("+length+")").length - ('...').length))+"..."):title+" ("+(length>95?"100":length)+")")
70
    }
71
    public _formatName(value){
72
      //let maxLineLength = 24;
73
      let maxLineLength = 35;
74

    
75
      //1 space after checkbox
76
      //3 space before number + parenthesis
77
      if(!this.showResultCount && value.name.length+1 > maxLineLength ){
78
        return value.name.substr(0, maxLineLength -3 -1)+'...';
79
      }
80
      if(value.name.length+value.number.toLocaleString().length +1 +3> maxLineLength){
81
        return value.name.substr(0, (maxLineLength- 3 -4 - value.number.toLocaleString().length))+'...';
82
      }
83

    
84
      return value.name;
85
    }
86

    
87
    filterKeywords(value){
88
      if(this.keyword.length > 0){
89
        if(value.toLowerCase().indexOf(this.keyword.toLowerCase()) ==-1){
90
          return false;
91
        }
92
      }
93
      return true;
94
    }
95
    filterChange(selected:boolean){
96
      if(selected){
97
          this.filter.countSelectedValues++;
98
      }else{
99
          this.filter.countSelectedValues--;
100
      }
101
      this.onFilterChange.emit({
102
          value: this.filter
103
      });
104
    }
105
    uniqueFilterChange(value: Value) {
106
      let tmp = value.selected;
107
      value.selected = !tmp;
108

    
109
      if(value.selected){
110
        this.filter.countSelectedValues++;
111
      }else{
112
        this.filter.countSelectedValues--;
113
      }
114

    
115
      this.filter.values.forEach(value => {
116
          value.selected = (value.id == this.filter.radioValue);
117
      });
118
      this.onFilterChange.emit({
119
        value: this.filter
120
      });
121
    }
122
    clearFilter() {
123
      for (var i=0; i < this.filter.values.length; i++){
124
        this.filter.values[i].selected = false;
125
      }
126
      this.filter.countSelectedValues = 0;
127
      this.onFilterChange.emit({
128
        value: this.filter
129
      });
130
      this.filter.radioValue = "";
131
    }
132

    
133
  getSelectedAndTopValues(filter, topNum: number = 6):any{
134
    var values = [];
135

    
136
    for (let i=0; i < topNum; i++){
137
      if(filter.values.length <= i) {
138
        break;
139
      }
140
      values.push(filter.values[i]);
141
    }
142

    
143
    if(filter.countSelectedValues >0){
144
      for (let i=topNum; i < filter.values.length; i++){
145
        if(filter.values[i].selected){
146
          values.push(filter.values[i]);
147
        }
148
      }
149
    }
150

    
151
    return values;
152
  }
153

    
154
    getSelectedValues(filter, sortBy:string = "num"):any{
155
      var selected = [];
156
      if(filter.countSelectedValues >0){
157
        for (var i=0; i < filter.values.length; i++){
158
          if(filter.values[i].selected){
159
            selected.push(filter.values[i]);
160
          }
161
        }
162
      }
163
      if(sortBy == "name"){
164

    
165
        selected.sort((n1,n2)=> {
166
          if (n1.name > n2.name) {
167
              return 1;
168
          }
169

    
170
          if (n1.name < n2.name) {
171
              return -1;
172
          }
173

    
174
          return 0;
175
        });
176
      }
177
      return selected;
178

    
179
    }
180
    getNotSelectedValues(filter, sortBy:string = "num"):any{
181
      var notSselected = [];
182
      for (var i=0; i < filter.values.length; i++){
183
        if(!filter.values[i].selected){
184
          notSselected.push(filter.values[i]);
185
        }
186
      }
187

    
188
      if(sortBy == "name"){
189

    
190
        notSselected.sort((n1,n2)=> {
191
          if (n1.name > n2.name) {
192
              return 1;
193
          }
194
          if (n1.name < n2.name) {
195
              return -1;
196
          }
197

    
198
          return 0;
199
        });
200
      }
201
      return notSselected;
202
    }
203

    
204
    sort(values: Value[]) {
205
      let sorted: Value[] = values.slice();
206
      if(this.sortBy == "name"){
207

    
208
        sorted.sort((n1,n2)=> {
209
          if (n1.name > n2.name) {
210
            return 1;
211
          }
212

    
213
          if (n1.name < n2.name) {
214
            return -1;
215
          }
216

    
217
          return 0;
218
        });
219
      }
220
      return sorted;
221
    }
222

    
223
  toggle() {
224
    this.isOpen = !this.isOpen;
225
  }
226

    
227
  getFilterName(value){
228
    let name = value.name +" ("+ value.number.format()+")";
229
    console.log(name);
230
    return name;
231
  }
232
}
(31-31/55)