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 {
190
          this.urlParam = "datasourceId";
191
      }
192
  }
193

    
194
  public getQueryParametersFromUrl(params){
195
    // var parameters = "";
196
    var allFqs = "";
197

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

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

    
221

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

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

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

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

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

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

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

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

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

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

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

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

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

    
403
    return (doiQuery.length > 0 ? doiQuery:keywordQuery) + allFqs;
404

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

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

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

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

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

    
494
    this.location.go(location.pathname,urlParameters);
495

    
496
    this.queryChange.emit({
497
        value: queryParameters,
498
        index:indexQuery
499

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

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

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

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

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

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

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

    
604
  }
605
}
(18-18/28)