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 { ErrorCodes} from '../../utils/properties/errorCodes';
7
import {RouterHelper} from '../../utils/routerHelper.class';
8
import { Observable } from 'rxjs/Observable';
9
import{EnvProperties} from '../../utils/properties/env-properties';
10

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

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

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

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

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

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

    
95
    public linkToSearchPublications: string = "";
96
    public linkToSearchResearchData: string = "";
97

    
98
    public routerHelper:RouterHelper = new RouterHelper();
99
    public errorCodes:ErrorCodes = new ErrorCodes();
100

    
101
    public page: number = 1;
102
    public pageSize: number = 10;
103

    
104
    constructor () {}
105

    
106
    ngOnInit() {
107
      this.linkToSearchPublications = this.properties.searchLinkToAdvancedPublications;
108
      this.linkToSearchResearchData = this.properties.searchLinkToAdvancedDatasets;
109
    }
110

    
111
    ngOnDestroy() {}
112

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

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