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="person" [(filters)] = "filters"
19
                 [(results)] = "results"
20
                 [(searchUtils)] = "searchUtils" [baseUrl] = "baseUrl" (queryChange)="queryChanged($event)" [showRefine]=false >
21
    </search-page>
22

    
23
    `
24

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

    
36
  @ViewChild (SearchPageComponent) searchPage : SearchPageComponent ;
37

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

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

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

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

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

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

    
94
          }
95

    
96

    
97

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

    
112
    });
113
  }
114

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

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

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

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

    
181
  private setFilters(){
182
    //TODO set filters from
183
  }
184

    
185
  public queryChanged($event) {
186
    var parameters = $event.value;
187
    console.info("queryChanged: Execute search query "+parameters);
188
    this._getResults(parameters, true, this.searchUtils.page, this.searchUtils.size);
189
  }
190

    
191

    
192
}
(4-4/6)