Project

General

Profile

1
import {Component, Input, Output, EventEmitter} from '@angular/core';
2
import {Observable}       from 'rxjs/Observable';
3

    
4
import { Filter, Value} from './searchHelperClasses.class';
5
import {Open} from '../../utils/modal/open.component';
6

    
7
@Component({
8
    selector: 'search-filter',
9
    template: `
10
  <ul *ngIf= "filter.values.length >0" class="uk-list">
11
    <li class="uk-open">
12
        <h5  class="uk-margin-bottom-remove uk-margin-top">{{_formatTitle(filter.title,filter.values.length)}}
13
        </h5>
14
        <div  aria-expanded="false">
15
          <div class="searchFilterBoxValues ">
16
            <div *ngFor = "let value of getSelectedValues(filter)"  class = "uk-animation-fade filterItem">
17

    
18
               <span class="filterName"><div title = "{{value.name}}">
19
               <input [disabled]="isDisabled" [(ngModel)]="value.selected" type="checkbox" (ngModelChange)="filterChange(value.selected)" />
20
               {{_formatName(value)}} </div></span>
21
               <span class="filterNumber" *ngIf = "showResultCount === true" >  ({{value.number}})</span>
22
            </div>
23
            <!--div class="uk-grid-divider uk-margin-remove"></div-->
24
            <hr *ngIf="getSelectedValues(filter).length > 0 && getNotSelectedValues(filter).length > 0" class="uk-grid-divider uk-margin-remove">
25
            <div *ngFor = "let value of getNotSelectedValues(filter).slice(0,5-getSelectedValues(filter).length)" class = "uk-animation-fade filterItem">
26

    
27
               <span class="filterName"><div title = "{{value.name}}"> <input [disabled]="isDisabled" [(ngModel)]="value.selected" type="checkbox" (ngModelChange)="filterChange(value.selected)" />
28
               {{_formatName(value)}} </div></span>
29
               <span class="filterNumber" *ngIf = "showResultCount === true" >  ({{value.number}})</span>
30
            </div>
31

    
32
            <!--a *ngIf="(getSelectedValues(filter).length + getNotSelectedValues(filter).length) > 5" (click)="toggle()" [class]="(isDisabled)?'uk-disabled uk-link-muted':''">Show More</a-->
33

    
34
            <!--button *ngIf="(getSelectedValues(filter).length + getNotSelectedValues(filter).length) > 5"
35
                    class="uk-button uk-button-link" (click)="toggle()" [disabled]="isDisabled">
36
                    Show More
37
            </button-->
38

    
39
            <a *ngIf="(getSelectedValues(filter).length + getNotSelectedValues(filter).length) > 5" (click)="open()" [class]="(isDisabled)?'uk-disabled uk-link-muted':''">Show More</a>
40

    
41

    
42
            <div [class]="(!isOpen)?'uk-modal ':'uk-modal uk-open uk-animation-fade'" uk-modal  [open]="!isOpen" id="modal2" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" bg-close="true">
43
              <div class="uk-modal-dialog uk-width-1-4 uk-padding-small uk-padding-remove-top uk-padding-remove-horizontal">
44
                <button type="button" class="uk-modal-close-default" uk-close (click)="close()"></button>
45
                <h3  class="uk-margin-remove uk-padding uk-padding-remove-bottom">
46
                  {{filter.title}}
47
                </h3>
48
                <div class="uk-modal-body uk-overflow-auto uk-height-medium uk-padding-remove
49
                            uk-margin-medium-left uk-margin-medium-right uk-margin-medium-top uk-margin-bottom">
50
                  <div *ngFor = "let value of getSelectedValues(filter)"  class = "uk-animation-fade filterItem">
51
                     <span class="filterName"><div title = "{{value.name}}">
52
                     <input [disabled]="isDisabled" [(ngModel)]="value.selected" type="checkbox" (ngModelChange)="close(); filterChange(value.selected)" />
53
                     {{_formatName(value)}} </div></span>
54
                     <span class="filterNumber" *ngIf = "showResultCount === true" >  ({{value.number}})</span>
55
                  </div>
56
                  <hr *ngIf="getSelectedValues(filter).length > 0 && getNotSelectedValues(filter).length > 0" class="uk-grid-divider uk-margin-remove">
57
                  <div *ngFor = "let value of getNotSelectedValues(filter)" class = "uk-animation-fade filterItem">
58
                     <span class="filterName"><div title = "{{value.name}}"> <input [disabled]="isDisabled" [(ngModel)]="value.selected" type="checkbox" (ngModelChange)="close(); filterChange(value.selected)" />
59
                     {{_formatName(value)}} </div></span>
60
                     <span class="filterNumber" *ngIf = "showResultCount === true" >  ({{value.number}})</span>
61
                  </div>
62
                </div>
63
              </div>
64
            </div>
65

    
66

    
67

    
68
       </div>
69
      </div>
70
    </li>
71
    </ul>
72

    
73
    `
74
})
75

    
76
export class SearchFilterComponent {
77

    
78
    @Input() filter:Filter;
79
    @Input() showResultCount:boolean = true;
80
    @Input() isDisabled:boolean = false;
81
    public showAll:boolean = false;
82
    public _maxCharacters:number =28;
83

    
84
    @Output() toggleModal = new EventEmitter();
85

    
86
    @Output() modalChange = new EventEmitter();
87

    
88

    
89
    public isOpen:boolean=false;
90

    
91
    filterModalChange() {
92
      console.info("Modal Changed");
93
      this.modalChange.emit({
94
        value: true
95
      });
96
      //this.close();
97
    }
98

    
99
    constructor () {
100
    }
101

    
102
    ngOnInit() {
103

    
104
    }
105
    public _formatTitle(title,length){
106
      return (((title+" ("+length+")").length >this._maxCharacters)?(title.substring(0,(this._maxCharacters - (" ("+length+")").length - ('...').length))+"..."):title+" ("+length+")")
107
    }
108
    private _formatName(value){
109
      return value.name;//(((value.name+" ("+value.number+")").length >this._maxCharacters)?(value.name.substring(0,(this._maxCharacters - (" ("+value.number+")").length - ('...').length))+"..."):value.name)
110
    }
111
    toggleShowAll(){
112
        this.showAll = !this.showAll;
113
        if(this.showAll == false) {
114
            this.reorderFilterValues();
115
        }
116
    }
117

    
118
    filterChange(selected:boolean){
119
      console.info("filter change: "+selected);
120
        if(selected){
121
            this.filter.countSelectedValues++;
122
            // this.reorderFilterValues();
123
        }else{
124
            this.filter.countSelectedValues--;
125
            // this.reorderFilterValues();
126
        }
127
    }
128
    getSelectedValues(filter):any{
129
      var selected = [];
130
      if(filter.countSelectedValues >0){
131
        for (var i=0; i < filter.values.length; i++){
132
          if(filter.values[i].selected){
133
            selected.push(filter.values[i]);
134
          }
135
        }
136
      }
137
      return selected;
138

    
139
    }
140
    getNotSelectedValues(filter):any{
141
      var notSselected = [];
142
      if(filter.countSelectedValues >0){
143
        for (var i=0; i < filter.values.length; i++){
144
          if(!filter.values[i].selected){
145
            notSselected.push(filter.values[i]);
146
          }
147
        }
148
      }else {
149
        notSselected = filter.values;
150
      }
151
      return notSselected;
152
    }
153
    reorderFilterValues() {
154
        for(let value of this.filter.values) {
155
            if(value.selected) {
156
                let index: number = this.filter.values.indexOf(value);
157
                let selectedValue:Value = this.filter.values[index];
158

    
159
                this.filter.values.splice(index, 1);
160
                this.filter.values.splice(0, 0, selectedValue);
161
            }
162
        }
163
    }
164
//     sliceSelected() {
165
//         let values: Value[] = [];
166
//
167
//         for(let value of this.filter.values) {
168
//             if(value.selected) {
169
//                 let index: number = this.filter.values.indexOf(value);
170
//                 let selectedValue:Value = this.filter.values[index];
171
//
172
//                 this.filter.values.splice(index, 1);
173
//                 this.filter.values.splice(0, 0, selectedValue);
174
//             }
175
//         }
176

    
177

    
178
  toggle() {
179
    this.toggleModal.emit({
180
      value: this.filter
181
    });
182
  }
183

    
184

    
185
  open() {
186
    this.isOpen = true;
187
  }
188

    
189
  close() {
190
    this.isOpen = false;
191
  }
192

    
193
  filterChange2(selected:boolean){
194

    
195
    console.info("filter change2");
196
      if(selected){
197
          this.filter.countSelectedValues++;
198
          // this.reorderFilterValues();
199
      }else{
200
          this.filter.countSelectedValues--;
201
          // this.reorderFilterValues();
202
      }
203
      this.close();
204
  }
205

    
206
}
(12-12/28)