Project

General

Profile

1 43769 argiro.kok
import {Component, Input, ViewChild, Output, EventEmitter} from '@angular/core';
2
import {Observable}       from 'rxjs/Observable';
3
import {Location} from '@angular/common';
4 44309 argiro.kok
import {Filter, Value,AdvancedField} from '../searchUtils/searchHelperClasses.class';
5 43785 argiro.kok
import {SearchResult}     from '../../utils/entities/searchResult';
6 44309 argiro.kok
import {SearchFields} from '../../utils/properties/searchFields';
7 44587 argiro.kok
import {SearchUtilsClass} from './searchUtils.class';
8 45439 argiro.kok
import {ModalLoading} from '../../utils/modal/loading.component';
9 43769 argiro.kok
10
@Component({
11
    selector: 'advanced-search-page',
12
    template: `
13
14 45022 argiro.kok
    <div class="uk-margin-top">
15 43769 argiro.kok
        <div class="page-header">
16
            <h1>{{pageTitle}}</h1>
17
        </div>
18
        <div>
19 44309 argiro.kok
            <!--div class="row row-offcanvas row-offcanvas-right">
20 43769 argiro.kok
                <div class="col-xs-12 col-sm-3">
21
                    <a *ngIf="isFiltered()" (click)="clearFilters()" > Clear Filters</a>
22
                    <p *ngFor="let filter of filters " >
23
                        <search-filter [filter]="filter"   (change)="filterChanged($event)"></search-filter>
24
                    </p>
25
                </div>
26 44309 argiro.kok
                [(fields)]="fields"
27
                                      [(selectedFields)]="selectedFields"
28
                                      [(quantifiers)]="quantifiers"
29
                                      [(selectedQuantifiers)]="selectedQuantifiers"
30
                                      [(keywords)]="keywords"
31
                <div class="col-xs-6 col-sm-9 sidebar-offcanvas" id="sidebar"-->
32
                    <advanced-search-form
33 44343 argiro.kok
                     [entityType] = "entityType"
34 44372 argiro.kok
                     [(fieldIds)]="fieldIds"
35
                     [(fieldIdsMap)]="fieldIdsMap"
36
                     [(selectedFields)]="selectedFields"
37 44309 argiro.kok
                                          (queryChange)="queryChanged($event)">
38 43769 argiro.kok
                    </advanced-search-form>
39 45020 argiro.kok
                    <!--div class="uk-text-right" *ngIf="results  && results.length>= size"-->
40 45408 konstantin
                        <search-paging [type]="type" [(searchUtils)] = "searchUtils"  [(results)] = "results" [(baseUrl)] = "baseURLWithParameters"    ></search-paging>
41 45486 argiro.kok
                        <search-download [type]="csvPath" [csvParams]="csvParams" [totalResults]="searchUtils.totalResults" ></search-download>
42 44309 argiro.kok
43 44587 argiro.kok
                    <!--/div-->
44 43769 argiro.kok
                    <div>
45 44587 argiro.kok
                        <search-result [results]="results" [status]=searchUtils.status  [page]="searchUtils.page"></search-result>
46 43769 argiro.kok
                    </div>
47 44309 argiro.kok
                <!--/div>
48
            </div-->
49 43769 argiro.kok
        </div>
50
    </div>
51 45439 argiro.kok
    <modal-loading [message]= "'Loading results...'"></modal-loading>
52 43769 argiro.kok
53
    `
54
})
55
export class AdvancedSearchPageComponent {
56
  @Input() pageTitle = "";
57
  @Input() results = [];
58 45408 konstantin
  @Input() type;
59 44343 argiro.kok
  @Input() entityType;
60 44587 argiro.kok
  @Input() searchUtils:SearchUtilsClass = new SearchUtilsClass();
61 44309 argiro.kok
  @Input() fieldIds:  string[];
62 44846 argiro.kok
  @Input() fieldIdsMap;//:{ [key:string]:{ name:string, operator:string, type:string, indexField:string, equalityOperator:string  }} ;
63 44309 argiro.kok
  @Input() selectedFields:AdvancedField[];
64 44374 argiro.kok
  @Input() simpleSearchUrl: string;
65 45439 argiro.kok
  @ViewChild (ModalLoading) loading : ModalLoading ;
66 45484 konstantin
  @Input() csvParams: string;
67
  @Input() csvPath: string;
68 43769 argiro.kok
69 44826 argiro.kok
  public baseURLWithParameters:string = '';
70 43769 argiro.kok
71
  @Output() queryChange  = new EventEmitter();
72
  constructor (private location: Location) {
73 44740 argiro.kok
   }
74 43769 argiro.kok
75
  ngOnInit() {
76 44740 argiro.kok
     this.updateBaseUrlWithParameters();
77 44726 argiro.kok
    //  this.searchUtils.totalResults = this.results.length;
78 43769 argiro.kok
  }
79 44343 argiro.kok
  public getSelectedFiltersFromUrl(params){
80
    for(var i=0; i< this.fieldIds.length ; i++){
81
         var fieldId =  this.fieldIds[i];
82 44846 argiro.kok
         var fieldparam =  this.fieldIdsMap[fieldId].param;
83
84
         var operatorId =  this.getOperatorParameter(fieldparam);
85
          if(params[fieldparam] != undefined && params[operatorId] != undefined) {
86
              var values:string [] = decodeURIComponent(params[fieldparam]).split(",");
87 44343 argiro.kok
             var operators:string [] = decodeURIComponent(params[operatorId]).split(",");
88 44740 argiro.kok
              if(values.length == operators.length){
89 44343 argiro.kok
               for(var j=0; j< values.length ; j++){
90 44846 argiro.kok
                 this.selectedFields.push(new AdvancedField(fieldId,fieldparam,this.fieldIdsMap[fieldId].name,this.fieldIdsMap[fieldId].type,values[j],operators[j]) )
91 44343 argiro.kok
               }
92
             }
93
         }
94
   }
95
   if(this.selectedFields.length == 0){
96 44846 argiro.kok
     this.selectedFields.push(new AdvancedField(this.fieldIds[0],fieldparam,this.fieldIdsMap[this.fieldIds[0]].name,this.fieldIdsMap[this.fieldIds[0]].type,"","and"));
97 44343 argiro.kok
   }
98
  }
99 44309 argiro.kok
  private createUrlParameters(includePage:boolean){
100
    var params="";
101 44343 argiro.kok
    var fields: { [key:string]:{ values:string[], operators:string[] }}={};
102
103
    for(var i = 0; i< this.selectedFields.length; i++){
104 44372 argiro.kok
      if(this.fieldIdsMap[this.selectedFields[i].id] != undefined && this.selectedFields[i].value.length > 0){
105 44343 argiro.kok
        if(!fields[this.selectedFields[i].id]){
106
          fields[this.selectedFields[i].id] = {values:[], operators:[]};
107
          fields[this.selectedFields[i].id].values =[];
108
          fields[this.selectedFields[i].id].operators =[];
109
        }
110
        fields[this.selectedFields[i].id].values.push(this.selectedFields[i].value);
111
        fields[this.selectedFields[i].id].operators.push(this.selectedFields[i].operatorId);
112
113
      }
114
    }
115
    for(var i = 0; i< this.fieldIds.length; i++){
116
      if(fields[this.fieldIds[i]]){
117 44846 argiro.kok
        params+="&"+this.fieldIdsMap[this.fieldIds[i]].param+"="+fields[this.fieldIds[i]].values.join()+
118
        "&"+this.getOperatorParameter(this.fieldIdsMap[this.fieldIds[i]].param)+"="+fields[this.fieldIds[i]].operators.join()
119 44343 argiro.kok
      }
120
    }
121 44587 argiro.kok
    if(includePage && this.searchUtils.page != 1){
122
      params += "&page="+this.searchUtils.page;
123 43769 argiro.kok
    }
124 44587 argiro.kok
    return '?'+params;
125 43769 argiro.kok
  }
126 44343 argiro.kok
  public createQueryParameters(){
127 44309 argiro.kok
    var params="";
128 44826 argiro.kok
    var countParams = 0;
129 44309 argiro.kok
    for(var i = 0; i< this.selectedFields.length; i++){
130 44372 argiro.kok
      if(this.fieldIdsMap[this.selectedFields[i].id] != undefined && this.selectedFields[i].value != ""){
131 44726 argiro.kok
        if(this.selectedFields[i].id == "q"){
132 44826 argiro.kok
          var op = "";
133
          // if()
134
          params += (countParams == 0 ? "" : this.selectedFields[i].operatorId) + " " + '"' + encodeURIComponent(this.selectedFields[i].value) + '"' + " ";
135
        }else if(countParams == 0 && this.selectedFields[i].operatorId == "not"){
136 44846 argiro.kok
            params += " "+ this.selectedFields[i].id +  " <> "+'"' + encodeURIComponent(this.selectedFields[i].value) +'"' + " ";
137 44726 argiro.kok
        }else{
138 44846 argiro.kok
          params += (countParams == 0 ? "" : this.selectedFields[i].operatorId + " " ) + this.selectedFields[i].id + this.fieldIdsMap[this.selectedFields[i].id].equalityOperator+'"' + encodeURIComponent(this.selectedFields[i].value) +'"' + " ";
139 44726 argiro.kok
140
        }
141 44826 argiro.kok
142
        countParams++;
143 43769 argiro.kok
      }
144 44309 argiro.kok
    }
145 43769 argiro.kok
146 44740 argiro.kok
     return params;
147 43769 argiro.kok
148
  }
149
  clearFilters(){
150
  }
151
152
  goTo(page:number = 1){
153 44740 argiro.kok
     this.searchUtils.page = page;
154 44309 argiro.kok
    var urlParameters = this.createUrlParameters(true);
155 43769 argiro.kok
    var queryParameters = this.createQueryParameters();
156
    this.location.go(location.pathname,urlParameters);
157
    this.queryChange.emit({
158
        value: queryParameters
159
    });
160
161
  }
162 44309 argiro.kok
163
  queryChanged($event) {
164
165 43769 argiro.kok
     this.goTo(1);
166
  }
167
  pageChanged($event) {
168 44587 argiro.kok
    this.searchUtils.page = +$event.value;
169
    this.goTo(this.searchUtils.page);
170 43769 argiro.kok
  }
171 44309 argiro.kok
  /*
172
  * Update the url with proper parameters. This is used as base url in Paging Component
173
  */
174 44826 argiro.kok
  public updateBaseUrlWithParameters(){
175 44726 argiro.kok
    this.baseURLWithParameters = this.searchUtils.baseUrl + this.createUrlParameters(false);
176 44740 argiro.kok
   }
177 44846 argiro.kok
   getOperatorParameter(parameter:string):string{
178
     if(parameter.length > 2){
179
       return parameter.substring(0,2);
180
     }else if(parameter == "q"){
181
       return "op";
182
     }else{
183
       return parameter+"Op";
184
     }
185
   }
186 45439 argiro.kok
   // for loading
187
   public openLoading(){
188
     this.loading.open();
189
   }
190
   public closeLoading(){
191
       this.loading.close();
192
   }
193 43769 argiro.kok
}