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