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

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

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

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

    
91
    public linkToSearchPublications: string = "";
92
    public linkToSearchResearchData: string = "";
93

    
94
    public routerHelper:RouterHelper = new RouterHelper();
95
    public errorCodes:ErrorCodes = new ErrorCodes();
96

    
97
    public page: number = 1;
98
    public pageSize: number = 10;
99

    
100
    constructor () {}
101

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

    
107
    ngOnDestroy() {}
108

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

    
117
    updatePage($event) {
118
      this.page = $event.value;
119
    }
120
}
(11-11/13)