Project

General

Profile

1
import {Component, Input} 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, ErrorCodes} 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
        <div *ngIf="fetchProjects.searchUtils.status == errorCodes.NONE" class="uk-alert uk-alert-primary uk-animation-fade" role="alert">There are no projects</div>
18
        <div *ngIf="fetchProjects.searchUtils.status == errorCodes.ERROR" class="uk-alert uk-alert-warning uk-animation-fade" role="alert">An Error Occured</div>
19
        <div *ngIf="fetchProjects.searchUtils.status == errorCodes.NOT_AVAILABLE" class="uk-alert uk-alert-danger uk-animation-fade" role="alert">Service not available</div>
20
        <div *ngIf="fetchProjects.searchUtils.status == errorCodes.LOADING" class="uk-alert uk-alert-primary uk-animation-fade" role="alert">Loading...</div>
21

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

    
44
                <li *ngIf = "fetchProjects.searchUtils.totalResults !=fetchProjects.totalResults "> Filtered {{fetchProjects.searchUtils.totalResults}} results of {{fetchProjects.totalResults}} total results</li>
45
                <li></li>
46
              </ul>
47

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

    
56
export class SearchingProjectsTabComponent {
57
    @Input() fetchProjects : FetchProjects;
58
    public organizationId:string = "";
59
    public page :number = 1;
60
    public size :number = 10;
61
    public linkToSearchProjects;
62
    private filterQuery:string = "";
63
    private sub: any;
64

    
65
    public routerHelper:RouterHelper = new RouterHelper();
66
    public errorCodes:ErrorCodes = new ErrorCodes();
67

    
68
    constructor (private  route: ActivatedRoute,
69
                 private _searchProjectsService: SearchProjectsService) {
70
    }
71

    
72

    
73
    ngOnInit() {
74
        this.sub =  this.route.queryParams.subscribe(params => {
75
            this.organizationId = params['organizationId'];
76

    
77
            if(this.organizationId) {
78
                //this.fetchProjects = new FetchProjects(this._searchProjectsService);
79

    
80
                this.linkToSearchProjects = OpenaireProperties.getLinkToAdvancedSearchProjects();//+"?organization="+this.organizationId+"or=and";;
81
                if(this.fetchProjects.searchUtils.totalResults > 0) {
82
                  this.search(false,"");
83
                }
84
            }
85
        });
86
    }
87

    
88
    ngOnDestroy() {
89
      this.sub.unsubscribe();
90
    }
91

    
92
    search(refine:boolean, filterQuery:string){
93
      var refineFields:string [] = ["funderid"];
94
      this.fetchProjects.getResultsForOrganizations(this.organizationId, filterQuery, this.page, this.size,(refine)?refineFields:[]);
95
    }
96

    
97
    pageChange($event) {
98
      this.page=$event.value;
99
      this.search(false, this.filterQuery);
100
    }
101

    
102
    filterChange($event) {
103
      console.log("Filter Changed");
104
      this.updateFilters();
105
      this.search(true, this.filterQuery);
106
    }
107

    
108
    updateFilters (){
109
      this.filterQuery = "";
110
      for (let filter of this.fetchProjects.filters){
111
        var filterLimits="";
112
        for (let value of filter.values){
113
            if(value.selected == true){
114
              filterLimits+=((filterLimits.length == 0)?'':',') +'"'+ StringUtils.URIEncode(value.id)+'"';
115
             }
116
        }
117
        if(filterLimits.length > 0){
118
          this.filterQuery+=' and '+filter.filterId + ' exact '+ filterLimits + ' ';
119
        }
120

    
121
      }
122
      console.log("Filter Changed"+this.filterQuery);
123

    
124
    }
125
}
(6-6/13)