From 11ec56529c9febb35f71b956c48c82ccc3b84e4d Mon Sep 17 00:00:00 2001 From: Florent POITTEVIN <poittevin.florent@gmail.com> Date: Thu, 2 Jul 2020 16:23:11 +0200 Subject: [PATCH] feat: 1493 rework archive detail --- src/app/app.component.ts | 15 +- .../home-archive-detail.presentational.html | 241 ++++++++++-------- .../home-archive-detail.presentational.scss | 222 ++++++++++++---- .../home-archive-detail.presentational.ts | 141 +++++----- .../home-archive-tile.presentational.html | 5 +- .../home-archive-tile.presentational.scss | 18 +- .../home-main-page-content.presentational.ts | 9 +- .../home-search-facet.presentational.html | 14 +- .../home-page/home-page.routable.html | 2 +- .../routables/home-page/home-page.routable.ts | 4 + src/app/features/home/helpers/home.helper.ts | 4 + .../shared-icon.presentational.html | 1 + src/app/shared/enums/label-translate.enum.ts | 2 + src/app/shared/utils/metadata.util.ts | 2 +- src/assets/i18n/de.json | 5 +- src/assets/i18n/en.json | 5 +- src/assets/i18n/fr.json | 5 +- 17 files changed, 445 insertions(+), 250 deletions(-) diff --git a/src/app/app.component.ts b/src/app/app.component.ts index d722d2d5c..2b5667803 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -233,9 +233,22 @@ export class AppComponent extends SharedAbstractPresentational { this.isHomePage = false; if (urlState) { const url = urlState.url; + + if (url.startsWith(urlSeparator + RoutesEnum.homeDetail)) { + this.currentModule = undefined; + return; + } + + if (url.startsWith(urlSeparator + RoutesEnum.homeSearch)) { + this.currentModule = undefined; + this.isHomePage = true; + this.ignoreGrid = true; + return; + } + if (url.startsWith(urlSeparator + RoutesEnum.homePage)) { this.currentModule = RoutesEnum.homePage; - this.isHomePage = url === (urlSeparator + RoutesEnum.homePage) || url.startsWith(urlSeparator + RoutesEnum.homePage + "?"); + this.isHomePage = true; this.ignoreGrid = true; return; } diff --git a/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.html b/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.html index e6393c8c0..e83cbe12f 100644 --- a/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.html +++ b/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.html @@ -1,128 +1,145 @@ -<dl> - <ng-container *ngFor="let info of listInfo"> - <ng-template [ngIf]="!(info.value | isNullOrUndefined) && info.value !== '' && info.code !== true"> - <ng-container [ngSwitch]="info.type"> - <div class="line doi-line" - *ngSwitchCase="typeInfoEnum.doi" - [matMenuTriggerFor]="doiMenu.menu" - [matTooltip]="'home.archive.doi.moreInfos' | translate" - > - <dt>{{info.labelToTranslate | translate}} - <dlcm-shared-icon class="lg doi-logo" - [iconName]="iconNameEnum.doi" - > - </dlcm-shared-icon> - </dt> - <dlcm-shared-doi-menu #doiMenu="doiMenu" - [doi]="info.value" - [mode]="'archive'" - (getShortDoi)="getShortDoi($event)" - ></dlcm-shared-doi-menu> - <dd class="doi-value">{{info.value}}</dd> - </div> +<div class="main-infos"> + <div class="image-wrapper"> + <img [src]="defaultImageArchive" + alt="image" + class="image" + > + </div> - <div class="line" - *ngSwitchCase="typeInfoEnum.orgUnit" - > - <dt>{{info.labelToTranslate | translate }}</dt> - <dd> - <dlcm-shared-organizational-unit-name-container [id]="info.value"></dlcm-shared-organizational-unit-name-container> - </dd> - </div> + <div class="base-info"> + <h1 class="title">{{metadataUtil.getTitle(metadata)}}</h1> + <h2 class="description">{{metadataUtil.getDescription(metadata)}}</h2> - <div class="line" - *ngSwitchCase="typeInfoEnum.valueToTranslate" - > - <dt>{{info.labelToTranslate | translate }}</dt> - <dd>{{info.value | translate}}</dd> - </div> + <ul class="base-info-list"> + <ng-container *ngFor="let info of listInfo"> + <ng-container [ngSwitch]="info.type"> + <li class="doi-line" + *ngSwitchCase="typeInfoEnum.doi" + [matMenuTriggerFor]="doiMenu.menu" + [matTooltip]="'home.archive.doi.moreInfos' | translate" + > + <dt class="label">{{info.labelToTranslate | translate}} + <dlcm-shared-icon class="lg doi-logo" + [iconName]="iconNameEnum.doi" + > + </dlcm-shared-icon> - <div class="line" - *ngSwitchDefault - > - <dt>{{info.labelToTranslate | translate }}</dt> - <dd>{{info.value}}</dd> - </div> + <dlcm-shared-doi-menu #doiMenu="doiMenu" + [doi]="info.value" + [mode]="'archive'" + (getShortDoi)="getShortDoi($event)" + ></dlcm-shared-doi-menu> + </dt> + <dd class="doi-value value">{{info.value}}</dd> + </li> + + <li *ngSwitchCase="typeInfoEnum.orgUnit"> + <dt class="label">{{info.labelToTranslate | translate }}</dt> + <dd class="value"> + <dlcm-shared-organizational-unit-name-container [id]="info.value"></dlcm-shared-organizational-unit-name-container> + </dd> + </li> + + <li *ngSwitchDefault> + <dt class="label">{{info.labelToTranslate | translate }}</dt> + <dd class="value">{{info.value}}</dd> + </li> + </ng-container> </ng-container> + </ul> + </div> - </ng-template> - <div *ngIf="info.code" - class="line" - > - <dt>{{info.labelToTranslate | translate }}</dt> - <dd> - <a (click)="showCode = !showCode"> - <span *ngIf="showCode">{{labelTranslateEnum.hide | translate}}</span> - <span *ngIf="!showCode">{{labelTranslateEnum.show | translate}}</span> - </a> - </dd> + <div class="complementary-info"> + <div class="year"> + <dlcm-shared-icon [iconName]="iconNameEnum.creationDate"></dlcm-shared-icon> + <span class="label">{{labelTranslateEnum.publicationYear | translate}}</span> + <span>{{metadataUtil.getPublicationYear(metadata)}}</span> </div> - <div *ngIf="info.isList" - class="line" + <div class="access-level" + [class]="colorAccessLevel" > - <dt>{{info.labelToTranslate | translate }}</dt> - <dd> - <ul *ngFor="let author of getAuthorsList()"> - <li> - {{author}} + <dlcm-shared-icon [iconName]="accessLevelIconName" + size="xlg" + ></dlcm-shared-icon> + <span class="label">{{labelTranslateEnum.accessLevel | translate}}</span> + <span>{{enumUtil.getLabel(accessEnumTranslate, metadataUtil.getAccessLevel(metadata)) | translate}}</span> + </div> + <div class="contributor"> + <dlcm-shared-icon [iconName]="iconNameEnum.contributor"></dlcm-shared-icon> + <div> + <span class="label">{{labelTranslateEnum.contributors | translate}}</span> + <ul class="list-contributors"> + <li *ngFor="let contributor of metadataUtil.getContributors(metadata)"> + {{contributor}} </li> </ul> - </dd> + </div> + </div> + <div class="size"> + <dlcm-shared-icon [iconName]="iconNameEnum.foldersView"></dlcm-shared-icon> + <span>{{metadataUtil.getFileNumber(metadata)}} {{labelTranslateEnum.files | translate}} + ({{metadataUtil.getSize(metadata) | filesize}}) + </span> </div> - </ng-container> - <div class="line"> - <pre class="pre" - *ngIf="showCode" - > - <code [highlight]="getMetadata()" - class="code" - ></code> - </pre> - </div> -</dl> -<div class="button-wrapper"> - <div [matTooltip]="getTooltipDownload(!(isDownloadAuthorized() | solidifyAsync)) | translate"> - <button *ngIf="isLoggedIn" - mat-flat-button - [dlcmButtonSpinner]="isLoadingPrepareDownload" - color="primary" - solidifyShortCuts - [disabled]="!(isDownloadAuthorized() | solidifyAsync)" - (onEnter)="download(archiveMetadata)" - (click)="download(archiveMetadata)" - > - <dlcm-shared-icon [iconName]="iconNameEnum.download"></dlcm-shared-icon> - {{labelTranslateEnum.download | translate}} - </button> - </div> + <div class="button-wrapper"> + <div [matTooltip]="getTooltipDownload(!(isDownloadAuthorized() | solidifyAsync)) | translate"> + <button *ngIf="isLoggedIn" + mat-flat-button + [dlcmButtonSpinner]="isLoadingPrepareDownload" + color="primary" + solidifyShortCuts + [disabled]="!(isDownloadAuthorized() | solidifyAsync)" + (onEnter)="download(archiveMetadata)" + (click)="download(archiveMetadata)" + > + <dlcm-shared-icon [iconName]="iconNameEnum.download"></dlcm-shared-icon> + {{labelTranslateEnum.download | translate}} + </button> + </div> - <div [matTooltip]="getTooltipDownload(!(isDownloadAuthorized() | solidifyAsync)) | translate"> - <button *ngIf="isLoggedIn" - mat-flat-button - class="add-to-cart-button" - color="primary" - solidifyShortCuts - [disabled]="!(isDownloadAuthorized() | solidifyAsync)" - (onEnter)="addToCart(archiveMetadata)" - (click)="addToCart(archiveMetadata)" + <div [matTooltip]="getTooltipDownload(!(isDownloadAuthorized() | solidifyAsync)) | translate"> + <button *ngIf="isLoggedIn" + mat-flat-button + class="add-to-cart-button" + color="primary" + solidifyShortCuts + [disabled]="!(isDownloadAuthorized() | solidifyAsync)" + (onEnter)="addToCart(archiveMetadata)" + (click)="addToCart(archiveMetadata)" - > - <dlcm-shared-icon [iconName]="iconNameEnum.addToCart"></dlcm-shared-icon> - {{labelTranslateEnum.addToDownloadOrder | translate}} - </button> - </div> + > + <dlcm-shared-icon [iconName]="iconNameEnum.addToCart"></dlcm-shared-icon> + {{labelTranslateEnum.addToDownloadOrder | translate}} + </button> + </div> - <button *ngIf="isAskAccessAvailable() | solidifyAsync" - mat-flat-button - color="primary" - class="add-to-cart-button" - solidifyShortCuts - (onEnter)="askAccess(archiveMetadata)" - (click)="askAccess(archiveMetadata)" + <button *ngIf="isAskAccessAvailable() | solidifyAsync" + mat-flat-button + color="primary" + class="add-to-cart-button" + solidifyShortCuts + (onEnter)="askAccess(archiveMetadata)" + (click)="askAccess(archiveMetadata)" - > - <dlcm-shared-icon [iconName]="iconNameEnum.sendRequest"></dlcm-shared-icon> - {{labelTranslateEnum.requestAccess | translate}} - </button> + > + <dlcm-shared-icon [iconName]="iconNameEnum.sendRequest"></dlcm-shared-icon> + {{labelTranslateEnum.requestAccess | translate}} + </button> + </div> + </div> </div> +<dlcm-shared-panel-expandable [titleToTranslate]="labelTranslateEnum.metadataDatacite | translate" + [isOpen]="false" +> + <pre class="pre"> + <code [highlight]="getMetadataDatacite()" + class="code" + ></code> + </pre> +</dlcm-shared-panel-expandable> + +<dlcm-shared-panel-expandable [titleToTranslate]="labelTranslateEnum.similarArchive | translate" + [isOpen]="true" +> +</dlcm-shared-panel-expandable> diff --git a/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.scss b/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.scss index f4bf9ba41..4e29e90eb 100644 --- a/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.scss +++ b/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.scss @@ -3,60 +3,198 @@ $padding-bottom-desktop: 20px; :host { - display: block; - padding-bottom: 25px; + display: flex; + flex-direction: column; + + .main-infos { + padding-top: 20px; + display: grid; + //grid-template-columns: max-content 1fr max-content; + grid-template-areas: "image-wrapper base-info complementary-info"; + grid-gap: 20px; + margin-bottom: 20px; + + + .image-wrapper { + grid-area: image-wrapper; + height: 100%; + width: 400px; + border: 1px solid $extra-light-grey; + display: flex; + align-items: center; + justify-content: center; + + .image { + max-width: 100%; + max-height: 100%; + } + } - .line { - display: flex; - flex-direction: row; - overflow: hidden; + .base-info { + grid-area: base-info; + display: grid; + border-right: 1px solid $extra-light-grey; + padding-right: 20px; + + .title { + font-size: 18px; + line-height: 25px; + color: $light-grey; + margin-bottom: 0; + } - @include respond-to-breakpoint('xs') { - flex-direction: column; - } - } + .description { + font-size: 14px; + font-weight: bold; + color: $black; + line-height: 18px; + margin-bottom: 20px; + } - dt { - font-weight: bold; - width: 160px; - clear: left; - text-align: left; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - position: relative; - - @include respond-to-breakpoint-and-bigger('sm') { - padding-bottom: $padding-bottom-desktop; + .base-info-list { + > li { + display: grid; + grid-template-columns: max(145px) 1fr; + @include respond-to-breakpoint('xs') { + flex-direction: column; + } + + &.doi-line { + cursor: pointer; + + .doi-logo { + position: absolute; + padding: 0 10px; + + ::ng-deep { + img { + position: relative; + } + } + } + } + + .label { + width: 160px; + color: $light-grey; + line-height: 26px; + } + + .value { + @include truncate-with-ellipsis; + margin-left: 20px; + } + + } + } } - } - .doi-line { - cursor: pointer; + .complementary-info { + grid-area: complementary-info; + grid-template-rows: min-content min-content min-content min-content min-content; + display: grid; + grid-gap: 20px; + + .year, + .access-level, + .contributor, + .size { + display: grid; + grid-template-columns: 24px 1fr; + grid-gap: 20px; + align-items: center; + } - .doi-logo { - position: absolute; - padding: 0 10px; + .year, + .access-level { + grid-template-columns: 24px max(135px) 1fr; + } - ::ng-deep { - img { - position: relative; + .access-level { + &.red { + color: $red; + } + + &.orange { + color: $warning; + } + + &.green { + color: $green-sweet; } } + + .contributor { + align-items: start; + + .list-contributors { + > li { + @include truncate-with-ellipsis; + max-width: 240px; + } + } + } + + .label { + color: $light-grey; + } + + .button-wrapper { + margin-top: 10px; + justify-content: center; + display: flex; + } } - } - dd { - margin-left: 0; - padding-bottom: 10px; - word-break: break-word; + @include respond-to-smaller-than-breakpoint('lg') { + //grid-template-areas: "image-wrapper image-wrapper . ." + //"base-info base-info base-info complementary-info"; - @include respond-to-smaller-than-breakpoint('sm') { - width: 100%; + grid-template-areas: "image-wrapper base-info base-info" + "image-wrapper complementary-info complementary-info"; + + .base-info { + border: none !important; + } + + .image-wrapper { + height: 100%; + width: 450px; + } + } + + @include respond-to-smaller-than-breakpoint('md') { + grid-template-areas: "image-wrapper" + "base-info" + "complementary-info"; + + .base-info { + border: none; + } + + .image-wrapper { + height: 220px; + width: 220px; + } } - &.doi-value { - cursor: pointer; + @include respond-to-smaller-than-breakpoint('sm') { + grid-template-areas: "image-wrapper" + "base-info" + "complementary-info"; + + .image-wrapper { + height: 220px; + width: 100%; + } + + .base-info .base-info-list > li { + grid-template-columns: 1fr; + + .value { + margin: 0; + } + } } } @@ -80,8 +218,4 @@ $padding-bottom-desktop: 20px; .add-to-cart-button { margin-left: 10px; } - - .button-wrapper { - display: flex; - } } diff --git a/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.ts b/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.ts index 56007c4df..b3883fbd1 100644 --- a/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.ts +++ b/src/app/features/home/components/presentationals/home-archive-form/home-archive-detail.presentational.ts @@ -9,7 +9,9 @@ import {SharedAbstractPresentational} from "@app/shared/components/presentationa import {ArchiveMetadata} from "@app/shared/models/business/archive-metadata.model"; import {MetadataUtil} from "@app/shared/utils/metadata.util"; import {Enums} from "@enums"; +import {environment} from "@environments/environment"; import {GetShortDoiWrapper} from "@shared/components/presentationals/shared-doi-menu/shared-doi-menu.presentational"; +import {IconNameEnum} from "@shared/enums/icon-name.enum"; import {LabelTranslateEnum} from "@shared/enums/label-translate.enum"; import {ObservableOrPromiseOrValue} from "@shared/models/extra-button-toolbar.model"; import {FileSizePipe} from "@shared/pipes/file-size.pipe"; @@ -22,7 +24,9 @@ import {map} from "rxjs/operators"; import { DateUtil, EnumUtil, + isNonEmptyString, isNullOrUndefined, + KeyValue, MARK_AS_TRANSLATABLE, ObservableUtil, } from "solidify-frontend"; @@ -34,8 +38,6 @@ import { changeDetection: ChangeDetectionStrategy.OnPush, }) export class HomeArchiveDetailPresentational extends SharedAbstractPresentational implements OnInit { - listInfo: Info[]; - private readonly _downloadBS: BehaviorSubject<ArchiveMetadata | undefined> = new BehaviorSubject<ArchiveMetadata | undefined>(undefined); @Output("downloadChange") readonly downloadObs: Observable<ArchiveMetadata | undefined> = ObservableUtil.asObservable(this._downloadBS); @@ -51,6 +53,29 @@ export class HomeArchiveDetailPresentational extends SharedAbstractPresentationa @Input() archiveMetadata: ArchiveMetadata; + get metadataUtil(): typeof MetadataUtil { + return MetadataUtil; + } + + get metadata(): ArchiveMetadata.PublicMetadata | undefined { + if (isNullOrUndefined(this.archiveMetadata)) { + return undefined; + } + return this.archiveMetadata.metadata; + } + + get enumUtil(): typeof EnumUtil { + return EnumUtil; + } + + listInfo: Info[]; + + accessEnumTranslate: KeyValue[] = Enums.Deposit.AccessEnumTranslate; + accessLevelIconName: IconNameEnum; + colorAccessLevel: "red" | "orange" | "green"; + + defaultImageArchive: string = `assets/themes/${environment.theme}/toolbar-header-image.svg`; + @Input() isLoadingPrepareDownload: boolean; @@ -59,7 +84,7 @@ export class HomeArchiveDetailPresentational extends SharedAbstractPresentationa showCode: boolean = false; - fileSizePipe: FileSizePipe; + fileSizePipe: FileSizePipe = new FileSizePipe(); private readonly _shortDoiBS: BehaviorSubject<GetShortDoiWrapper | undefined> = new BehaviorSubject<GetShortDoiWrapper | undefined>(undefined); @Output("getShortDoi") @@ -74,98 +99,78 @@ export class HomeArchiveDetailPresentational extends SharedAbstractPresentationa } get orgUnitResId(): string { - return MetadataUtil.getOrganizationalUnitResId(this.archiveMetadata.metadata); + return MetadataUtil.getOrganizationalUnitResId(this.metadata); } ngOnInit(): void { - const metadata = this.archiveMetadata.metadata; - this.fileSizePipe = new FileSizePipe(); + this._computeAccessLevelIcon(); + this._defineListInfo(); + } + + private _computeAccessLevelIcon(): void { + switch (MetadataUtil.getAccessLevel(this.metadata)) { + case Enums.Deposit.AccessEnum.RESTRICTED: + this.accessLevelIconName = IconNameEnum.accessLevelRestricted; + this.colorAccessLevel = "orange"; + break; + case Enums.Deposit.AccessEnum.CLOSED: + this.accessLevelIconName = IconNameEnum.accessLevelClosed; + this.colorAccessLevel = "red"; + break; + case Enums.Deposit.AccessEnum.PUBLIC: + default: + this.accessLevelIconName = IconNameEnum.accessLevelPublic; + this.colorAccessLevel = "green"; + break; + } + } + + private _defineListInfo(): void { this.listInfo = [ - { - labelToTranslate: LabelTranslateEnum.title, - value: MetadataUtil.getTitle(metadata), - }, - { - labelToTranslate: LabelTranslateEnum.description, - value: MetadataUtil.getDescription(metadata), - }, { labelToTranslate: LabelTranslateEnum.organizationalUnit, - value: MetadataUtil.getOrganizationalUnitResId(metadata), + value: MetadataUtil.getOrganizationalUnitResId(this.metadata), type: TypeInfoEnum.orgUnit, }, { labelToTranslate: LabelTranslateEnum.type, - value: MetadataUtil.getType(metadata), - }, - { - labelToTranslate: LabelTranslateEnum.contributors, - isList: true, - }, - { - labelToTranslate: LabelTranslateEnum.publicationYear, - value: MetadataUtil.getPublicationYear(metadata), + value: MetadataUtil.getType(this.metadata), }, { labelToTranslate: LabelTranslateEnum.doi, - value: MetadataUtil.getDOI(metadata), + value: MetadataUtil.getDOI(this.metadata), type: TypeInfoEnum.doi, }, { labelToTranslate: LabelTranslateEnum.license, - value: MetadataUtil.getLicenses(metadata), + value: MetadataUtil.getLicenses(this.metadata), }, { - labelToTranslate: LabelTranslateEnum.accessLevel, - value: EnumUtil.getLabel(Enums.Deposit.AccessEnumTranslate, MetadataUtil.getAccessLevel(metadata)), - type: TypeInfoEnum.valueToTranslate, + labelToTranslate: LabelTranslateEnum.acceptedDate, + value: DateUtil.convertDateToDateTimeString(MetadataUtil.getAcceptedDate(this.metadata)), }, { labelToTranslate: LabelTranslateEnum.embargoAccessLevel, - value: MetadataUtil.getEmbargoAccessLevel(metadata), - }, - { - labelToTranslate: LabelTranslateEnum.size, - value: this.fileSizePipe.transform(MetadataUtil.getSize(metadata)), - }, - { - labelToTranslate: LabelTranslateEnum.files, - value: MetadataUtil.getFileNumber(metadata), + value: MetadataUtil.getEmbargoAccessLevel(this.metadata), }, { labelToTranslate: LabelTranslateEnum.embargoEndDate, - value: DateUtil.convertDateToDateString(MetadataUtil.getEmbargoEndDate(metadata)), + value: DateUtil.convertDateToDateString(MetadataUtil.getEmbargoEndDate(this.metadata)), }, { labelToTranslate: LabelTranslateEnum.submittedDate, - value: DateUtil.convertDateToDateTimeString(MetadataUtil.getSubmittedDate(metadata)), - }, - { - labelToTranslate: LabelTranslateEnum.acceptedDate, - value: DateUtil.convertDateToDateTimeString(MetadataUtil.getAcceptedDate(metadata)), - }, - { - labelToTranslate: this.getMetadataLabel(), - value: MetadataUtil.getDatacite(this.archiveMetadata.metadata), - code: true, + value: DateUtil.convertDateToDateTimeString(MetadataUtil.getSubmittedDate(this.metadata)), }, ]; - } - - getAuthorsList(): string[] { - return MetadataUtil.getAuthors(this.archiveMetadata.metadata); + this.listInfo = this.listInfo.filter(i => isNonEmptyString(i.value)); } download(archiveMetadata: ArchiveMetadata): void { this._downloadBS.next(archiveMetadata); } - getMetadataLabel(): string { - return MARK_AS_TRANSLATABLE("homePage.archive.detail.datacite"); - } - - getMetadata(): string { - return MetadataUtil.getDatacite(this.archiveMetadata.metadata); + getMetadataDatacite(): string { + return MetadataUtil.getDatacite(this.metadata); } getShortDoi(longDoi: GetShortDoiWrapper): void { @@ -181,24 +186,22 @@ export class HomeArchiveDetailPresentational extends SharedAbstractPresentationa } isPublicMetadata(): boolean { - if (isNullOrUndefined(this.archiveMetadata)) { - return false; - } - return MetadataUtil.getAccessLevel(this.archiveMetadata.metadata) === Enums.Deposit.AccessEnum.PUBLIC; + return this._checkCurrentAccessLevelIs(Enums.Deposit.AccessEnum.PUBLIC); } isRestrictedMetadata(): boolean { - if (isNullOrUndefined(this.archiveMetadata)) { - return false; - } - return MetadataUtil.getAccessLevel(this.archiveMetadata.metadata) === Enums.Deposit.AccessEnum.RESTRICTED; + return this._checkCurrentAccessLevelIs(Enums.Deposit.AccessEnum.RESTRICTED); } isClosedMetadata(): boolean { + return this._checkCurrentAccessLevelIs(Enums.Deposit.AccessEnum.CLOSED); + } + + private _checkCurrentAccessLevelIs(accessLevel: Enums.Deposit.AccessEnum): boolean { if (isNullOrUndefined(this.archiveMetadata)) { return false; } - return MetadataUtil.getAccessLevel(this.archiveMetadata.metadata) === Enums.Deposit.AccessEnum.CLOSED; + return MetadataUtil.getAccessLevel(this.metadata) === accessLevel; } isDownloadAuthorized(): ObservableOrPromiseOrValue<boolean> { @@ -260,12 +263,10 @@ class Info { labelToTranslate: string; value?: string; code?: boolean = false; - isList?: boolean = false; type?: TypeInfoEnum; } enum TypeInfoEnum { doi = 1, orgUnit = 2, - valueToTranslate = 3, } diff --git a/src/app/features/home/components/presentationals/home-archive-tile/home-archive-tile.presentational.html b/src/app/features/home/components/presentationals/home-archive-tile/home-archive-tile.presentational.html index 734e86352..fdfb7c039 100644 --- a/src/app/features/home/components/presentationals/home-archive-tile/home-archive-tile.presentational.html +++ b/src/app/features/home/components/presentationals/home-archive-tile/home-archive-tile.presentational.html @@ -15,9 +15,9 @@ ></dlcm-shared-organizational-unit-name-container> <span class="title">{{archive.title}}</span> <div class="detailed-infos"> - <span class="year"> + <span class="year"> <dlcm-shared-icon [iconName]="iconNameEnum.creationDate"></dlcm-shared-icon> - {{archive.yearPublicationDate}} + {{archive.yearPublicationDate}} </span> <span class="access-level" [class]="colorAccessLevel" @@ -31,7 +31,6 @@ </span> </div> - <div class="button-wrapper"> <button mat-flat-button color="primary" diff --git a/src/app/features/home/components/presentationals/home-archive-tile/home-archive-tile.presentational.scss b/src/app/features/home/components/presentationals/home-archive-tile/home-archive-tile.presentational.scss index 6b193e944..06962da7d 100644 --- a/src/app/features/home/components/presentationals/home-archive-tile/home-archive-tile.presentational.scss +++ b/src/app/features/home/components/presentationals/home-archive-tile/home-archive-tile.presentational.scss @@ -6,10 +6,6 @@ border: 1px solid $extra-light-grey; padding: 10px 20px; - &:hover { - cursor: pointer; - } - .grid { display: grid; text-align: center; @@ -25,7 +21,8 @@ width: 100px; .image { - height: 100%; + max-width: 100%; + max-height: 100%; } } } @@ -83,6 +80,17 @@ .button-wrapper { margin-top: 10px; text-align: center; + visibility: hidden; + } + } + + &:hover { + cursor: pointer; + + .grid { + .button-wrapper { + visibility: initial; + } } } } diff --git a/src/app/features/home/components/presentationals/home-main-page-content/home-main-page-content.presentational.ts b/src/app/features/home/components/presentationals/home-main-page-content/home-main-page-content.presentational.ts index 327ec0bc8..56215b9aa 100644 --- a/src/app/features/home/components/presentationals/home-main-page-content/home-main-page-content.presentational.ts +++ b/src/app/features/home/components/presentationals/home-main-page-content/home-main-page-content.presentational.ts @@ -4,7 +4,6 @@ import { Output, } from "@angular/core"; import {SharedAbstractPresentational} from "@shared/components/presentationals/shared-abstract/shared-abstract.presentational"; -import {RoutesEnum} from "@shared/enums/routes.enum"; import { BehaviorSubject, Observable, @@ -18,9 +17,9 @@ import {ObservableUtil} from "solidify-frontend"; changeDetection: ChangeDetectionStrategy.OnPush, }) export class HomeMainPageContentPresentational extends SharedAbstractPresentational { - private readonly _navigateBS: BehaviorSubject<RoutesEnum> = new BehaviorSubject<RoutesEnum>(undefined); - @Output("navigateChange") - readonly navigateObs: Observable<RoutesEnum> = ObservableUtil.asObservable(this._navigateBS); + private readonly _goToSearchBS: BehaviorSubject<void> = new BehaviorSubject<void>(undefined); + @Output("goToSearch") + readonly goToSearchObs: Observable<void> = ObservableUtil.asObservable(this._goToSearchBS); private readonly _goToDepositOrLoginBS: BehaviorSubject<void> = new BehaviorSubject<void>(undefined); @Output("goToDepositOrLogin") @@ -31,6 +30,6 @@ export class HomeMainPageContentPresentational extends SharedAbstractPresentatio } goToSearchResult(): void { - // TODO + this._goToSearchBS.next(); } } diff --git a/src/app/features/home/components/presentationals/home-search-facet/home-search-facet.presentational.html b/src/app/features/home/components/presentationals/home-search-facet/home-search-facet.presentational.html index ed021aa17..d1a7d6611 100644 --- a/src/app/features/home/components/presentationals/home-search-facet/home-search-facet.presentational.html +++ b/src/app/features/home/components/presentationals/home-search-facet/home-search-facet.presentational.html @@ -1,5 +1,6 @@ +<div class="active-criteria-sentence">{{labelTranslateEnum.refineResearch | translate}} <span class="number">({{numberCriteriaActive}})</span></div> + <ng-template [ngIf]="numberCriteriaActive > 0"> - <div class="active-criteria-sentence">{{labelTranslateEnum.refineResearch | translate}} <span class="number">({{numberCriteriaActive}})</span></div> <div class="panel panel-active-criteria"> <div class="active-criteria"> @@ -21,7 +22,6 @@ </mat-chip-list> </div> - <div class="button-wrapper"> <button mat-flat-button color="primary" @@ -60,4 +60,14 @@ [isOpen]="true" > </dlcm-shared-panel-expandable> + <dlcm-shared-panel-expandable class="section" + [titleToTranslate]="labelTranslateEnum.publicationYear | translate" + [isOpen]="true" + > + </dlcm-shared-panel-expandable> + <dlcm-shared-panel-expandable class="section" + [titleToTranslate]="labelTranslateEnum.researchArea | translate" + [isOpen]="true" + > + </dlcm-shared-panel-expandable> </div> diff --git a/src/app/features/home/components/routables/home-page/home-page.routable.html b/src/app/features/home/components/routables/home-page/home-page.routable.html index 96497256e..ef9ca8e75 100644 --- a/src/app/features/home/components/routables/home-page/home-page.routable.html +++ b/src/app/features/home/components/routables/home-page/home-page.routable.html @@ -20,7 +20,7 @@ <div class="news-wrapper"> <div class="left-part"> <dlcm-home-main-page-content class="main-page-content" - (navigateChange)="navigate($event)" + (goToSearch)="getToSearch()" (goToDepositOrLogin)="goToDeposit()" ></dlcm-home-main-page-content> <dlcm-home-partners class="partner" diff --git a/src/app/features/home/components/routables/home-page/home-page.routable.ts b/src/app/features/home/components/routables/home-page/home-page.routable.ts index 95a062982..6ba70330c 100644 --- a/src/app/features/home/components/routables/home-page/home-page.routable.ts +++ b/src/app/features/home/components/routables/home-page/home-page.routable.ts @@ -95,4 +95,8 @@ export class HomePageRoutable extends SharedAbstractPresentational implements On this._oauthService.initAuthorizationCodeFlow(AppRoutesEnum.deposit); } } + + getToSearch(): void { + this.store.dispatch(new Navigate([RoutesEnum.homeSearch], HomeHelper.getDefaultSearchQueryParams())); + } } diff --git a/src/app/features/home/helpers/home.helper.ts b/src/app/features/home/helpers/home.helper.ts index 6f6246e36..b18dd8d95 100644 --- a/src/app/features/home/helpers/home.helper.ts +++ b/src/app/features/home/helpers/home.helper.ts @@ -11,6 +11,10 @@ import { export class HomeHelper { static SEARCH_QUERY_PARAM: string = "search"; + static getDefaultSearchQueryParams(): any { + return {[this.SEARCH_QUERY_PARAM]: "*"}; + } + static navigateToSearch(store: Store, searchTerm?: string | undefined, url?: string | string[] | undefined): Observable<any> { if (isNullOrUndefined(url)) { url = RoutesEnum.homeSearch; diff --git a/src/app/shared/components/presentationals/shared-icon/shared-icon.presentational.html b/src/app/shared/components/presentationals/shared-icon/shared-icon.presentational.html index 699d8ba45..eaf2acc4d 100644 --- a/src/app/shared/components/presentationals/shared-icon/shared-icon.presentational.html +++ b/src/app/shared/components/presentationals/shared-icon/shared-icon.presentational.html @@ -12,5 +12,6 @@ [alt]="iconNameEnum[iconInfo.name]" class="icon" > + <!-- SHOULD BE class="image" HERE --> </ng-container> </ng-template> \ No newline at end of file diff --git a/src/app/shared/enums/label-translate.enum.ts b/src/app/shared/enums/label-translate.enum.ts index 6a8721caf..7150f28b7 100644 --- a/src/app/shared/enums/label-translate.enum.ts +++ b/src/app/shared/enums/label-translate.enum.ts @@ -302,6 +302,8 @@ export class LabelTranslateEnum { static clearFilters: string = MARK_AS_TRANSLATABLE("general.label.clearFilters"); static listView: string = MARK_AS_TRANSLATABLE("general.label.listView"); static tilesView: string = MARK_AS_TRANSLATABLE("general.label.tilesView"); + static metadataDatacite: string = MARK_AS_TRANSLATABLE("general.label.metadataDatacite"); + static similarArchive: string = MARK_AS_TRANSLATABLE("general.label.similarArchive"); static hide: string = MARK_AS_TRANSLATABLE("general.link.hide"); static show: string = MARK_AS_TRANSLATABLE("general.link.show"); diff --git a/src/app/shared/utils/metadata.util.ts b/src/app/shared/utils/metadata.util.ts index 721d5e51b..bd5317cf1 100644 --- a/src/app/shared/utils/metadata.util.ts +++ b/src/app/shared/utils/metadata.util.ts @@ -74,7 +74,7 @@ export class MetadataUtil { return this.getInformation(xpath, metadata); } - static getAuthors(metadata: Metadata): string[] { + static getContributors(metadata: Metadata): string[] { const xpath = "/d:resource/d:creators/d:creator/d:creatorName"; const results = []; const xmlDoc = this.parse(metadata[MetadataEnum.dataciteXml]); diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json index 9392d1fbd..3a938f0dd 100644 --- a/src/assets/i18n/de.json +++ b/src/assets/i18n/de.json @@ -1117,6 +1117,7 @@ "matchingPeople": "Passende Personen", "message": "Nachricht", "metadata": "Metadaten", + "metadataDatacite": "Datacite-Metadaten", "metadataType": "Metadaten-Typ", "metadataTypes": "Metadaten-Typen", "metadataVersion": "Metadaten-Version", @@ -1178,6 +1179,7 @@ "selectLanguage": "Sprache auswählen", "sentRequest": "Gesendete Anfrage", "sentRequests": "Gesendete Anfragen", + "similarArchive": "Ähnliches archiv", "sip": "SIP", "size": "Größe", "source": "Quelle", @@ -1297,8 +1299,7 @@ "buttonDisabledReason": { "needToBeMember": "Sie müssen Mitglied der Organisationseinheit sein, um diese Aktion durchführen zu können", "needToBeSteward": "Sie müssen ein Steward der Organisationseinheit sein, um diese Aktion durchzuführen." - }, - "datacite": "Datacite-Metadaten" + } } } }, diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index 1ebd8629c..030d5e84c 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -1117,6 +1117,7 @@ "matchingPeople": "Matching people", "message": "Message", "metadata": "Metadata", + "metadataDatacite": "Datacite metadata", "metadataType": "Metadata type", "metadataTypes": "Metadata types", "metadataVersion": "Metadata version", @@ -1178,6 +1179,7 @@ "selectLanguage": "Select language", "sentRequest": "Sent request", "sentRequests": "Sent requests", + "similarArchive": "Similar archive", "sip": "SIP", "size": "Size", "source": "Source", @@ -1297,8 +1299,7 @@ "buttonDisabledReason": { "needToBeMember": "You must be a member of the organizational unit to do this action", "needToBeSteward": "You must be Steward of the organizational unit to do this action" - }, - "datacite": "Datacite metadata" + } } } }, diff --git a/src/assets/i18n/fr.json b/src/assets/i18n/fr.json index 2da552280..321545bb9 100644 --- a/src/assets/i18n/fr.json +++ b/src/assets/i18n/fr.json @@ -1117,6 +1117,7 @@ "matchingPeople": "Personnes pouvant correspondre", "message": "Message", "metadata": "Métadonnées", + "metadataDatacite": "Datacite métadonnées", "metadataType": "Type de métadonnées", "metadataTypes": "Types de métadonnées", "metadataVersion": "Version des métadonnées", @@ -1178,6 +1179,7 @@ "selectLanguage": "Sélectionner une langue", "sentRequest": "Demande envoyée", "sentRequests": "Demandes envoyées", + "similarArchive": "Archives similaires", "sip": "SIP", "size": "Taille", "source": "Source", @@ -1297,8 +1299,7 @@ "buttonDisabledReason": { "needToBeMember": "Vous devez être membre de l'unité organisationnelle pour faire cette action", "needToBeSteward": "Vous devez être steward de l'unité organisationnelle pour faire cette action" - }, - "datacite": "Datacite métadonnées" + } } } }, -- GitLab