Project

General

Profile

1 59113 k.triantaf
import {
2
  Component,
3
  Input,
4
  Output,
5
  EventEmitter,
6
  ViewChild,
7
  ElementRef,
8
  OnInit,
9
  OnChanges,
10
  SimpleChanges
11
} from '@angular/core';
12 50169 argiro.kok
import { Filter, Value} from './searchHelperClasses.class';
13
14
@Component({
15
    selector: 'search-filter',
16
    templateUrl: 'searchFilter.component.html'
17
})
18
19 59113 k.triantaf
export class SearchFilterComponent implements OnInit, OnChanges{
20 50169 argiro.kok
21 58105 konstantin
  @Input() filter:Filter;
22
  @Input() showResultCount:boolean = true;
23
  @Input() isDisabled:boolean = false;
24
  @Input() addShowMore:boolean = true;
25
  @Input() showMoreInline: boolean = true;
26 58568 konstantin
  @Input() filterValuesNum: number = 6;
27 58105 konstantin
  public showAll:boolean = false;
28
  public _maxCharacters:number =28;
29 50169 argiro.kok
30 58105 konstantin
  @Output() toggleModal = new EventEmitter();
31 50169 argiro.kok
32 58105 konstantin
  @Output() modalChange = new EventEmitter();
33
  @Output() onFilterChange = new EventEmitter();
34
  keyword = "";
35 58135 konstantin
  sortBy = "name";
36 50169 argiro.kok
37 58105 konstantin
  public isOpen:boolean=false;
38 50169 argiro.kok
39 58602 k.triantaf
    constructor () {
40 50169 argiro.kok
    }
41
42 58602 k.triantaf
    ngOnInit() {
43
      this.filter.values = this.filter.values.filter(value => !value.name.toLowerCase().includes('unknown') && !value.name.toLowerCase().includes('not available'));
44 59117 argiro.kok
      if(this.filter.filterType == "radio"){
45 59136 konstantin
        this.filter.radioValue = "";
46 59117 argiro.kok
        this.filter.values.forEach(value => {
47
          if(value.selected){
48
            this.filter.radioValue = value.id
49
          }
50
        });
51
      }
52 58602 k.triantaf
    }
53 59113 k.triantaf
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 59136 konstantin
        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 59113 k.triantaf
      }
66
    }
67
68
  public _formatTitle(title,length){
69 58552 argiro.kok
      return (((title+" ("+length+")").length >this._maxCharacters)?(title.substring(0,(this._maxCharacters - (" ("+length+")").length - ('...').length))+"..."):title+" ("+(length>95?"100":length)+")")
70 50169 argiro.kok
    }
71 56677 argiro.kok
    public _formatName(value){
72 58105 konstantin
      //let maxLineLength = 24;
73
      let maxLineLength = 35;
74
75 56677 argiro.kok
      //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 50169 argiro.kok
    }
86 52770 argiro.kok
87
    filterKeywords(value){
88
      if(this.keyword.length > 0){
89
        if(value.toLowerCase().indexOf(this.keyword.toLowerCase()) ==-1){
90
          return false;
91 50169 argiro.kok
        }
92 52770 argiro.kok
      }
93
      return true;
94 50169 argiro.kok
    }
95
    filterChange(selected:boolean){
96 58135 konstantin
      if(selected){
97
          this.filter.countSelectedValues++;
98
      }else{
99
          this.filter.countSelectedValues--;
100
      }
101 58137 konstantin
      this.onFilterChange.emit({
102
          value: this.filter
103
      });
104 50169 argiro.kok
    }
105 56562 konstantin
    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 59117 argiro.kok
      this.filter.values.forEach(value => {
116
          value.selected = (value.id == this.filter.radioValue);
117
      });
118 58137 konstantin
      this.onFilterChange.emit({
119
        value: this.filter
120
      });
121 56562 konstantin
    }
122 58105 konstantin
    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 59117 argiro.kok
      this.filter.radioValue = "";
131 58105 konstantin
    }
132 58135 konstantin
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 52770 argiro.kok
    getSelectedValues(filter, sortBy:string = "num"):any{
155 50169 argiro.kok
      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 52770 argiro.kok
      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 50169 argiro.kok
      return selected;
178
179
    }
180 52815 konstantin
    getNotSelectedValues(filter, sortBy:string = "num"):any{
181 50169 argiro.kok
      var notSselected = [];
182 58105 konstantin
      for (var i=0; i < filter.values.length; i++){
183
        if(!filter.values[i].selected){
184
          notSselected.push(filter.values[i]);
185 50169 argiro.kok
        }
186 58105 konstantin
      }
187 52770 argiro.kok
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 50169 argiro.kok
      return notSselected;
202
    }
203
204 58135 konstantin
    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 58105 konstantin
  toggle() {
224
    this.isOpen = !this.isOpen;
225 50169 argiro.kok
  }
226
227 56677 argiro.kok
  getFilterName(value){
228
    let name = value.name +" ("+ value.number.format()+")";
229 58105 konstantin
    console.log(name);
230 56677 argiro.kok
    return name;
231
  }
232 50169 argiro.kok
}