Project

General

Profile

1
import {Component, Input, ViewChild, Output, EventEmitter,ElementRef} from '@angular/core';
2
import {Observable}       from 'rxjs/Observable';
3
import {Location} from '@angular/common';
4
import { Filter, Value} from './searchHelperClasses.class';
5
import {SearchResult}     from '../../utils/entities/searchResult';
6
import {SearchFields} from '../../utils/properties/searchFields';
7
import {SearchUtilsClass} from './searchUtils.class';
8
import {DOI, StringUtils} from '../../utils/string-utils.class';
9
import {ModalLoading} from '../../utils/modal/loading.component';
10
import { Meta} from '../../../angular2-meta';
11
import{SearchFilterComponent} from './searchFilter.component';
12
import {SearchFilterModalComponent} from './searchFilterModal.component';
13
import {OpenaireProperties} from '../../utils/properties/openaireProperties';
14

    
15

    
16
@Component({
17
    selector: 'search-page',
18
    template: `
19

    
20
    <div class="uk-margin-top">
21
      <div class="page-header">
22
          <h1>{{pageTitle}}</h1>
23
      </div>
24
      <div>
25
        <div *ngIf="showRefine"  >
26
          <div  class="uk-width-1-1  uk-margin uk-padding uk-panel  uk-background-muted">
27
              <search-form [isDisabled]="disableForms" [(keyword)]="searchUtils.keyword" (keywordChange)="keywordChanged($event)"></search-form>
28
              <div *ngIf="isFiltered()" class = " uk-text-center ">
29
                <span *ngIf = "searchUtils.keyword.length > 0">Keywords: <span [innerHtml]="searchUtils.keyword"></span><a (click) = "clearKeywords() " [class]="(disableForms)?'uk-icon-button uk-disabled':'uk-icon-button'"><span class=" clickable " aria-hidden="true"><span uk-icon="icon: close"></span></span></a>
30
                </span>
31
                <span *ngFor="let filter of filters " >
32
                  <span *ngIf = "filter.countSelectedValues > 0"> {{filter.title}}:
33
                    <span *ngFor="let value of getSelectedValues(filter); let i = index;  let end = last; " ><span [innerHtml]="value.name"></span><a (click) = "removeFilter(value, filter) " [class]="(disableForms)?'uk-icon-button uk-disabled':'uk-icon-button'"><span class=" clickable" aria-hidden="true"><span uk-icon="icon: close"></span></span></a>
34
                     <span *ngIf="!end">, </span>
35
                    </span>
36
                  </span>
37
                </span>
38
                <!--span>
39
                 Clear All
40
                <a  (click)="clearFilters()"  class="uk-icon-button uk-text-right"><span uk-icon="icon: close"></span></a></span-->
41
                <a (click)="clearFilters()" [class]="(disableForms)?'uk-disabled uk-link-muted':''">
42
                 Clear All
43
                </a>
44
              </div>
45
              <a *ngIf = "advancedSearchLink && advancedSearchLink.length > 0" routerLinkActive="router-link-active" [class]="(disableForms)?'uk-float-right uk-disabled uk-link-muted':'uk-float-right'" [routerLink]=advancedSearchLink >More search options <span uk-icon="icon: chevron-right"></span></a>
46
          </div>
47
          <div  class="uk-grid uk-width-1-1 uk-margin">
48
            <div class=" search-filters uk-width-1-4@l  uk-width-1-4@m  uk-width-1-1@s ">
49
               <search-filter  *ngFor="let filter of filters " [isDisabled]="disableForms" [filter]="filter"  [showResultCount]=showResultCount (change)="filterChanged($event)" (toggleModal)="toggleModal($event)"></search-filter>
50
            </div>
51

    
52
            <div class="uk-width-3-4@m  uk-width-3-4@l  uk-width-1-1@s uk-first-column" >
53
              <search-paging [type]="type" [(searchUtils)] = "searchUtils"  [(results)] = "results"  [(baseUrl)] = "baseUrl" [(parameterNames)] = "parameterNames" [(parameterValues)] = "parameterValues" ></search-paging>
54
              <search-download [type]="csvPath" [csvParams]="csvParams" [totalResults]="searchUtils.totalResults" (downloadClick)="downloadClicked($event)"></search-download>
55
              <!--p class="uk-text-right" *ngIf="totalResults <= 10000">
56
                  <span class="clickable" (click)="downloadfile(downloadURLAPI+type+'?format=csv&page=0&size='+totalResults+csvParams,type+'-report-'+totalResults)">
57
                      <span aria-hidden="true" class="glyphicon glyphicon-download"></span>
58
                      <span uk-icon="icon: download"></span> Results (CSV)
59
                  </span>
60
              </p-->
61
              <p *ngIf="tableViewLink" class="uk-text-right">
62
                <a target="_blank" routerLinkActive="router-link-active" [class]="(disableForms)?'uk-disabled uk-link-muted':''" [routerLink]=tableViewLink >Show results in table view</a>
63
              </p>
64

    
65
              <search-result    *ngIf="!tableView"
66
                                [results]="results"
67
                                [status]=searchUtils.status
68
                                [type]="entityType" [urlParam]="urlParam"
69
                                [showLoading]="true">
70
              </search-result>
71
              <!--table-view   *ngIf="tableView"
72
                            [results]="results"
73
                            [status]=searchUtils.status
74
                            [type]="entityType" [urlParam]="urlParam"
75
                            [showLoading]="true">
76
              </table-view-->
77
            </div>
78

    
79

    
80
          </div>
81
        </div>
82

    
83

    
84
        <div *ngIf="!showRefine" >
85
            <search-form [isDisabled]="disableForms" [(keyword)]="searchUtils.keyword" (keywordChange)="keywordChanged($event)"></search-form>
86
            <search-paging [type]="type" [(searchUtils)] = "searchUtils"  [(results)] = "results"   [(baseUrl)] = "baseUrl"  [(parameterNames)] = "parameterNames" [(parameterValues)] = "parameterValues"></search-paging>
87
            <search-download [type]="csvPath" [csvParams]="csvParams" [totalResults]="searchUtils.totalResults" (downloadClick)="downloadClicked($event)"></search-download>
88
            <search-result  *ngIf="!tableView"
89
                            [results]="results"
90
                            [status]=searchUtils.status
91
                            [type]="entityType" [urlParam]="urlParam"
92
                            [showLoading]="true">
93
            </search-result>
94
            <!--table-view   *ngIf="tableView"
95
                          [results]="results"
96
                          [status]=searchUtils.status
97
                          [type]="entityType" [urlParam]="urlParam"
98
                          [showLoading]="true">
99
            </table-view-->
100
        </div>
101
      </div>
102
    </div>
103

    
104
    <!--modal-loading [message]= "'Loading results...'"></modal-loading-->
105

    
106
    <!--modal-search-filter [filter]="currentFilter" [showResultCount]=showResultCount (modalChange)="filterChanged($event)"></modal-search-filter-->
107

    
108
    `
109
})
110
export class SearchPageComponent {
111
  @Input() pageTitle = "";
112
  @Input() results = [];
113
  @Input() filters = [];
114
  @Input() type:string = "";
115
  @Input() entityType: string = "";
116
  @Input() searchUtils:SearchUtilsClass = new SearchUtilsClass();
117
  @Output() queryChange  = new EventEmitter();
118
  @Output() downloadClick = new EventEmitter();
119
  @Input() baseUrl:string = '';
120
  @Input() showResultCount:boolean = true;
121
  @Input() showRefine:boolean = true;
122
  @Input() refineFields = [];
123
  @Input() csvParams: string;
124
  @Input() csvPath: string;
125
  @Input() advancedSearchLink: string = "";
126
  @Input() tableViewLink: string;
127
  @Input() disableForms: boolean = false;
128
  @Input() tableView: boolean = false;
129

    
130
  @ViewChild (ModalLoading) loading : ModalLoading ;
131
  public fieldIdsMap;//:  { [key:string]:{ name:string, operator:string, type:string, indexField:string, equalityOperator:string  }};
132
  private searchFieldsHelper:SearchFields = new SearchFields();
133
  private queryParameters: Map<string, string>  = new Map<string,string>();
134
  private baseURLWithParameters:string = '';
135
  private sub: any;
136
  public countFilters= 0;
137
  public urlParam: string;
138
  public parameterNames:string[] =[];
139
  public parameterValues:string[] =[];
140

    
141
  //@ViewChild (SearchFilterModalComponent) searchFilterModal : SearchFilterModalComponent ;
142
  public currentFilter: Filter;
143

    
144
  constructor (private location: Location , private _meta: Meta,private element: ElementRef) {
145
   }
146

    
147
  ngOnInit() {
148
    if (typeof document !== 'undefined') {
149
       this.element.nativeElement.scrollIntoView();
150
    }
151
        this.updateBaseUrlWithParameters(this.filters);
152
        this.defineUrlParam();
153
        this.updateTitle(this.pageTitle);
154
        this.updateDescription("Openaire, search, repositories, open access, type, data provider, funder, project, " + this.type + "," +this.pageTitle);
155
        //this.updateUrl(OpenaireProperties.getBaseLink()+location.pathname);
156
        // console.info(this.entityType + "   " + this.urlParam + this.type);
157
  }
158
  ngAfterViewChecked(){
159

    
160
  }
161

    
162
  toggleModal($event) {
163
    this.currentFilter = $event.value;
164
    //this.searchFilterModal.open();
165
  }
166

    
167
  updateDescription(description:string){
168
    this._meta.updateMeta("description", description);
169
    this._meta.updateProperty("og:description", description);
170
  }
171
  updateTitle(title:string){
172
    var _suffix ="| OpenAIRE";
173
    var _title = ((title.length> 50 ) ?title.substring(0,50):title) + _suffix;
174
    this._meta.setTitle(_title );
175
    this._meta.updateProperty("og:title",_title);
176
  }
177
  updateUrl(url:string){
178
    this._meta.updateProperty("og:url", url);
179
  }
180
  private defineUrlParam() {
181
      if(this.entityType == "publication") {
182
          this.urlParam = "articleId";
183
      } else if(this.entityType == "dataset") {
184
          this.urlParam = "datasetId";
185
      } else if(this.entityType == "project") {
186
          this.urlParam = "projectId";
187
      } else if(this.entityType == "organization") {
188
          this.urlParam = "organizationId";
189
      } else if(this.entityType == "person") {
190
          this.urlParam = "personId";
191
      } else {
192
          this.urlParam = "datasourceId";
193
      }
194
  }
195

    
196
  public getQueryParametersFromUrl(params){
197
    // var parameters = "";
198
    var allFqs = "";
199

    
200
    for(var i=0; i< this.refineFields.length ; i++){
201
         var filterId =  this.refineFields[i];
202

    
203
          if(params[filterId] != undefined) {
204
            if(this.queryParameters == undefined){
205
              this.queryParameters = new Map<string,string>();
206
            }
207
             this.queryParameters[filterId]=StringUtils.URIDecode(params[filterId]);
208
             let values = (StringUtils.URIDecode(this.queryParameters[filterId])).split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,-1);
209
             var countvalues = 0;
210
             var fq = "";
211
             for(let value of values) {
212
               countvalues++;
213
               var paramId = this.fieldIdsMap[filterId].param;
214
              // parameters+='&' + paramId+ '='+ value;//+"&" + this.fieldIdsMap[paramId].operator + "="+((countvalues == 1)?"and":"or");
215
              fq+=(fq.length > 0 ? " " + "or" + " ":"" ) + filterId +" exact " +value;// StringUtils.quote(value) ;
216
             }
217
             if(countvalues > 0){
218
               fq="&fq="+fq;
219
             }
220
             allFqs += fq;
221
          }
222

    
223

    
224
   }
225
   var keyword = params['keyword'];
226
   var doiQuery = "";
227
   var keywordQuery = "";
228
   if((keyword && keyword.length > 0)){
229
      if((this.type == 'publications' ||this.type == 'datasets')){
230
        var DOIs:string[] = DOI.getDOIsFromString(keyword);
231
       var doisParams = "";
232

    
233
       for(var i =0 ;i < DOIs.length; i++){
234
         doisParams+=(doisParams.length > 0?"&":"")+'doi="'+ DOIs[i]+'"';
235
       }
236
       if(doisParams.length > 0){
237
         doiQuery += "&"+doisParams;
238
       }else {
239
        keywordQuery += "&q="+StringUtils.URIEncode(keyword);
240
       }
241
     }else{
242
        keywordQuery += "&q="+StringUtils.URIEncode(keyword);
243

    
244
     }
245
   }
246
   return (doiQuery.length > 0 ? doiQuery:keywordQuery) + allFqs;
247
 }
248
 public getIndexQueryParametersFromUrl(params){
249
  //  var parameters = "";
250
   var allFqs = "";
251

    
252
   for(var i=0; i< this.refineFields.length ; i++){
253
        var filterId =  this.refineFields[i];
254
        var fq = "";
255
         if(params[filterId] != undefined) {
256
           if(this.queryParameters == undefined){
257
             this.queryParameters = new Map<string,string>();
258
           }
259
            this.queryParameters[filterId]=decodeURIComponent(params[filterId]);
260
            let values = (decodeURIComponent(this.queryParameters[filterId])).split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,-1);
261
            var countvalues = 0
262
            for(let value of values) {
263
              countvalues++;
264
              // parameters+= ((countvalues == 1)?" and (":" or ")+ filterId+ '='+ value;
265
              fq+=(fq.length > 0 ? " " + "or" + " ":"" ) + filterId + " exact " + value;//StringUtils.quote(value);
266
            }
267
            // parameters+= " ) ";
268
            if(countvalues > 0){
269
              fq="&fq="+fq;
270
            }
271
            allFqs += fq;
272
        }
273

    
274
  }
275
  var keyword = params['keyword'];
276
  var doiQuery = "";
277
  var keywordQuery = "";
278
  if((keyword && keyword.length > 0)){
279
    if((this.type == 'publications' ||this.type == 'datasets')){
280
      var DOIs:string[] = DOI.getDOIsFromString(keyword);
281
      var doisParams = "";
282

    
283
      for(var i =0 ;i < DOIs.length; i++){
284
        doisParams+=(doisParams.length > 0?"&":"")+'doi="'+ DOIs[i]+'"';
285
      }
286
      if(doisParams.length > 0){
287
        doiQuery += "&"+doisParams;
288
      }
289
    }else{
290
       keywordQuery += "and ("+StringUtils.quote(StringUtils.URIEncode(keyword)) +")";
291

    
292
    }
293
  }
294
  return (doiQuery.length > 0 ? doiQuery:keywordQuery) + allFqs;
295

    
296
}
297
 /*
298
 * Mark as check the new filters that are selected, when you get them from search
299
 */
300
  public checkSelectedFilters(filters:Filter[]){
301
    this.filters = filters;
302
       for(var i=0; i< filters.length ; i++){
303
            var filter:Filter = filters[i];
304
            filter.countSelectedValues = 0;
305
              if(this.queryParameters[filter.filterId] != undefined) {
306
                let values = (decodeURIComponent(this.queryParameters[filter.filterId])).split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,-1);
307
                     for(let filterValue of filter.values) {
308
                       if(values.indexOf(StringUtils.quote(filterValue.id)) > -1) {
309
                            filterValue.selected = true;
310
                            filter.countSelectedValues++;
311
                         }else{
312
                           filterValue.selected = false;
313

    
314
                         }
315
                    }
316
            }else{
317
              for(let filterValue of filter.values) {
318
                 filterValue.selected = false;
319
              }
320
            }
321
        }
322

    
323
        return filters;
324
  }
325
  /*
326
  * Update the url with proper parameters. This is used as base url in Paging Component
327
  */
328
  public updateBaseUrlWithParameters(filters:Filter[]){
329
    this.baseURLWithParameters = this.baseUrl + this.createUrlParameters(filters,false);
330
  }
331
  /*
332
  *
333
  */
334
  private createUrlParameters(filters:Filter[], includePage:boolean){
335
    var allLimits="";//location.search.slice(1);
336
    this.parameterNames.splice(0,this.parameterNames.length);
337
    this.parameterValues.splice(0,this.parameterValues.length);
338

    
339
    for (let filter of filters){
340
      var filterLimits="";
341
      if(filter.countSelectedValues > 0){
342
        for (let value of filter.values){
343
          if(value.selected == true){
344
            filterLimits+=((filterLimits.length == 0)?'':',') +'"'+ StringUtils.URIEncode(value.id)+'"';
345
           }
346
        }
347
        this.queryParameters[filter.filterId]=filterLimits;
348
        if(filterLimits.length > 0){
349
          this.parameterNames.push(filter.filterId);
350
          this.parameterValues.push(filterLimits);
351
        }
352
        allLimits+=(allLimits.length==0?"?":"&")+((filterLimits.length == 0 )?'':filter.filterId + '='+ filterLimits) ;
353
      }
354
    }
355
    if(this.searchUtils.keyword.length > 0 ){
356
       allLimits+=(allLimits.length==0?"?":"&")+'keyword=' + this.searchUtils.keyword;
357
      this.parameterNames.push("keyword");
358
      this.parameterValues.push(this.searchUtils.keyword);
359
     }
360
    if(this.searchUtils.page != 1 && includePage){
361
       allLimits+=((allLimits.length == 0)?'?':'&') + 'page=' + this.searchUtils.page;
362
    }
363

    
364
    return allLimits;
365
  }
366
  /*
367
  *
368
  */
369
  private createSearchQueryParameters(filters:Filter[]){
370
    var allFqs = "";
371
    for (let filter of filters){
372
      if(filter.countSelectedValues > 0){
373
        var fq = "";
374
        var count_selected=0;
375
        for (let value of filter.values){
376
          if(value.selected == true){
377
              count_selected++;
378
              fq+=(fq.length > 0 ? " " + filter.filterOperator + " ":"" ) + filter.filterId +  " exact " + StringUtils.quote(StringUtils.URIEncode(value.id));
379
           }
380
        }
381
        fq="&fq="+fq;
382
        allFqs += fq;
383
      }
384
    }
385
    var doiQuery = "";
386
    var keywordQuery = "";
387
    if((this.searchUtils.keyword && this.searchUtils.keyword.length > 0)){
388
      if((this.type == 'publications' ||this.type == 'datasets')){
389
        var DOIs:string[] = DOI.getDOIsFromString(this.searchUtils.keyword);
390
        var doisParams = "";
391

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

    
405
    return (doiQuery.length > 0 ? doiQuery:keywordQuery) + allFqs;
406

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

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

    
445
  }
446
  private isFiltered(){
447
    var filtered=false;
448
    for (let filter of this.filters){
449
       if(filter.countSelectedValues > 0){
450
           filtered = true;
451
           break;
452
       }
453
     }
454
    if(this.searchUtils.keyword.length > 0 ){
455
      filtered = true;
456
    }
457
    return filtered;
458
  }
459
  private clearKeywords(){
460
    if(this.searchUtils.keyword.length > 0 ){
461
      this.searchUtils.keyword ='';
462
    }
463
    this.goTo(1);
464
  }
465
  private clearFilters(){
466
    for (var i =0 ; i <  this.filters.length; i++){
467
         for (var j=0; j <  this.filters[i].countSelectedValues; j++){
468
          if(this.filters[i].values[j].selected){
469
            this.filters[i].values[j].selected = false;
470
           }
471
        this.filters[i].countSelectedValues = 0;
472
      }
473
    }
474
    this.clearKeywords();
475

    
476
  }
477
  private removeFilter(value:Value,filter:Filter){
478
    filter.countSelectedValues--;
479
    if(value.selected == true){
480
      value.selected = false;
481
     }
482
    this.goTo(1);
483

    
484
  }
485
  goTo(page:number = 1){
486
    this.searchUtils.page = page;
487
    console.info("searchUtils.page goto = "+this.searchUtils.page);
488
    this.queryParameters = new Map<string,string>();
489
    var urlParameters = this.createUrlParameters(this.filters,true);
490
    console.info("urlParams : "+urlParameters);
491
    this.updateBaseUrlWithParameters(this.filters);
492
    var queryParameters = this.createSearchQueryParameters(this.filters);
493
    console.info("queryParams : "+queryParameters);
494
    var indexQuery = this.createIndexQueryParameters(this.filters);
495

    
496
    this.location.go(location.pathname,urlParameters);
497

    
498
    this.queryChange.emit({
499
        value: queryParameters,
500
        index:indexQuery
501

    
502
    });
503
    if (typeof document !== 'undefined') {
504
       this.element.nativeElement.scrollIntoView();
505
    }
506
  }
507
  filterChanged($event){
508
    console.info("filter Changed");
509
       this.goTo(1);
510
  }
511
  keywordChanged($event) {
512
       this.searchUtils.keyword = $event.value;
513
       this.goTo(1);
514
  }
515

    
516
	downloadClicked($event) {
517
		if($event.value == true) {
518
		    var queryParameters = this.createSearchQueryParameters(this.filters);
519

    
520
		    this.downloadClick.emit({
521
		        value: queryParameters
522
		    });
523
		}
524
	}
525

    
526
  /*
527
  * Get A sub-array of this.refineFields array, which contains the ids of the selected filters
528
  */
529
  public getSelectedFilters():string[] {
530
    var selected:string[] = [];
531
    for(var i=0; i <  this.filters.length; i++){
532
      var filter:Filter = this.filters[i];
533
      if(filter.countSelectedValues > 0){
534
          selected.push(filter.filterId);
535
      }
536
    }
537
    return selected;
538
  }
539
  /*
540
  * Get A sub-array of this.refineFields array, which contains the ids of the selected parameters
541
  */
542
  private getSelectedParameters():string[] {
543
    var selected:string[] = [];
544
    var params:string[] = Object.keys(this.queryParameters);
545
    for(var i=0; i <  params.length; i++){
546
       if(this.refineFields.indexOf(params[i]) > -1){
547
          selected.push(params[i]);
548
      }
549
    }
550
    return selected;
551
  }
552
  /*
553
  * 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 )
554
  */
555
  public getFields():string[] {
556
    var selected_filters:string[] = this.getSelectedFilters();
557
    if(selected_filters.length == 0){
558
      selected_filters = this.getSelectedParameters();
559
    }
560
    var fields:string[] = [];
561
    for(var i =0 ; i < this.refineFields.length;i++){
562
      var dependentTo = this.searchFieldsHelper.DEPENDENT_FIELDS[this.refineFields[i]];
563

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

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

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

    
606
  }
607
}
(18-18/28)