Project

General

Profile

« Previous | Next » 

Revision 60902

[Library | Trunk]: Numbers add external link choice for links

View differences:

modules/uoa-services-library/trunk/ng-openaire-library/src/app/sharedComponents/numbers/numbers.component.ts
6 6
import {properties} from '../../../../environments/environment';
7 7
import {NumberSize, NumberUtils} from '../../utils/number-utils.class';
8 8
import {BehaviorSubject, Observable, Subscription, zip} from 'rxjs';
9
import {RouterHelper} from "../../utils/routerHelper.class";
9 10

  
10 11
export interface Numbers {
11 12
  publicationsSize?: NumberSize;
......
19 20
  datasourcesSize?: NumberSize;
20 21
}
21 22

  
23
type Entity = 'publication' | 'dataset' | 'software' | 'other' | 'project' | 'datasource';
24

  
25
interface Link {
26
  link: string,
27
  params?: any
28
}
29

  
22 30
@Component({
23 31
  selector: 'numbers',
24 32
  template: `
......
26 34
      <div class="uk-container uk-section uk-padding-remove-bottom uk-text-center">
27 35
        <div class="uk-grid uk-grid-large uk-child-width-1-3@m" uk-grid>
28 36
          <div *ngIf="numbers.fundersSize">
29
            <h3>
30
              <a href="https://explore.openaire.eu/search/find/projects" target="_blank" class="uk-text-bold number">
37
            <h3 *ngIf="links.get('project')">
38
              <a *ngIf="externalLink" [href]="links.get('project').link" target="_blank" class="uk-text-bold number">
31 39
                {{numbers.fundersSize.number|number}}<span class="number-size">{{numbers.fundersSize.size}}</span>
32 40
              </a>
41
              <a *ngIf="!externalLink" [routerLink]="links.get('project').link" [queryParams]="links.get('project').params" class="uk-text-bold number">
42
                {{numbers.fundersSize.number|number}}<span class="number-size">{{numbers.fundersSize.size}}</span>
43
              </a>
33 44
            </h3>
34 45
            <span class="uk-text-uppercase uk-text-large">Funders</span>
35 46
          </div>
36 47
          <div *ngIf="numbers.datasourcesSize">
37 48
            <h3>
38
              <a href="https://explore.openaire.eu/search/find/dataproviders" target="_blank"
39
                 class="uk-text-bold number">
49
              <a *ngIf="externalLink" [href]="links.get('datasource').link" target="_blank" class="uk-text-bold number">
40 50
                {{numbers.datasourcesSize.number|number}}<span class="number-size">{{numbers.datasourcesSize.size}}</span>
41 51
              </a>
52
              <a *ngIf="!externalLink" [routerLink]="links.get('datasource').link" [queryParams]="links.get('datasource').params" class="uk-text-bold number">
53
                {{numbers.datasourcesSize.number|number}}<span class="number-size">{{numbers.datasourcesSize.size}}</span>
54
              </a>
42 55
            </h3>
43 56
            <span class="uk-text-uppercase uk-text-large">Content providers</span>
44 57
          </div>
45 58
          <div *ngIf="numbers.projectsSize">
46 59
            <h3>
47
              <a href="https://explore.openaire.eu/search/find/projects" target="_blank" class="uk-text-bold number">
60
              <a *ngIf="externalLink" [href]="links.get('project').link" target="_blank" class="uk-text-bold number">
48 61
                {{numbers.projectsSize.number|number}}<span class="number-size">{{numbers.projectsSize.size}}</span>
49 62
              </a>
63
              <a *ngIf="!externalLink" [routerLink]="links.get('project').link" [queryParams]="links.get('project').params" class="uk-text-bold number">
64
                {{numbers.projectsSize.number|number}}<span class="number-size">{{numbers.projectsSize.size}}</span>
65
              </a>
50 66
            </h3>
51 67
            <span class="uk-text-uppercase uk-text-large">Projects</span>
52 68
          </div>
......
57 73
          <div class="uk-grid uk-flex-center uk-margin-auto-left@m uk-margin-auto-right@m uk-grid-large" uk-grid>
58 74
            <div *ngIf="numbers.publicationsSize" class="uk-width-1-2@m uk-flex uk-flex-center">
59 75
              <div class="number-width uk-flex uk-flex-column">
60
                <a href="https://explore.openaire.eu/search/find/research-outcomes?type=publications&qf=false"
61
                   target="_blank" class="number uk-text-bold uk-margin-bottom uk-text-center uk-text-left@m">{{numbers.publicationsSize.count|number}} </a>
76
                <a *ngIf="externalLink" [href]="links.get('publication').link" target="_blank"
77
                   class="number uk-text-bold uk-margin-bottom uk-text-center uk-text-left@m">{{numbers.publicationsSize.count|number}}</a>
78
                <a *ngIf="!externalLink" [routerLink]="links.get('publication').link" [queryParams]="links.get('publication').params"
79
                   class="number uk-text-bold uk-margin-bottom uk-text-center uk-text-left@m">{{numbers.publicationsSize.count|number}}</a>
62 80
                <div class="uk-text-uppercase uk-flex uk-flex-middle uk-flex-center uk-flex-left@m">
63 81
                  <icon name="book" ratio="1.5" [flex]="true" class="uk-margin-right" [customClass]="colorClass"></icon>
64 82
                  <span>publications</span>
......
67 85
            </div>
68 86
            <div *ngIf="numbers.datasetsSize" class="uk-width-1-2@m uk-flex uk-flex-center">
69 87
              <div class="number-width uk-flex uk-flex-column">
70
                <a href="https://explore.openaire.eu/search/find/research-outcomes?type=datasets&qf=false"
71
                   target="_blank" class="number uk-text-bold uk-margin-bottom uk-text-center uk-text-left@m">{{numbers.datasetsSize.count|number}} </a>
88
                <a *ngIf="externalLink" [href]="links.get('dataset').link" target="_blank"
89
                   class="number uk-text-bold uk-margin-bottom uk-text-center uk-text-left@m">{{numbers.datasetsSize.count|number}}</a>
90
                <a *ngIf="!externalLink" [routerLink]="links.get('datasource').link" [queryParams]="links.get('dataset').params"
91
                   class="number uk-text-bold uk-margin-bottom uk-text-center uk-text-left@m">{{numbers.datasetsSize.count|number}}</a>
72 92
                <div class="uk-text-uppercase uk-flex uk-flex-middle uk-flex-center uk-flex-left@m">
73 93
                  <icon name="database" ratio="1.5" [flex]="true" class="uk-margin-right" [customClass]="colorClass"></icon>
74 94
                  <span>research data</span>
......
77 97
            </div>
78 98
            <div *ngIf="numbers.softwareSize" class="uk-width-1-2@m uk-flex uk-flex-center">
79 99
              <div class="number-width uk-flex uk-flex-column">
80
                <a href="https://explore.openaire.eu/search/find/research-outcomes?type=software&qf=false"
81
                   target="_blank" class="number uk-text-bold uk-margin-bottom uk-text-center uk-text-left@m">{{numbers.softwareSize.count|number}} </a>
100
                <a *ngIf="externalLink" [href]="links.get('software').link" target="_blank"
101
                   class="number uk-text-bold uk-margin-bottom uk-text-center uk-text-left@m">{{numbers.softwareSize.count|number}}</a>
102
                <a *ngIf="!externalLink" [routerLink]="links.get('software').link" [queryParams]="links.get('software').params"
103
                   class="number uk-text-bold uk-margin-bottom uk-text-center uk-text-left@m">{{numbers.softwareSize.count|number}}</a>
82 104
                <div class="uk-text-uppercase uk-flex uk-flex-middle uk-flex-center uk-flex-left@m">
83 105
                  <icon name="cog" ratio="1.5" [flex]="true" class="uk-margin-right" [customClass]="colorClass"></icon>
84 106
                  <span>software</span>
......
87 109
            </div>
88 110
            <div *ngIf="numbers.otherSize" class="uk-width-1-2@m uk-flex uk-flex-center">
89 111
              <div class="number-width uk-flex uk-flex-column">
90
                <a href="https://explore.openaire.eu/search/find/research-outcomes?type=other&qf=false"
91
                   target="_blank" class="number uk-text-bold uk-margin-bottom uk-text-center uk-text-left@m">{{numbers.otherSize.count|number}} </a>
112
                <a *ngIf="externalLink" [href]="links.get('other').link" target="_blank"
113
                   class="number uk-text-bold uk-margin-bottom uk-text-center uk-text-left@m">{{numbers.otherSize.count|number}}</a>
114
                <a *ngIf="!externalLink" [routerLink]="links.get('other').link" [queryParams]="links.get('other').params"
115
                   class="number uk-text-bold uk-margin-bottom uk-text-center uk-text-left@m">{{numbers.otherSize.count|number}}</a>
92 116
                <div class="uk-text-uppercase uk-flex uk-flex-middle uk-flex-center uk-flex-left@m">
93 117
                  <icon name="earth" ratio="1.5" [flex]="true" class="uk-margin-right" [customClass]="colorClass"></icon>
94 118
                  <span>other research products</span>
......
107 131
export class NumbersComponent implements OnInit, OnDestroy {
108 132
  @Input() colorClass = 'portal-color';
109 133
  @Input() backgroundClass = null;
110
  @Input() refineQuery = null;
134
  /** Add a value if you want to apply refine query*/
135
  @Input() refineValue = null;
136
  /** True: Default initialization
137
   *  False: Call init method to initialize numbers */
111 138
  @Input() defaultInit = true;
139
  /** Add an external link for numbers link */
140
  @Input() externalLink;
141
  /** When numbers have been initialized this emitter will emitted */
112 142
  @Output() results: EventEmitter<Numbers> = new EventEmitter<Numbers>();
113
  private emptySubject: BehaviorSubject<number> = new BehaviorSubject<number>(0);
114 143
  public properties: EnvProperties = properties;
144
  public routerHelper: RouterHelper = new RouterHelper();
115 145
  public numbers: Numbers = {};
116 146
  public loading: boolean = true;
147
  public links: Map<Entity, Link> = new Map<Entity, Link>();
148
  private params: Map<Entity, {}> = new Map<Entity, {}>();
149
  private emptySubject: BehaviorSubject<number> = new BehaviorSubject<number>(0);
117 150
  private subs: any[] = [];
118 151
  
119 152
  constructor(private searchResearchResultsService: SearchResearchResultsService,
......
125 158
    if(this.defaultInit) {
126 159
      this.init();
127 160
    }
161
    this.setLinks();
128 162
  }
129 163
  
164
  setParams() {
165
    this.params.set('publication', {type: 'publications', qf: 'false'});
166
    this.params.set('dataset', {type: 'datasets', qf: 'false'});
167
    this.params.set('software', {type: 'software', qf: 'false'});
168
    this.params.set('other', {type: 'other', qf: 'false'});
169
    this.params.set('project', {});
170
    this.params.set('datasource', {});
171
    if(this.refineValue) {
172
      this.params.forEach((value) => {
173
        value['fq'] = this.refineValue;
174
      });
175
    }
176
  }
177
  
178
  setLinks() {
179
    this.setParams();
180
    if(this.externalLink) {
181
      this.links.set('publication', {link: this.externalLink + properties.searchLinkToResults +
182
          this.routerHelper.createQueryParamsString(Object.keys(this.params.get('publication')), Object.values(this.params.get('publication')))});
183
      this.links.set('dataset', {link: this.externalLink + properties.searchLinkToResults +
184
          this.routerHelper.createQueryParamsString(Object.keys(this.params.get('dataset')), Object.values(this.params.get('dataset')))});
185
      this.links.set('software', {link: this.externalLink + properties.searchLinkToResults +
186
          this.routerHelper.createQueryParamsString(Object.keys(this.params.get('software')), Object.values(this.params.get('software')))});
187
      this.links.set('other', {link: this.externalLink + properties.searchLinkToResults +
188
          this.routerHelper.createQueryParamsString(Object.keys(this.params.get('other')), Object.values(this.params.get('other')))});
189
      this.links.set('project', {link: this.externalLink + properties.searchLinkToProjects +
190
          this.routerHelper.createQueryParamsString(Object.keys(this.params.get('project')), Object.values(this.params.get('project')))});
191
      this.links.set('datasource', {link: this.externalLink + properties.searchLinkToDataProviders +
192
          this.routerHelper.createQueryParamsString(Object.keys(this.params.get('datasource')), Object.values(this.params.get('datasource')))});
193
    } else {
194
      this.links.set('publication', {
195
        link: properties.searchLinkToResults,
196
        params: this.routerHelper.createQueryParams(Object.keys(this.params.get('publication')), Object.values(this.params.get('publication')))
197
      });
198
      this.links.set('dataset', {
199
        link: properties.searchLinkToResults,
200
        params: this.routerHelper.createQueryParams(Object.keys(this.params.get('dataset')), Object.values(this.params.get('dataset')))
201
      });
202
      this.links.set('software', {
203
        link: properties.searchLinkToResults,
204
        params: this.routerHelper.createQueryParams(Object.keys(this.params.get('software')), Object.values(this.params.get('software')))
205
      });
206
      this.links.set('other', {
207
        link: properties.searchLinkToResults,
208
        params: this.routerHelper.createQueryParams(Object.keys(this.params.get('other')), Object.values(this.params.get('other')))
209
      });
210
      this.links.set('project', {
211
        link: properties.searchLinkToProjects,
212
        params: this.routerHelper.createQueryParams(Object.keys(this.params.get('project')), Object.values(this.params.get('project')))
213
      });
214
      this.links.set('datasource', {
215
        link: properties.searchLinkToDataProviders,
216
        params: this.routerHelper.createQueryParams(Object.keys(this.params.get('datasource')), Object.values(this.params.get('datasource')))
217
      });
218
    }
219
  }
220
  
130 221
  init(getDatasetsLinked = false, getSoftwareLinked = false, getPublications = true, getDatasets = true,
131 222
       getSoftware = true, getOther = true, getProjects = true, getDataProviders = true) {
132 223
    this.loading = true;
224
    let refineParams = (this.refineValue)?('&fq=' + this.refineValue):null;
133 225
    this.subs.push(zip(
134
      (getPublications)?this.searchResearchResultsService.numOfSearchResults('publication', '', this.properties, this.refineQuery):this.empty,
135
      (getDatasets)?this.searchResearchResultsService.numOfSearchResults('dataset', '', this.properties, this.refineQuery):this.empty,
226
      (getPublications)?this.searchResearchResultsService.numOfSearchResults('publication', '', this.properties, refineParams):this.empty,
227
      (getDatasets)?this.searchResearchResultsService.numOfSearchResults('dataset', '', this.properties, refineParams):this.empty,
136 228
      (getDatasetsLinked)?this.searchResearchResultsService.numOfSearchResultsLinkedToPub("dataset", this.properties):this.empty,
137
      (getSoftware)?this.searchResearchResultsService.numOfSearchResults('software', '', this.properties, this.refineQuery):this.empty,
229
      (getSoftware)?this.searchResearchResultsService.numOfSearchResults('software', '', this.properties, refineParams):this.empty,
138 230
      (getSoftwareLinked)?this.searchResearchResultsService.numOfSearchResultsLinkedToPub("software", this.properties):this.empty,
139
      (getOther)?this.searchResearchResultsService.numOfSearchResults('other', '', this.properties, this.refineQuery):this.empty,
140
      (getProjects)?this.refineFieldResultsService.getRefineFieldsResultsByEntityName(['funder'], 'project', this.properties, this.refineQuery):this.empty,
141
      (getDataProviders)?this.searchDataprovidersService.numOfSearchDataproviders('', this.properties, this.refineQuery):this.empty
231
      (getOther)?this.searchResearchResultsService.numOfSearchResults('other', '', this.properties, refineParams):this.empty,
232
      (getProjects)?this.refineFieldResultsService.getRefineFieldsResultsByEntityName(['funder'], 'project', this.properties, refineParams):this.empty,
233
      (getDataProviders)?this.searchDataprovidersService.numOfSearchDataproviders('', this.properties, refineParams):this.empty
142 234
    ).subscribe((data: any[]) => {
143 235
      if (data[0] && data[0] > 0) {
144 236
        this.numbers.publicationsSize = NumberUtils.roundNumber(data[0]);
modules/uoa-services-library/trunk/ng-openaire-library/src/app/sharedComponents/numbers/numbers.module.ts
8 8
import {SearchDataprovidersService} from '../../services/searchDataproviders.service';
9 9
import {RefineFieldResultsService} from '../../services/refineFieldResults.service';
10 10
import {LoadingModule} from '../../utils/loading/loading.module';
11
import {RouterModule} from "@angular/router";
11 12

  
12 13
@NgModule({
13
  imports: [CommonModule, IconsModule, LoadingModule],
14
  imports: [CommonModule, IconsModule, LoadingModule, RouterModule],
14 15
  declarations: [NumbersComponent],
15 16
  exports: [NumbersComponent],
16 17
  providers: [SearchResearchResultsService, SearchDataprovidersService, RefineFieldResultsService]

Also available in: Unified diff