Project

General

Profile

1
import {Component, Input}             from '@angular/core';
2
import {ViewChild, Output}            from '@angular/core';
3
import {EventEmitter,ElementRef}      from '@angular/core';
4
import {Location}                     from '@angular/common';
5
import {Router, ActivatedRoute}       from '@angular/router';
6
import {Title, Meta}                  from '@angular/platform-browser';
7

    
8
import {Observable}                   from 'rxjs/Observable';
9

    
10
import {Filter, Value}                from './searchHelperClasses.class';
11
import {SearchResult}                 from '../../utils/entities/searchResult';
12
import {SearchFields, FieldDetails}   from '../../utils/properties/searchFields';
13
import {SearchUtilsClass}             from './searchUtils.class';
14
import {DOI, StringUtils}             from '../../utils/string-utils.class';
15
import {ModalLoading}                 from '../../utils/modal/loading.component';
16
import {SearchFilterComponent}        from './searchFilter.component';
17
import {SearchFilterModalComponent}   from './searchFilterModal.component';
18
import {ErrorCodes}                   from '../../utils/properties/errorCodes';
19
import {PiwikService}                 from '../../utils/piwik/piwik.service';
20
import {EnvProperties}                from '../../utils/properties/env-properties';
21

    
22

    
23
@Component({
24
    selector: 'search-page',
25
    templateUrl: 'searchPage.component.html'
26

    
27
})
28
export class SearchPageComponent {
29
  @Input() piwikSiteId = null;
30
  @Input() pageTitle = "";
31
  @Input() formPlaceholderText = "Type Keywords...";
32
  @Input() results = [];
33
  @Input() filters = [];
34
  @Input() type:string = "";
35
  @Input() entityType: string = "";
36
  @Input() searchUtils:SearchUtilsClass = new SearchUtilsClass();
37
  @Output() queryChange  = new EventEmitter();
38
  @Input() baseUrl:string = '';
39
  @Input() showResultCount:boolean = true;
40
  @Input() showRefine:boolean = true;
41
  @Input() refineFields = [];
42
  @Input() csvParams: string;
43
  @Input() csvPath: string;
44
  @Input() advancedSearchLink: string = "";
45
  @Input() advancedSearchParameters;
46
  @Input() tableViewLink: string;
47
  @Input() disableForms: boolean = false;
48
  @Input() loadPaging: boolean = true;
49
  @Input() oldTotalResults: number = 0;
50
  @Input() tableView: boolean = false;
51
  @Input() searchFormClass: string = "searchForm";
52
  @Input() openaireLink: string;
53
  @Input() connectCommunityId: string;
54
  @ViewChild (ModalLoading) loading : ModalLoading ;
55
  public fieldIdsMap;//:  { [key:string]:{ name:string, operator:string, type:string, indexField:string, equalityOperator:string  }};
56
  private searchFieldsHelper:SearchFields = new SearchFields();
57
  private queryParameters: Map<string, string>  = new Map<string,string>();
58
  private baseURLWithParameters:string = '';
59
  private sub: any; piwiksub: any;
60
  public countFilters= 0;
61
  public parameterNames:string[] =[];
62
  public parameterValues:string[] =[];
63
  public showUnknownFilters:boolean = false; // when a filter exists in query but has no results, so no filters returned from the query
64
  //@ViewChild (SearchFilterModalComponent) searchFilterModal : SearchFilterModalComponent ;
65
  public currentFilter: Filter;
66
  public csvLimit: number = 0;
67
  public pagingLimit: number = 0;
68
  public resultsPerPage: number = 0;
69
  public isPiwikEnabled;
70
  properties:EnvProperties;
71

    
72
  constructor (private route: ActivatedRoute,
73
               private location: Location,
74
               private _meta: Meta,
75
               private _title: Title,
76
               private element: ElementRef,
77
               private _piwikService:PiwikService,
78
               private router: Router) {
79
   }
80

    
81
  ngOnInit() {
82

    
83
    this.route.data
84
      .subscribe((data: { envSpecific: EnvProperties }) => {
85
        this.properties = data.envSpecific;
86
        this.pagingLimit = data.envSpecific.pagingLimit;
87
        this.resultsPerPage =data.envSpecific.resultsPerPage;
88
        this.csvLimit = data.envSpecific.csvLimit;
89
        this.isPiwikEnabled = data.envSpecific.enablePiwikTrack;
90
        if(typeof window !== 'undefined') {
91
          this.updateUrl(data.envSpecific.baseLink+location.pathname);
92
        }
93
        if(typeof document !== 'undefined' && this.isPiwikEnabled){
94
          this.piwiksub = this._piwikService.trackView(this.properties, this.pageTitle, this.piwikSiteId).subscribe();
95
        }
96
      });
97
    if (typeof document !== 'undefined') {
98
       this.element.nativeElement.scrollIntoView();
99
    }
100
        // this.updateBaseUrlWithParameters(this.filters);
101
        this.updateTitle(this.pageTitle);
102
        var description = "Openaire, search, repositories, open access, type, content provider, funder, project, " + this.type + "," +this.pageTitle;
103
        this.updateDescription(description);
104

    
105
  }
106
  ngAfterViewChecked(){
107

    
108
  }
109
  ngOnDestroy() {
110
    if(this.piwiksub){
111
      this.piwiksub.unsubscribe();
112
    }
113
  }
114
  toggleModal($event) {
115
    this.currentFilter = $event.value;
116
    //this.searchFilterModal.open();
117
  }
118

    
119
  updateDescription(description:string) {
120
    this._meta.updateTag({content:description},"name='description'");
121
    this._meta.updateTag({content:description},"property='og:description'");
122
  }
123
  updateTitle(title:string) {
124
    var _prefix ="OpenAIRE | ";
125
    var _title = _prefix + ((title.length> 50 ) ?title.substring(0,50):title);
126
    this._title.setTitle(_title);
127
    this._meta.updateTag({content:_title},"property='og:title'");
128
  }
129
  updateUrl(url:string) {
130
    this._meta.updateTag({content:url},"property='og:url'");
131
  }
132

    
133
  public getQueryParametersFromUrl(params){ // called by ngOnInit function of search find pages
134
    // var parameters = "";
135
    var allFqs = "";
136

    
137
    this.queryParameters = new Map<string,string>();
138
    for(var i=0; i< this.refineFields.length ; i++){
139
         var filterId =  this.refineFields[i];
140

    
141
          if(params[filterId] != undefined) {
142
             this.queryParameters.set(filterId, StringUtils.URIDecode(params[filterId]));
143
             let values = (StringUtils.URIDecode(this.queryParameters.get(filterId))).split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,-1);
144
             var countvalues = 0;
145
             var fq = "";
146
             for(let value of values) {
147
               countvalues++;
148
               var paramId = this.fieldIdsMap[filterId].param;
149
              // parameters+='&' + paramId+ '='+ value;//+"&" + this.fieldIdsMap[paramId].operator + "="+((countvalues == 1)?"and":"or");
150
              fq+=(fq.length > 0 ? " " + "or" + " ":"" ) + filterId +" exact " +(value);
151
             }
152
             if(countvalues > 0){
153
               fq="&fq="+StringUtils.URIEncode(fq);
154
             }
155
             allFqs += fq;
156
          }
157
   }
158
   if(this.connectCommunityId ){
159
     allFqs+=  "&fq="+StringUtils.URIEncode("communityId exact " + StringUtils.quote((this.connectCommunityId )));
160
   }
161

    
162
   var keyword = params['keyword'];
163
   var doiQuery = "";
164
   var keywordQuery = "";
165
   if((keyword && keyword.length > 0)){
166
      if((this.type == 'publications' ||this.type == 'research data')){
167
        var DOIs:string[] = DOI.getDOIsFromString(keyword);
168
       var doisParams = "";
169

    
170
       for(var i =0 ;i < DOIs.length; i++){
171
         doisParams+=(doisParams.length > 0?"&":"")+'doi="'+ DOIs[i]+'"';
172
       }
173
       if(doisParams.length > 0){
174
         doiQuery += "&"+doisParams;
175
       }else {
176
        keywordQuery += "&q="+StringUtils.URIEncode(keyword);
177
       }
178
     }else{
179
        keywordQuery += "&q="+StringUtils.URIEncode(keyword);
180

    
181
     }
182
   }
183
   return (doiQuery.length > 0 ? doiQuery:keywordQuery) + allFqs;
184
 }
185
 public getIndexQueryParametersFromUrl(params){  // called by ngOnInit function of search pages that request 'resources'
186
  //  var parameters = "";
187
   var allFqs = "";
188

    
189
   for(var i=0; i< this.refineFields.length ; i++){
190
        var filterId =  this.refineFields[i];
191
        var fq = "";
192
         if(params[filterId] != undefined) {
193
            this.queryParameters.set(filterId,decodeURIComponent(params[filterId]));
194
            let values = (decodeURIComponent(this.queryParameters.get(filterId))).split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,-1);
195
            var countvalues = 0
196
            for(let value of values) {
197
              countvalues++;
198
              // parameters+= ((countvalues == 1)?" and (":" or ")+ filterId+ '='+ value;
199
              fq+=(fq.length > 0 ? " " + "or" + " ":"" ) + filterId + " exact " + value;//StringUtils.quote(value);
200
            }
201
            // parameters+= " ) ";
202
            if(countvalues > 0){
203
              fq="&fq="+StringUtils.URIEncode(fq);
204
            }
205
            allFqs += fq;
206
        }
207

    
208
  }
209
  if(this.connectCommunityId ){
210
    allFqs+=  "&fq="+StringUtils.URIEncode("communityId exact " + StringUtils.quote(this.connectCommunityId ));
211
  }
212
  var keyword = params['keyword'];
213
  var doiQuery = "";
214
  var keywordQuery = "";
215
  if((keyword && keyword.length > 0)){
216
    if((this.type == 'publications' ||this.type == 'research data')){
217
      var DOIs:string[] = DOI.getDOIsFromString(keyword);
218
      var doisParams = "";
219

    
220
      for(var i =0 ;i < DOIs.length; i++){
221
        doisParams+=(doisParams.length > 0?"&":"")+'doi="'+ DOIs[i]+'"';
222
      }
223
      if(doisParams.length > 0){
224
        doiQuery += "&"+doisParams;
225
      }
226
    }else{
227
       keywordQuery += "and ("+StringUtils.quote(StringUtils.URIEncode(keyword)) +")";
228

    
229
    }
230
  }
231
  return (doiQuery.length > 0 ? doiQuery:keywordQuery) + allFqs;
232

    
233
}
234
 /*
235
 * Mark as check the new filters that are selected, when you get them from search
236
 */
237
  public checkSelectedFilters(filters:Filter[]){
238
    this.filters = filters;
239
       for(var i=0; i< filters.length ; i++){
240
            var filter:Filter = filters[i];
241
            filter.countSelectedValues = 0;
242
              if(this.queryParameters.get(filter.filterId) != undefined) {
243
                let values = (decodeURIComponent(this.queryParameters.get(filter.filterId))).split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,-1);
244
                     for(let filterValue of filter.values) {
245
                       if(values.indexOf(StringUtils.quote(filterValue.id)) > -1) {
246
                            filterValue.selected = true;
247
                            filter.countSelectedValues++;
248
                         }else{
249
                           filterValue.selected = false;
250

    
251
                         }
252
                    }
253
            }else{
254
              for(let filterValue of filter.values) {
255
                 filterValue.selected = false;
256
              }
257
            }
258
        }
259
        this.filterFilterValues(this.filters);
260
        return filters;
261
  }
262
  /*
263
  * For Funder filters - if funder selected
264
  */
265
   public filterFilterValues(filters:Filter[]){
266
     var funders = [];
267
     var funder_prefix = [];
268
        for(var i=0; i< filters.length ; i++){
269

    
270
             var filter:Filter = filters[i];
271
            //  console.log(filter.filterId);
272
             if(filter.filterId.indexOf("funder")!=-1 && this.queryParameters.get(filter.filterId) != undefined) {
273
                 let funders = (decodeURIComponent(this.queryParameters.get(filter.filterId))).split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,-1);
274
                      for(let funder of funders) {
275
                        console.log(funder);
276
                        funder_prefix.push(StringUtils.unquote(funder).split("____")[0]);
277
                     }
278
                    //  console.log(funder_prefix );
279
             }else if(filter.filterId.indexOf("funding")!=-1){
280
              //  console.log(" funding: "+filter.filterId );
281
               var filteredValues = []
282
               for(let filterValue of filter.values) {
283
                 var value_prefix = filterValue.id.split("____")[0];
284
                //  console.log("Value prefix: "+value_prefix );
285
                 if(funder_prefix.indexOf(value_prefix)!=-1){
286
                  //  console.log("here" + value_prefix);
287
                   filteredValues.push(filterValue);
288
                 }
289

    
290
               }
291
               console.log("From " +filter.values.length+ "to "+filteredValues.length);
292
               if(filteredValues.length > 0){
293
                 filter.values = filteredValues;
294
               }
295
             }
296
        //      else if(this.connectCommunityId && filter.filterId.indexOf("community")!=-1 ){
297
        //        var filteredValues = [];
298
        //        for(let filterValue of filter.values) {
299
        //          if(this.connectCommunityId != filterValue.id){
300
        //              filteredValues.push(filterValue);
301
        //          }else{
302
        //            filter.countSelectedValues-- ;
303
        //          }
304
        //        }
305
        //        if(filteredValues.length > 0){
306
        //          filter.values = filteredValues;
307
        //        }
308
        //  }
309
       }
310

    
311
         return filters;
312
   }
313
  /*
314
  * Update the url with proper parameters. This is used as base url in Paging Component
315
  */
316
  public updateBaseUrlWithParameters(filters:Filter[]){
317
    this.baseURLWithParameters = this.baseUrl + this.createUrlParameters(filters,false);
318

    
319
  }
320

    
321
  /*
322
  *Get The filters and create url parameters
323
  */
324
  private createUrlParameters(filters:Filter[], includePage:boolean){
325
    var allLimits="";//location.search.slice(1);
326
    this.queryParameters = new Map<string,string>();
327
    this.parameterNames.splice(0,this.parameterNames.length);
328
    this.parameterValues.splice(0,this.parameterValues.length);
329

    
330
    for (let filter of filters){
331
      var filterLimits="";
332
      if(filter.countSelectedValues > 0 ){//|| (this.connectCommunityId && filter.filterId.indexOf("community")!=-1)){
333
        for (let value of filter.values){
334
          if(value.selected == true){
335
            filterLimits+=((filterLimits.length == 0)?'':',') +'"'+ (value.id)+'"';
336
          }
337
        }
338
        // if(this.connectCommunityId && filter.filterId.indexOf("community")!=-1 ){
339
        //   filterLimits+=((filterLimits.length == 0)?'':',') +'"'+ StringUtils.URIEncode(this.connectCommunityId)+'"';
340
        // }
341
        this.queryParameters.set(filter.filterId,filterLimits);
342
        if(filterLimits.length > 0){
343
          this.parameterNames.push(filter.filterId);
344
          this.parameterValues.push(filterLimits);
345
        }
346
        allLimits+=(allLimits.length==0?"?":"&")+((filterLimits.length == 0 )?'':filter.filterId + '='+ filterLimits) ;
347
      }
348
    }
349
    if(this.searchUtils.keyword.length > 0 ){
350
       allLimits+=(allLimits.length==0?"?":"&")+'keyword=' + this.searchUtils.keyword;
351
      this.parameterNames.push("keyword");
352
      this.parameterValues.push(this.searchUtils.keyword);
353
     }
354
    if(this.searchUtils.page != 1 && includePage){
355
       allLimits+=((allLimits.length == 0)?'?':'&') + 'page=' + this.searchUtils.page;
356
    }
357

    
358
    return allLimits;
359
  }
360
  /*
361
  *
362
  */
363
  private createSearchQueryParameters(filters:Filter[]){   // called by goTo, result emited to and used by search find pages
364
    var allFqs = "";
365
    for (let filter of filters){
366
      if(filter.countSelectedValues > 0 ){//|| (this.connectCommunityId && filter.filterId.indexOf("community")!=-1)){
367
        var fq = "";
368
        var count_selected=0;
369
        for (let value of filter.values){
370
          if(value.selected == true){
371
              count_selected++;
372
              fq+=(fq.length > 0 ? " " + filter.filterOperator + " ":"" ) + filter.filterId +  " exact " + StringUtils.quote((value.id));
373
           }
374
        }
375
        // if(this.connectCommunityId && filter.filterId.indexOf("community")!=-1){
376
        //   count_selected++;
377
        //   fq+=(fq.length > 0 ? " " + filter.filterOperator + " ":"" ) + filter.filterId +  " exact " + StringUtils.quote(StringUtils.URIEncode(this.connectCommunityId));
378
        // }
379
        fq="&fq="+StringUtils.URIEncode(fq);
380
        allFqs += fq;
381
      }
382
    }
383
    if(this.connectCommunityId ){
384
      allFqs+=  "&fq="+StringUtils.URIEncode("communityId exact " + StringUtils.quote(this.connectCommunityId ));
385
    }
386
      //TODO --
387
    var doiQuery = "";
388
    var keywordQuery = "";
389
    if((this.searchUtils.keyword && this.searchUtils.keyword.length > 0)){
390
      if((this.type == 'publications' ||this.type == 'research data')){
391
        var DOIs:string[] = DOI.getDOIsFromString(this.searchUtils.keyword);
392
        var doisParams = "";
393

    
394
        for(var i =0 ;i < DOIs.length; i++){
395
          doisParams+=(doisParams.length > 0?"&":"")+'doi="'+ DOIs[i]+'"';
396
        }
397
        if(doisParams.length > 0){
398
          doiQuery += "&"+doisParams;
399
        }else{
400
          keywordQuery += "&q="+StringUtils.URIEncode(this.searchUtils.keyword);
401
        }
402
      }else{
403
           keywordQuery += "&q="+StringUtils.URIEncode(this.searchUtils.keyword);
404
      }
405
    }
406
    return (doiQuery.length > 0 ? doiQuery:keywordQuery) + allFqs;
407

    
408
  }
409
  private createIndexQueryParameters(filters:Filter[]){   // called by goTo, result emited to and used by search pages that request 'resources'
410
    var allFqs = "";
411
    for (let filter of filters){
412
      if(filter.countSelectedValues > 0){
413
        var count_selected=0;
414
        var fq = "";
415
        for (let value of filter.values){
416
          if(value.selected == true){
417
              count_selected++;
418
               fq+=(fq.length > 0 ? " " + filter.filterOperator + " ":"" ) + filter.filterId + " exact " + (StringUtils.URIEncode(value.id));
419
           }
420
        }
421
        if(count_selected > 0){
422
          fq="&fq="+StringUtils.URIEncode(fq);
423
          allFqs += fq;
424
        }
425
      }
426
    }
427
    var doiQuery = "";
428
    var keywordQuery = "";
429
    if((this.searchUtils.keyword && this.searchUtils.keyword.length > 0)){
430
      if((this.type == 'publications' ||this.type == 'research data')){
431
        var DOIs:string[] = DOI.getDOIsFromString(this.searchUtils.keyword);
432
        var doisParams = "";
433
        for(var i =0 ;i < DOIs.length; i++){
434
          doisParams+=(doisParams.length > 0?"&":"")+'doi="'+ DOIs[i]+'"';
435
        }
436
        if(doisParams.length > 0){
437
          doiQuery += "&"+doisParams;
438
        }
439
      }else{
440
         keywordQuery += " and ("+StringUtils.quote(StringUtils.URIEncode(this.searchUtils.keyword)) +")"
441

    
442
      }
443
    }
444
    return (doiQuery.length > 0 ? doiQuery:keywordQuery) + allFqs;
445

    
446
  }
447
  public isFiltered(){
448
    var filtered=false;
449
    this.showUnknownFilters = false;
450
    for (let filter of this.filters){
451
       if(filter.countSelectedValues > 0){
452
           filtered = true;
453
           break;
454
       }
455
     }
456
    if(this.searchUtils.keyword.length > 0 ){
457
      filtered = true;
458
    }
459
    var errorCodes:ErrorCodes = new ErrorCodes();
460
    if(this.queryParameters.keys() && this.searchUtils.totalResults == 0 && this.searchUtils.status !=errorCodes.LOADING ){
461
      this.showUnknownFilters = true;
462
    }
463
    return filtered;
464
  }
465
  private clearKeywords(){
466
    if(this.searchUtils.keyword.length > 0 ){
467
      this.searchUtils.keyword ='';
468
    }
469
    this.goTo(1);
470
  }
471
  private clearFilters(){
472
    for (var i =0 ; i <  this.filters.length; i++){
473
         for (var j=0; j <  this.filters[i].countSelectedValues; j++){
474
          if(this.filters[i].values[j].selected){
475
            this.filters[i].values[j].selected = false;
476
           }
477
        this.filters[i].countSelectedValues = 0;
478
      }
479
    }
480
    this.clearKeywords();
481

    
482
  }
483
  private removeFilter(value:Value,filter:Filter){
484
    filter.countSelectedValues--;
485
    if(value.selected == true){
486
      value.selected = false;
487
     }
488
    this.goTo(1);
489

    
490
  }
491
  goTo(page:number = 1){
492
    this.searchUtils.page = page;
493
    console.info("searchUtils.page goto = "+this.searchUtils.page);
494
    var urlParameters = this.createUrlParameters(this.filters,true);
495
    console.info("urlParams : "+urlParameters);
496
    this.updateBaseUrlWithParameters(this.filters);
497
    var queryParameters = this.createSearchQueryParameters(this.filters);
498
    console.info("queryParams : "+queryParameters);
499
    var indexQuery = this.createIndexQueryParameters(this.filters);
500

    
501
    this.location.go(location.pathname,urlParameters);
502
/* Code For Piwik*/
503
    if (typeof localStorage !== 'undefined') {
504
      localStorage.setItem('previousRoute', this.router.url);
505
    }
506
    if(this.isPiwikEnabled && (typeof document !== 'undefined')){
507
      this.piwiksub = this._piwikService.trackView(this.properties, this.pageTitle, this.piwikSiteId).subscribe();
508
    }
509
    /* End Piwik Code */
510
    this.queryChange.emit({
511
        value: queryParameters,
512
        index:indexQuery
513

    
514
    });
515
    if (typeof document !== 'undefined') {
516
       this.element.nativeElement.scrollIntoView();
517
    }
518
  }
519
  filterChanged($event){
520
    console.info("filter Changed");
521
       this.goTo(1);
522
  }
523
  keywordChanged($event) {
524
       this.searchUtils.keyword = $event.value;
525
       this.goTo(1);
526
  }
527

    
528
  /*
529
  * Get A sub-array of this.refineFields array, which contains the ids of the selected filters
530
  */
531
  public getSelectedFilters():string[] {
532
    var selected:string[] = [];
533
    for(var i=0; i <  this.filters.length; i++){
534
      var filter:Filter = this.filters[i];
535
      if(filter.countSelectedValues > 0){
536
          selected.push(filter.filterId);
537
      }
538
    }
539
    return selected;
540
  }
541
  /*
542
  * Get A sub-array of this.refineFields array, which contains the ids of the selected parameters
543
  */
544
  private getSelectedParameters():string[] {
545
    var selected:string[] = [];
546
    var params:string[] = Object.keys(this.queryParameters);
547

    
548
    for(var i=0; i <  this.refineFields.length; i++){
549
       if(this.queryParameters.get(this.refineFields[i])!= undefined ){
550
          selected.push(this.refineFields[i]);
551
      }
552
    }
553
    return selected;
554
  }
555
  /*
556
  * Get A sub-array of this.refineFields array, which hides hidden fields (e.g Funding level 0,1,2,..), and contains those that depend on another fields (e.g  Funding level 0 if Funder is selected )
557
  */
558
  public getFields():string[] {
559
    var selected_filters:string[] = this.getSelectedFilters();
560
    if(selected_filters.length == 0){
561
      selected_filters = this.getSelectedParameters();
562
    }
563
    var fields:string[] = [];
564
    for(var i =0 ; i < this.refineFields.length;i++){
565
      var dependentTo = this.searchFieldsHelper.DEPENDENT_FIELDS[this.refineFields[i]];
566

    
567
      //if filter is not marked as hidden OR it is hidden but it is dependent to a field that it IS selected
568
      if(this.searchFieldsHelper.HIDDEN_FIELDS.indexOf(this.refineFields[i]) == -1 || (selected_filters.indexOf(dependentTo) != -1) || (selected_filters.indexOf(this.refineFields[i]) != -1) ){
569
          fields.push(this.refineFields[i]);
570
       }
571
    }
572
    return fields;
573
  }
574
  /*
575
  * Get a query  string of all fields, that want to get from search (e.g. &fields=funderid&fields=projectstartyear&...))
576
  */
577
  public getRefineFieldsQuery():string{
578

    
579
    var fields:string[] = this.getFields();
580
    var fieldsStr = ""
581
    for(var i =0 ; i < fields.length  ;i++){
582
        fieldsStr+="&fields="+fields[i];
583
    }
584
    return "&refine=true"+fieldsStr;
585
  }
586

    
587
  // for loading
588
  public openLoading(){
589
    if(this.loading){
590
      this.loading.open();
591
    }
592
  }
593
  public closeLoading(){
594
    if(this.loading){
595
      this.loading.close();
596
    }
597
  }
598
  getSelectedValues(filter):any{
599
    var selected = [];
600
    if(filter.countSelectedValues >0){
601
      for (var i=0; i < filter.values.length; i++){
602
        if(filter.values[i].selected){
603
          selected.push(filter.values[i]);
604
        }
605
      }
606
    }
607
    return selected;
608

    
609
  }
610
}
(23-23/36)