Project

General

Profile

1
import {Component, Input} from '@angular/core';
2

    
3
import { FetchPublications } from '../../utils/fetchEntitiesClasses/fetchPublications.class';
4
import { FetchDatasets } from '../../utils/fetchEntitiesClasses/fetchDatasets.class';
5

    
6
import {OpenaireProperties, ErrorCodes} from '../../utils/properties/openaireProperties';
7
import {RouterHelper} from '../../utils/routerHelper.class';
8
import { Observable } from 'rxjs/Observable';
9

    
10
@Component({
11
    selector: 'relatedDatasourcesTab',
12
    template: `
13
        <!--div *ngIf="fetchPublications.searchUtils.status == errorCodes.NONE && fetchDatasets.searchUtils.status == errorCodes.NONE"
14
              class="uk-alert uk-alert-primary uk-animation-fade" role="alert">
15
              No related content providers available
16
        </div>
17
        <div *ngIf="fetchPublications.searchUtils.status == errorCodes.ERROR && fetchDatasets.searchUtils.status == errorCodes.ERROR"
18
              class="uk-alert uk-alert-warning uk-animation-fade" role="alert">
19
          An Error Occured
20
        </div-->
21
        <!--div *ngIf="fetchPublications.searchUtils.status == errorCodes.NOT_AVAILABLE && fetchDatasets.searchUtils.status == errorCodes.NOT_AVAILABLE"
22
              class="uk-alert uk-alert-danger uk-animation-fade" role="alert">
23
          Service not available
24
        </div-->
25
        <!--div *ngIf="fetchPublications.searchUtils.status == errorCodes.LOADING || fetchDatasets.searchUtils.status == errorCodes.LOADING || loading"
26
              class="uk-animation-fade uk-width-1-1" role="alert"><img src="./assets/loading.gif" class="uk-align-center" alt="Loading">
27
        </div-->
28

    
29
        <errorMessages [status]="[fetchPublications.searchUtils.status, fetchDatasets.searchUtils.status]" [type]="'related content providers'"></errorMessages>
30

    
31
        <div *ngIf="(fetchPublications.searchUtils.status == errorCodes.DONE || fetchDatasets.searchUtils.status == errorCodes.DONE) && !loading">
32
            <div *ngIf="results && results.size > pageSize" class="uk-margin">
33
              <span class="uk-text-bold">{{results.size}} related content providers, page {{page}} of {{totalPages(results.size)}}</span>
34
              <paging-no-load class="uk-float-right" [currentPage]="page" [totalResults]="results.size" [size]="pageSize" (pageChange)="updatePage($event)"></paging-no-load>
35
            </div>
36

    
37
            <table class="uk-table uk-table-striped">
38
                <thead>
39
                    <tr>
40
                        <th class="uk-text-center">Content Provider Name</th>
41
                        <th *ngIf="fetchPublications.results.length > 0 || fetchPublications.searchUtils.status == errorCodes.ERROR"
42
                            class="uk-text-center">
43
                          Number of Publications
44
                        </th>
45
                        <th *ngIf="fetchDatasets.results.length > 0 || fetchDatasets.searchUtils.status == errorCodes.ERROR"
46
                            class="uk-text-center">
47
                          Number of Research Data
48
                        </th>
49
                    </tr>
50
                </thead>
51
                <tbody>
52
                  <ng-container *ngIf="results">
53
                      <ng-container *ngFor="let id of results.keys() let i=index">
54
                        <tr *ngIf="i>=(page-1)*pageSize && i<page*pageSize">
55
                          <td class="uk-text-center">
56
                              <a [queryParams]="{datasourceId: id}" routerLinkActive="router-link-active" routerLink="/search/dataprovider">
57
                                  {{results.get(id).name}}
58
                              </a>
59
                          </td>
60
                          <td *ngIf="fetchPublications.results.length > 0" class="uk-text-center">
61
                              <a  [queryParams]="routerHelper.createQueryParams(['hostedBy', 'ho', 'collectedFrom', 'co'], [id, 'and', dataproviderId, 'and'])"
62
                                  routerLinkActive="router-link-active" [routerLink]="linkToSearchPublications">
63
                                      {{results.get(id).countPublications}}
64
                              </a>
65
                          </td>
66
                          <td *ngIf="fetchPublications.searchUtils.status == errorCodes.ERROR" class="uk-text-center">-</td>
67

    
68
                          <td *ngIf="fetchDatasets.results.length > 0" class="uk-text-center">
69
                              <a  [queryParams]="routerHelper.createQueryParams(['hostedBy', 'ho', 'collectedFrom', 'co'], [id, 'and', dataproviderId, 'and'])"
70
                                  routerLinkActive="router-link-active" [routerLink]="linkToSearchResearchData">
71
                                      {{results.get(id).countDatasets}}
72
                              </a>
73
                          </td>
74
                          <td *ngIf="fetchDatasets.searchUtils.status == errorCodes.ERROR" class="uk-text-center">-</td>
75
                        </tr>
76
                      </ng-container>
77
                    </ng-container>
78
                </tbody>
79
            </table>
80
        </div>
81
    `
82
})
83

    
84
export class RelatedDatasourcesTabComponent {
85
    @Input() dataproviderId: string;
86
    @Input() fetchPublications : FetchPublications;
87
    @Input() fetchDatasets : FetchDatasets;
88
    // true: preprocessing is not over
89
    @Input() loading: boolean = true;
90
    // Εvery content provider's id is a single key of a map
91
    @Input() results: Map<string, {"name": string, "countPublications": string, "countDatasets": string}>;
92

    
93
    public linkToSearchPublications: string = "";
94
    public linkToSearchResearchData: string = "";
95

    
96
    public routerHelper:RouterHelper = new RouterHelper();
97
    public errorCodes:ErrorCodes = new ErrorCodes();
98

    
99
    public page: number = 1;
100
    public pageSize: number = 10;
101

    
102
    constructor () {}
103

    
104
    ngOnInit() {
105
      this.linkToSearchPublications = OpenaireProperties.getLinkToAdvancedSearchPublications();//+"?&hostedBy=";//+ +"&ho=and&collectedFrom="+ +"&co=and";
106
      this.linkToSearchResearchData = OpenaireProperties.getLinkToAdvancedSearchDatasets();
107
    }
108

    
109
    ngOnDestroy() {}
110

    
111
    totalPages(totalResults: number): number {
112
      let totalPages:any = totalResults/this.pageSize;
113
      if(!(Number.isInteger(totalPages))) {
114
          totalPages = (parseInt(totalPages, this.pageSize) + 1);
115
      }
116
      return totalPages;
117
    }
118

    
119
    updatePage($event) {
120
      this.page = $event.value;
121
    }
122
}
(11-11/12)