Project

General

Profile

1
import {Component, Input, Output, EventEmitter, ViewChild, ElementRef} from '@angular/core';
2
import { Filter, Value} from './searchHelperClasses.class';
3

    
4
@Component({
5
    selector: 'search-filter',
6
    templateUrl: 'searchFilter.component.html'
7
})
8

    
9
export class SearchFilterComponent {
10

    
11
  @Input() filter:Filter;
12
  @Input() showResultCount:boolean = true;
13
  @Input() isDisabled:boolean = false;
14
  @Input() addShowMore:boolean = true;
15
  @Input() showMoreInline: boolean = true;
16
  @Input() filterValuesNum: number = 6;
17
  public showAll:boolean = false;
18
  public _maxCharacters:number =28;
19

    
20
  @Output() toggleModal = new EventEmitter();
21

    
22
  @Output() modalChange = new EventEmitter();
23
  @Output() onFilterChange = new EventEmitter();
24
  keyword = "";
25
  sortBy = "name";
26

    
27
  public isOpen:boolean=false;
28

    
29
    constructor () {
30
    }
31

    
32
    ngOnInit() {
33
      this.filter.values = this.filter.values.filter(value => !value.name.toLowerCase().includes('unknown') && !value.name.toLowerCase().includes('not available'));
34
    }
35

    
36
    public _formatTitle(title,length){
37
      return (((title+" ("+length+")").length >this._maxCharacters)?(title.substring(0,(this._maxCharacters - (" ("+length+")").length - ('...').length))+"..."):title+" ("+(length>95?"100":length)+")")
38
    }
39
    public _formatName(value){
40
      //let maxLineLength = 24;
41
      let maxLineLength = 35;
42

    
43
      //1 space after checkbox
44
      //3 space before number + parenthesis
45
      if(!this.showResultCount && value.name.length+1 > maxLineLength ){
46
        return value.name.substr(0, maxLineLength -3 -1)+'...';
47
      }
48
      if(value.name.length+value.number.toLocaleString().length +1 +3> maxLineLength){
49
        return value.name.substr(0, (maxLineLength- 3 -4 - value.number.toLocaleString().length))+'...';
50
      }
51

    
52
      return value.name;
53
    }
54

    
55
    filterKeywords(value){
56
      if(this.keyword.length > 0){
57
        if(value.toLowerCase().indexOf(this.keyword.toLowerCase()) ==-1){
58
          return false;
59
        }
60
      }
61
      return true;
62
    }
63
    filterChange(selected:boolean){
64
      if(selected){
65
          this.filter.countSelectedValues++;
66
      }else{
67
          this.filter.countSelectedValues--;
68
      }
69
      this.onFilterChange.emit({
70
          value: this.filter
71
      });
72
    }
73
    uniqueFilterChange(value: Value) {
74
      let tmp = value.selected;
75
      value.selected = !tmp;
76

    
77
      if(value.selected){
78
        this.filter.countSelectedValues++;
79
      }else{
80
        this.filter.countSelectedValues--;
81
      }
82

    
83
      this.onFilterChange.emit({
84
        value: this.filter
85
      });
86
    }
87
    clearFilter() {
88
      for (var i=0; i < this.filter.values.length; i++){
89
        this.filter.values[i].selected = false;
90
      }
91
      this.filter.countSelectedValues = 0;
92
      this.onFilterChange.emit({
93
        value: this.filter
94
      });
95
    }
96

    
97
  getSelectedAndTopValues(filter, topNum: number = 6):any{
98
    var values = [];
99

    
100
    for (let i=0; i < topNum; i++){
101
      if(filter.values.length <= i) {
102
        break;
103
      }
104
      values.push(filter.values[i]);
105
    }
106

    
107
    if(filter.countSelectedValues >0){
108
      for (let i=topNum; i < filter.values.length; i++){
109
        if(filter.values[i].selected){
110
          values.push(filter.values[i]);
111
        }
112
      }
113
    }
114

    
115
    return values;
116
  }
117

    
118
    getSelectedValues(filter, sortBy:string = "num"):any{
119
      var selected = [];
120
      if(filter.countSelectedValues >0){
121
        for (var i=0; i < filter.values.length; i++){
122
          if(filter.values[i].selected){
123
            selected.push(filter.values[i]);
124
          }
125
        }
126
      }
127
      if(sortBy == "name"){
128

    
129
        selected.sort((n1,n2)=> {
130
          if (n1.name > n2.name) {
131
              return 1;
132
          }
133

    
134
          if (n1.name < n2.name) {
135
              return -1;
136
          }
137

    
138
          return 0;
139
        });
140
      }
141
      return selected;
142

    
143
    }
144
    getNotSelectedValues(filter, sortBy:string = "num"):any{
145
      var notSselected = [];
146
      for (var i=0; i < filter.values.length; i++){
147
        if(!filter.values[i].selected){
148
          notSselected.push(filter.values[i]);
149
        }
150
      }
151

    
152
      if(sortBy == "name"){
153

    
154
        notSselected.sort((n1,n2)=> {
155
          if (n1.name > n2.name) {
156
              return 1;
157
          }
158
          if (n1.name < n2.name) {
159
              return -1;
160
          }
161

    
162
          return 0;
163
        });
164
      }
165
      return notSselected;
166
    }
167

    
168
    sort(values: Value[]) {
169
      let sorted: Value[] = values.slice();
170
      if(this.sortBy == "name"){
171

    
172
        sorted.sort((n1,n2)=> {
173
          if (n1.name > n2.name) {
174
            return 1;
175
          }
176

    
177
          if (n1.name < n2.name) {
178
            return -1;
179
          }
180

    
181
          return 0;
182
        });
183
      }
184
      return sorted;
185
    }
186

    
187
  toggle() {
188
    this.isOpen = !this.isOpen;
189
  }
190

    
191
  getFilterName(value){
192
    let name = value.name +" ("+ value.number.format()+")";
193
    console.log(name);
194
    return name;
195
  }
196
}
(31-31/55)