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 = 4;
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

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

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

    
50
      return value.name;
51
    }
52

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

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

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

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

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

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

    
113
    return values;
114
  }
115

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

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

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

    
136
          return 0;
137
        });
138
      }
139
      return selected;
140

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

    
150
      if(sortBy == "name"){
151

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

    
160
          return 0;
161
        });
162
      }
163
      return notSselected;
164
    }
165

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

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

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

    
179
          return 0;
180
        });
181
      }
182
      return sorted;
183
    }
184

    
185
  toggle() {
186
    this.isOpen = !this.isOpen;
187
  }
188

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