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 {SearchPublicationsService} from '../services/searchPublications.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

    
13
@Component({
14
    selector: 'search-publications',
15
    template: `
16

    
17
    <search-page pageTitle="Search Publications" type="publication" [(filters)] = "filters"
18
                 [(results)] = "results" [(totalResults)] = "totalResults" [(keyword)] = "keyword"
19
                 [(page)] = "page" [(size)] = "size" [(status)] = "status" [baseUrl] = "baseUrl" (queryChange)="queryChanged($event)"  >
20
    </search-page>
21

    
22
    `
23

    
24
})
25
export class SearchPublicationsComponent {
26
  public results =[];
27
  private filters =[];
28
  public totalResults:number  = 0 ;
29
  public status:number;
30
  private baseUrl:string;
31
  private keyword = '';
32
  private page :number = 1;
33
  private size :number = 10;
34
  private sub: any;
35
  private refineFields = [];
36
  private searchFields:SearchFields = new SearchFields();
37
  @ViewChild (SearchPageComponent) searchPage : SearchPageComponent ;
38
  private _location:Location;
39

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

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

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

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

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

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

    
97
          }
98

    
99

    
100

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

    
115
    });
116
  }
117

    
118
  private ngOnDestroy() {
119
    this.sub.unsubscribe();
120
  }
121

    
122
  public getResults(parameters:string, page: number, size: number, flag: string){
123
    console.info("getResults: Execute search query "+parameters);
124

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

    
149
  private setFilters(){
150
    //TODO set filters from
151
  }
152

    
153
  private queryChanged($event) {
154
    var parameters = $event.value;
155
    console.info("queryChanged: Execute search query "+parameters);
156
    this.getResults(parameters, this.page, this.size, "searchPage");
157
  }
158

    
159

    
160
}
(9-9/9)