Project

General

Profile

1
import {Component, Input, ViewChild} from '@angular/core';
2
import { ActivatedRoute} from '@angular/router';
3
import {Location} from '@angular/common';
4

    
5
import { Filter, Value} from '../searchUtils/searchHelperClasses.class';
6

    
7
import {SearchPeopleService} from '../../services/searchPeople.service';
8
import {SearchResult}     from '../../utils/entities/searchResult';
9
import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties';
10
import {SearchFields} from '../../utils/properties/searchFields';
11
import {SearchPageComponent } from '../searchUtils/searchPage.component';
12
import {SearchUtilsClass } from '../searchUtils/searchUtils.class';
13

    
14
@Component({
15
    selector: 'search-people',
16
    template: `
17

    
18
    <search-page pageTitle="Search People" type="people" [(filters)] = "filters"
19
                 [(results)] = "results" [(searchUtils)] = "searchUtils"
20
                 [baseUrl] = "baseUrl" (queryChange)="queryChanged($event)" [showRefine]=false
21
                 [csvParams]="csvParams" csvPath="people">
22
    </search-page>
23

    
24
    `
25

    
26
})
27
export class SearchPeopleComponent {
28
  public results =[];
29
  public filters =[];
30
   public baseUrl:string;
31
  public searchUtils:SearchUtilsClass = new SearchUtilsClass();
32
  public sub: any;
33
  public _location:Location;
34
  public searchFields:SearchFields = new SearchFields();
35
  public refineFields = this.searchFields.PERSON_REFINE_FIELDS;
36
  public csvParams: string;
37

    
38
  @ViewChild (SearchPageComponent) searchPage : SearchPageComponent ;
39

    
40
  constructor (private route: ActivatedRoute, private _searchPeopleService: SearchPeopleService ) {
41
    //this.results =[];
42
    //this.filters =[];
43
    var errorCodes:ErrorCodes = new ErrorCodes();
44
    this.searchUtils.status =errorCodes.LOADING;
45
    this.baseUrl = OpenaireProperties.getLinkToSearchPeople();
46
    //get refine field filters  from url parameters
47
    if(!this.searchPage){
48
      this.searchPage = new SearchPageComponent(this._location);
49
    }
50
  }
51

    
52
  public ngOnInit() {
53
    this.searchPage.refineFields = this.refineFields; //TODO make it work as a directive
54
    this.sub =  this.route.queryParams.subscribe(params => {
55
    this.searchUtils.keyword = (params['keyword']?params['keyword']:'');
56
    this.searchUtils.page = (params['page']=== undefined)?1:+params['page'];
57
    for(var i=0; i<5 ; i++){
58
           var  values = [];
59
           for(var j=0; j<10 ; j++){
60
             var value:Value = {name: "name"+j, id: "filter_"+i+ "_id_"+j, number:j, selected:false}
61
             values.push(value);
62
           }
63
           values.sort((n2,n1) => {
64
              if (n1.number > n2.number) {
65
                  return 1;
66
              }
67

    
68
              if (n1.number < n2.number) {
69
                  return -1;
70
              }
71

    
72
              return 0;
73
          });
74
          var filter:Filter = {title: "title"+i, filterId: "filter_"+i, originalFilterId: "filter_"+i, values : values, countSelectedValues:0, "filterOperator": 'and'}
75
          if(i==0) {
76
              var  values = [];
77
              for(var j=0; j<10 ; j++){
78
                var value:Value = {name: "MYname"+j, id: "MYfilter_"+i+ "_id_"+j, number:j, selected:false}
79
                values.push(value);
80
              }
81
              values.sort((n2,n1) => {
82
                 if (n1.number > n2.number) {
83
                     return 1;
84
                 }
85

    
86
                 if (n1.number < n2.number) {
87
                     return -1;
88
                 }
89

    
90
                 return 0;
91
              });
92
              var filter1:Filter = {title: "MYtitle"+i, filterId: "MYfilter_"+i, originalFilterId: "MYfilter_"+i, values : values, countSelectedValues:0, "filterOperator": 'or'}
93
              this.filters.push(filter1);
94
              this.getResults(this.searchUtils.keyword, true, this.searchUtils.page, this.searchUtils.size);
95

    
96
          }
97

    
98

    
99

    
100
          console.info(params);
101
          if(params[filter.filterId] != undefined) {
102
              let values = params[filter.filterId].split(",");
103
              for(let value of values) {
104
                  for(let filterValue of filter.values) {
105
                      if(filterValue.id == value) {
106
                          filterValue.selected = true;
107
                          filter.countSelectedValues++;
108
                      }
109
                  }
110
              }
111
          }
112
      }
113

    
114
    });
115
  }
116

    
117
  public ngOnDestroy() {
118
    this.sub.unsubscribe();
119
  }
120
/*
121
  public getResults(parameters:string, page: number, searchUtils.size: number){
122
    console.info("getResults: Execute search query "+parameters);
123

    
124
    this._searchPeopleService.searchPeople(parameters, page, searchUtils.size).subscribe(
125
        data => {
126
            this.searchUtils.totalResults = data[0];
127
            console.info("search People total="+this.searchUtils.totalResults);
128
            this.results = data[1];
129
            var errorCodes:ErrorCodes = new ErrorCodes();
130
             this.searchUtils.status = errorCodes.DONE;
131
            if(this.searchUtils.totalResults == 0 ){
132
              this.searchUtils.status = errorCodes.NONE;
133
            }
134
        },
135
        err => {
136
            console.log(err);
137
            console.info("error");
138
            //TODO check erros (service not available, bad request)
139
            // if( ){
140
            //   this.searchUtils.status = ErrorCodes.ERROR;
141
            // }
142
            var errorCodes:ErrorCodes = new ErrorCodes();
143
            this.searchUtils.status = errorCodes.NOT_AVAILABLE;
144
        }
145
    );
146
  }
147
*/
148

    
149
public getResults(keyword:string,refine:boolean, page: number, size: number){
150
  var parameters = "";
151
  if(keyword.length > 0){
152
    parameters = "q="+'"' + keyword + '"';
153
  }
154
  this._getResults(parameters,refine,page,this.searchUtils.size);
155
}
156
private _getResults(parameters:string,refine:boolean, page: number, size: number){
157
    this.csvParams = parameters;
158

    
159
  var errorCodes:ErrorCodes = new ErrorCodes();
160
  this.searchUtils.status = errorCodes.LOADING;
161
  this.searchPage.openLoading();
162

    
163
  this._searchPeopleService.searchPeople(parameters,(refine)?this.searchPage.getRefineFieldsQuery():null, page, size, this.searchPage.getFields()).subscribe(
164
      data => {
165
          this.searchUtils.totalResults = data[0];
166
          console.info("search People: [Parameters:"+parameters+" ]  [total results:"+this.searchUtils.totalResults+"]");
167
          this.results = data[1];
168
            this.filters = this.searchPage.checkSelectedFilters(data[2]);
169
            this.searchPage.updateBaseUrlWithParameters(this.filters);
170
          var errorCodes:ErrorCodes = new ErrorCodes();
171
          this.searchUtils.status = errorCodes.DONE;
172
          if(this.searchUtils.totalResults == 0 ){
173
            this.searchUtils.status = errorCodes.NONE;
174
          }
175
          this.searchPage.closeLoading();
176
      },
177
      err => {
178
          console.log(err);
179
           //TODO check erros (service not available, bad request)
180
          // if( ){
181
          //   this.searchUtils.status = ErrorCodes.ERROR;
182
          // }
183
          var errorCodes:ErrorCodes = new ErrorCodes();
184
          this.searchUtils.status = errorCodes.ERROR;
185
          this.searchPage.closeLoading();
186
      }
187
  );
188
}
189

    
190
  private setFilters(){
191
    //TODO set filters from
192
  }
193

    
194
  public queryChanged($event) {
195
    var parameters = $event.value;
196
    console.info("queryChanged: Execute search query "+parameters);
197
    this._getResults(parameters, true, this.searchUtils.page, this.searchUtils.size);
198
  }
199

    
200

    
201
}
(12-12/19)