Project

General

Profile

1
import {Component} from '@angular/core';
2
import {ActivatedRoute} from '@angular/router';
3

    
4
import { FetchProjects } from '../utils/fetchEntitiesClasses/fetchProjects.class';
5
import { SearchProjectsService } from '../services/searchProjects.service';
6

    
7
import {OpenaireProperties} from '../utils/properties/openaireProperties';
8
import {StringUtils} from '../utils/string-utils.class';
9
import {RouterHelper} from '../utils/routerHelper.class';
10

    
11
@Component({
12
    selector: 'searchingProjectsTab',
13
    template: `
14
        <div *ngIf="fetchProjects.searchUtils.totalResults == 0" class = "uk-alert">
15
            There are no projects
16
        </div>
17

    
18
        <div *ngIf="fetchProjects.searchUtils.totalResults > 0">
19
            <div class = "uk-text-right" *ngIf = "fetchProjects.totalResults > 10">
20
				<!--a [href] = "linkToSearchProjects">
21
                    View all {{fetchProjects.totalResults}} results
22
                </a-->
23
                <a  [queryParams]="routerHelper.createQueryParams(['organizationId', 'or'], [organizationId, 'and'])"
24
                    routerLinkActive="router-link-active" [routerLink]="linkToSearchProjects">
25
                    View all {{fetchProjects.totalResults}} results
26
                </a>
27
			</div>
28
            <div class= "searchPaging uk-panel uk-margin-top">
29
              <div class="uk-float-right" *ngIf="fetchProjects.results  && fetchProjects.searchUtils.totalResults > fetchProjects.searchUtils.size">
30
              <paging-no-load [currentPage]="page" [totalResults]="fetchProjects.searchUtils.totalResults" [navigateTo]="navigateTo" [term]="keyword" [size]="size"  (pageChange)="pageChange($event)"> </paging-no-load>
31
            </div>
32
            <ul  *ngIf = "fetchProjects.funders.length > 1" class="uk-list uk-list-line">
33
              <li  *ngFor="let filter of fetchProjects.filters "  >
34
                  <div class="text-bold">Filter by {{filter.title}}:</div>
35
                  <span *ngFor = "let value of filter.values"  class = "uk-animation-fade">
36
                     <input [(ngModel)]="value.selected" type="checkbox"  (ngModelChange)="filterChange(value.selected)" />
37
                     <span title = "{{value.name}}"> {{value.name}}</span><span *ngIf = "showResultCount === true" > ({{value.number}})</span>
38
                  </span>
39
              </li>
40

    
41
              <li *ngIf = "fetchProjects.searchUtils.totalResults !=fetchProjects.totalResults "> Filtered {{fetchProjects.searchUtils.totalResults}} results of {{fetchProjects.totalResults}} total results</li>
42
              <li></li>
43
            </ul>
44

    
45
            <tab-result  [(results)]="fetchProjects.results" [(status)]= "fetchProjects.searchUtils.status"
46
                            type="project" urlParam="projectId" showLoading = true>
47
            </tab-result>
48
        </div>
49
    `
50
})
51

    
52
export class SearchingProjectsTabComponent {
53
    public fetchProjects : FetchProjects;
54
    public organizationId:string = "";
55
    public page :number = 1;
56
    public size :number = 10;
57
    public linkToSearchProjects;
58
    private filterQuery:string = "";
59
    private sub: any;
60

    
61
    public routerHelper:RouterHelper = new RouterHelper();
62

    
63
    constructor (private  route: ActivatedRoute,
64
                 private _searchProjectsService: SearchProjectsService) {
65
    }
66

    
67

    
68
    ngOnInit() {
69
        this.sub =  this.route.queryParams.subscribe(params => {
70
            this.organizationId = params['organizationId'];
71

    
72
            if(this.organizationId) {
73
                this.fetchProjects = new FetchProjects(this._searchProjectsService);
74

    
75
                this.linkToSearchProjects = OpenaireProperties.getLinkToAdvancedSearchProjects();//+"?organization="+this.organizationId+"or=and";;
76
                this.search(true,"");
77
            }
78
        });
79
    }
80

    
81
    ngOnDestroy() {
82
      this.sub.unsubscribe();
83
    }
84

    
85
    search(refine:boolean, filterQuery:string){
86
      var refineFields:string [] = ["funderid"];
87
      this.fetchProjects.getResultsForOrganizations(this.organizationId, filterQuery, this.page, this.size,(refine)?refineFields:[]);
88
    }
89

    
90
    pageChange($event) {
91
      this.page=$event.value;
92
      this.search(false, this.filterQuery);
93
    }
94

    
95
    filterChange($event) {
96
      console.log("Filter Changed");
97
      this.updateFilters();
98
      this.search(true, this.filterQuery);
99
    }
100

    
101
    updateFilters (){
102
      this.filterQuery = "";
103
      for (let filter of this.fetchProjects.filters){
104
        var filterLimits="";
105
        for (let value of filter.values){
106
            if(value.selected == true){
107
              filterLimits+=((filterLimits.length == 0)?'':',') +'"'+ StringUtils.URIEncode(value.id)+'"';
108
             }
109
        }
110
        if(filterLimits.length > 0){
111
          this.filterQuery+=' and '+filter.filterId + ' exact '+ filterLimits + ' ';
112
        }
113

    
114
      }
115
      console.log("Filter Changed"+this.filterQuery);
116

    
117
    }
118
}
(6-6/13)