2023-01-13 07:32:16 +01:00
|
|
|
import {Component, ElementRef, EventEmitter, Input, Output, ViewChild} from '@angular/core';
|
2020-07-01 14:11:57 +02:00
|
|
|
import {HostedByCollectedFrom} from "../../utils/result-preview/result-preview";
|
2020-07-13 16:42:34 +02:00
|
|
|
import {properties} from "../../../../environments/environment";
|
2023-01-13 14:57:26 +01:00
|
|
|
import {StringUtils} from '../../utils/string-utils.class';
|
2023-02-21 15:10:21 +01:00
|
|
|
import {FullScreenModalComponent} from "../../utils/modal/full-screen-modal/full-screen-modal.component";
|
2017-12-19 13:53:46 +01:00
|
|
|
|
2023-01-13 07:32:16 +01:00
|
|
|
declare var UIkit;
|
2023-04-20 19:06:53 +02:00
|
|
|
import {RouterHelper} from "../../utils/routerHelper.class";
|
2023-02-17 18:40:05 +01:00
|
|
|
|
2017-12-19 13:53:46 +01:00
|
|
|
@Component({
|
2020-03-16 14:09:46 +01:00
|
|
|
selector: 'availableOn',
|
|
|
|
template: `
|
2023-02-18 09:53:40 +01:00
|
|
|
<ng-container *ngIf="availableOn && availableOn.length > 0">
|
2023-02-17 18:40:05 +01:00
|
|
|
<div class="uk-flex uk-flex-middle">
|
2023-02-16 11:59:18 +01:00
|
|
|
<ng-container *ngIf="availableOn[0].downloadUrl">
|
2023-02-20 15:59:07 +01:00
|
|
|
<span [class]="'uk-margin-xsmall-right ' + (availableOn[0].accessRightIcon == 'open_access' ? 'open-access' : 'closed-access')"
|
2023-05-08 15:41:42 +02:00
|
|
|
uk-tooltip [title]="getAccessLabel(availableOn[0].accessRight)">
|
2023-02-21 16:07:23 +01:00
|
|
|
<icon [name]="availableOn[0].accessRightIcon" [flex]="true" [ratio]="(isMobile && usedBy == 'landing') ? 1 : 0.8"></icon>
|
2023-01-13 07:32:16 +01:00
|
|
|
</span>
|
2023-02-21 15:10:21 +01:00
|
|
|
<ng-container *ngIf="!(isMobile && usedBy == 'landing')">
|
|
|
|
<a uk-tooltip="Source" target="_blank"
|
|
|
|
class="uk-flex uk-flex-middle uk-flex-center uk-button-link uk-text-bolder">
|
|
|
|
<span>{{sliceString(availableOn[0].downloadNames.join("; "), 20)}}</span>
|
|
|
|
<span>
|
|
|
|
<!-- <icon [flex]="true" [name]="'expand_' + (isOpen?'less':'more')"></icon>-->
|
|
|
|
<icon [flex]="true" [name]="(isOpen?'arrow_drop_up':'arrow_drop_down')"></icon>
|
|
|
|
</span>
|
|
|
|
</a>
|
|
|
|
<div #dropElement uk-drop="mode: click; pos: bottom-left;"
|
2023-03-27 12:03:07 +02:00
|
|
|
class="uk-drop download-drop uk-card uk-card-default uk-padding-small uk-padding-remove-horizontal uk-text-small uk-height-max-large uk-overflow-auto">
|
2023-02-21 15:10:21 +01:00
|
|
|
<ng-container *ngTemplateOutlet="availableOnList"></ng-container>
|
|
|
|
</div>
|
|
|
|
</ng-container>
|
|
|
|
|
|
|
|
<ng-container *ngIf="(isMobile && usedBy == 'landing')">
|
|
|
|
<a class="uk-flex uk-flex-between uk-flex-middle uk-flex-center uk-width-expand uk-button-link" (click)="openAvailableListFsModal()">
|
|
|
|
<span uk-tooltip="Source">{{sliceString(availableOn[0].downloadNames.join("; "), 20)}}</span>
|
|
|
|
<span>
|
2023-02-21 16:07:23 +01:00
|
|
|
<icon [flex]="true" ratio="1.5" name="arrow_right"></icon>
|
2023-02-21 15:10:21 +01:00
|
|
|
</span>
|
|
|
|
</a>
|
|
|
|
<fs-modal #availableListFsModal classTitle="uk-tile-default uk-border-bottom">
|
|
|
|
<div class="uk-text-small download-drop">
|
|
|
|
<ng-container *ngTemplateOutlet="availableOnList"></ng-container>
|
|
|
|
</div>
|
|
|
|
</fs-modal>
|
|
|
|
</ng-container>
|
|
|
|
</ng-container>
|
2023-01-13 07:32:16 +01:00
|
|
|
</div>
|
2023-01-09 17:35:28 +01:00
|
|
|
</ng-container>
|
2023-02-21 15:10:21 +01:00
|
|
|
|
|
|
|
<ng-template #availableOnList>
|
|
|
|
<div *ngFor="let instance of availableOn let i=index" class="download-drop-item uk-flex uk-flex-top">
|
|
|
|
<span
|
|
|
|
[class]="'uk-margin-small-right ' + (instance.accessRightIcon == 'open_access' ? 'open-access' : 'closed-access')"
|
2023-05-08 15:41:42 +02:00
|
|
|
uk-tooltip [title]="getAccessLabel(instance.accessRight)">
|
2023-02-21 15:10:21 +01:00
|
|
|
<icon [name]="instance.accessRightIcon" [flex]="true"></icon>
|
|
|
|
</span>
|
|
|
|
<div class="uk-width-expand uk-padding-small uk-padding-remove-left uk-padding-remove-vertical">
|
|
|
|
<span class="uk-text-emphasis">
|
|
|
|
<a *ngIf="instance.downloadUrl" [href]="instance.downloadUrl" target="_blank"
|
|
|
|
class="title uk-link-text uk-text-bold custom-external uk-display-inline-block">
|
|
|
|
{{instance.downloadNames.join("; ")}}
|
|
|
|
</a>
|
|
|
|
</span>
|
|
|
|
<div *ngIf="instance.types?.length > 0 || instance.years?.length > 0" class="uk-text-meta">
|
|
|
|
<span *ngIf="instance.types?.length > 0" class="uk-text-capitalize">{{instance.types.join(" . ")}}</span>
|
|
|
|
<span *ngIf="instance.types?.length > 0 && instance.years?.length > 0"> . </span>
|
|
|
|
<span *ngIf="instance.years?.length > 0">{{instance.years.join(" . ")}}</span>
|
|
|
|
</div>
|
|
|
|
<div *ngIf="instance.license" class="uk-text-meta uk-text-truncate" uk-tooltip [title]="instance.license">
|
|
|
|
License:
|
|
|
|
<a *ngIf="isUrl(instance.license); else elseBlock"
|
|
|
|
[href]="instance.license" target="_blank" class="custom-external uk-link-text">
|
|
|
|
{{instance.license}}
|
|
|
|
</a>
|
|
|
|
<ng-template #elseBlock> {{instance.license}}</ng-template>
|
|
|
|
</div>
|
|
|
|
<div *ngIf="instance.collectedNamesAndIds?.size > 0" class="uk-text-meta">
|
2023-04-21 17:54:26 +02:00
|
|
|
<span>Data sources: </span>
|
2022-02-14 15:24:10 +01:00
|
|
|
<a *ngFor="let collectedName of getKeys(instance.collectedNamesAndIds); let i=index" [routerLink]="dataProviderUrl"
|
2023-04-20 19:06:53 +02:00
|
|
|
[queryParams]="addEoscPrevInParams({datasourceId: instance.collectedNamesAndIds.get(collectedName)})" class="uk-link-text">
|
2022-01-07 11:01:22 +01:00
|
|
|
{{collectedName}}<ng-container *ngIf="(i !== (instance.collectedNamesAndIds.size - 1))">; </ng-container>
|
2023-02-21 15:10:21 +01:00
|
|
|
</a>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</ng-template>
|
2020-03-16 14:09:46 +01:00
|
|
|
`
|
|
|
|
})
|
2017-12-19 13:53:46 +01:00
|
|
|
|
|
|
|
export class AvailableOnComponent {
|
2023-02-21 15:10:21 +01:00
|
|
|
@Input() isMobile: boolean = false;
|
|
|
|
@Input() usedBy: "search" | "landing" = "search";
|
2023-04-20 19:06:53 +02:00
|
|
|
@Input() prevPath: string = "";
|
2020-07-01 14:11:57 +02:00
|
|
|
@Input() availableOn: HostedByCollectedFrom[];
|
2023-02-17 18:40:05 +01:00
|
|
|
/** @deprecated */
|
|
|
|
@Output() viewAllClicked = new EventEmitter();
|
|
|
|
@ViewChild("dropElement") dropElement: ElementRef;
|
2023-02-21 15:10:21 +01:00
|
|
|
@ViewChild("availableListFsModal") availableListFsModal: FullScreenModalComponent;
|
2022-04-16 09:47:30 +02:00
|
|
|
public threshold: number = 1;
|
2020-07-13 16:42:34 +02:00
|
|
|
public dataProviderUrl = properties.searchLinkToDataProvider.split('?')[0];
|
2022-04-12 14:15:04 +02:00
|
|
|
public title: string = "Download from";
|
2023-04-20 19:06:53 +02:00
|
|
|
public routerHelper:RouterHelper = new RouterHelper();
|
2023-02-17 18:40:05 +01:00
|
|
|
|
2020-03-16 14:09:46 +01:00
|
|
|
constructor() {
|
|
|
|
}
|
2023-02-17 18:40:05 +01:00
|
|
|
|
2023-01-09 17:35:28 +01:00
|
|
|
ngOnInit() {
|
2020-03-16 14:09:46 +01:00
|
|
|
}
|
2022-02-14 15:24:10 +01:00
|
|
|
|
2023-02-17 18:40:05 +01:00
|
|
|
public getKeys(map) {
|
2022-02-14 15:24:10 +01:00
|
|
|
return Array.from(map.keys());
|
|
|
|
}
|
2022-04-12 14:15:04 +02:00
|
|
|
|
2022-06-09 15:45:39 +02:00
|
|
|
public isUrl(str: string): boolean {
|
|
|
|
return str.startsWith('http://') || str.startsWith('https://') || str.startsWith('//') || str.startsWith('www.');
|
2023-01-13 07:32:16 +01:00
|
|
|
}
|
|
|
|
|
2023-02-17 18:40:05 +01:00
|
|
|
get isOpen() {
|
2023-01-13 07:32:16 +01:00
|
|
|
return (typeof document !== 'undefined') && this.dropElement && UIkit.drop(this.dropElement.nativeElement).isActive();
|
2022-06-09 15:45:39 +02:00
|
|
|
}
|
2023-01-13 14:57:26 +01:00
|
|
|
|
2023-02-17 18:40:05 +01:00
|
|
|
public sliceString(str: string, size: number) {
|
|
|
|
return StringUtils.sliceString(str, size)
|
|
|
|
}
|
2023-02-21 15:10:21 +01:00
|
|
|
|
|
|
|
public openAvailableListFsModal() {
|
|
|
|
this.availableListFsModal.title = "Sources";
|
|
|
|
this.availableListFsModal.okButton = false;
|
|
|
|
this.availableListFsModal.open();
|
|
|
|
}
|
2023-05-08 15:41:42 +02:00
|
|
|
|
|
|
|
public getAccessLabel(accessRight) : string {
|
|
|
|
if(accessRight) {
|
|
|
|
return (accessRight + (accessRight.toLowerCase().endsWith(" access") ? "" : " access"));
|
|
|
|
}
|
|
|
|
return "Not available access";
|
|
|
|
}
|
2023-04-20 19:06:53 +02:00
|
|
|
|
|
|
|
public addEoscPrevInParams(obj) {
|
|
|
|
if(properties.adminToolsPortalType == "eosc" && this.prevPath) {
|
|
|
|
return this.routerHelper.addQueryParam("pv", this.prevPath, obj);
|
|
|
|
}
|
|
|
|
return obj;
|
|
|
|
}
|
2017-12-19 13:53:46 +01:00
|
|
|
}
|