diff --git a/src/themes/esl/app/item-page/full/full-item-page.component.html b/src/themes/esl/app/item-page/full/full-item-page.component.html index de325eeea12..e62330629cf 100644 --- a/src/themes/esl/app/item-page/full/full-item-page.component.html +++ b/src/themes/esl/app/item-page/full/full-item-page.component.html @@ -1,50 +1,64 @@
-
-
- - - -
- -
-

{{"theme.esl.visit" | translate}} {{"theme.esl.homepage" | translate}}.

+ @if (itemRD?.hasSucceeded) { +
+ @if (itemRD?.payload; as item) { +
+ + + @if (!item.isWithdrawn || (isAdmin$|async)) { + +
+

{{"theme.esl.visit" | translate}} {{"theme.esl.homepage" | translate}}.

+
+ +
+
+ + +
+ @if (!fromSubmissionObject) { + + } +
+ + + @for (mdEntry of (metadata$ | async) | keyvalue; track mdEntry) { + @for (mdValue of mdEntry.value; track mdValue) { + + + + + + } + } + +
{{mdEntry.key}}{{mdValue.value}}{{mdValue.language}}
+
+ + + + @if (fromSubmissionObject) { +
+
+ +
+
+ } +
+ }
- -
- - -
- -
- - - - - - - - - - -
{{mdEntry.key}}{{mdValue.value}}{{mdValue.language}}
-
- - - -
-
- -
-
-
+ }
-
- - + } + @if (itemRD?.hasFailed) { + + } + @if (itemRD?.isLoading) { + + }
diff --git a/src/themes/esl/app/item-page/full/full-item-page.component.scss b/src/themes/esl/app/item-page/full/full-item-page.component.scss new file mode 100644 index 00000000000..1b011ab6182 --- /dev/null +++ b/src/themes/esl/app/item-page/full/full-item-page.component.scss @@ -0,0 +1,8 @@ +:host { + div.simple-view-link { + text-align: center; + a { + min-width: 25%; + } + } +} diff --git a/src/themes/esl/app/item-page/full/full-item-page.component.ts b/src/themes/esl/app/item-page/full/full-item-page.component.ts index 1781f0a4ecf..829e5b92096 100644 --- a/src/themes/esl/app/item-page/full/full-item-page.component.ts +++ b/src/themes/esl/app/item-page/full/full-item-page.component.ts @@ -1,20 +1,52 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; -import { fadeInOut } from '../../../../../app/shared/animations/fade'; -import { FullItemPageComponent as BaseComponent } from '../../../../../app/item-page/full/full-item-page.component'; +import { + AsyncPipe, + KeyValuePipe, +} from '@angular/common'; +import { + ChangeDetectionStrategy, + Component, +} from '@angular/core'; +import { RouterLink } from '@angular/router'; +import { TranslateModule } from '@ngx-translate/core'; -/** - * This component renders a full item page. - * The route parameter 'id' is used to request the item it represents. - */ +import { ThemedItemAlertsComponent } from '../../../../../app/item-page/alerts/themed-item-alerts.component'; +import { CollectionsComponent } from '../../../../../app/item-page/field-components/collections/collections.component'; +import { ThemedFullFileSectionComponent } from '../../../../../app/item-page/full/field-components/file-section/themed-full-file-section.component'; +import { FullItemPageComponent as BaseComponent } from '../../../../../app/item-page/full/full-item-page.component'; +import { ThemedItemPageTitleFieldComponent } from '../../../../../app/item-page/simple/field-components/specific-field/title/themed-item-page-field.component'; +import { ItemVersionsComponent } from '../../../../../app/item-page/versions/item-versions.component'; +import { ItemVersionsNoticeComponent } from '../../../../../app/item-page/versions/notice/item-versions-notice.component'; +import { fadeInOut } from '../../../../../app/shared/animations/fade'; +import { DsoEditMenuComponent } from '../../../../../app/shared/dso-page/dso-edit-menu/dso-edit-menu.component'; +import { ErrorComponent } from '../../../../../app/shared/error/error.component'; +import { ThemedLoadingComponent } from '../../../../../app/shared/loading/themed-loading.component'; +import { VarDirective } from '../../../../../app/shared/utils/var.directive'; @Component({ - selector: 'ds-full-item-page', - // styleUrls: ['./full-item-page.component.scss'], - styleUrls: ['../../../../../app/item-page/full/full-item-page.component.scss'], + selector: 'ds-themed-full-item-page', + styleUrls: ['./full-item-page.component.scss'], + // styleUrls: ['../../../../../app/item-page/full/full-item-page.component.scss'], templateUrl: './full-item-page.component.html', // templateUrl: '../../../../../app/item-page/full/full-item-page.component.html', changeDetection: ChangeDetectionStrategy.OnPush, - animations: [fadeInOut] + animations: [fadeInOut], + standalone: true, + imports: [ + AsyncPipe, + CollectionsComponent, + DsoEditMenuComponent, + ErrorComponent, + ItemVersionsComponent, + ItemVersionsNoticeComponent, + KeyValuePipe, + RouterLink, + ThemedFullFileSectionComponent, + ThemedItemAlertsComponent, + ThemedItemPageTitleFieldComponent, + ThemedLoadingComponent, + TranslateModule, + VarDirective, + ], }) export class FullItemPageComponent extends BaseComponent { } diff --git a/src/themes/esl/app/item-page/simple/item-types/untyped-item/untyped-item.component.html b/src/themes/esl/app/item-page/simple/item-types/untyped-item/untyped-item.component.html index 260d2ba209a..8f8a9693a95 100644 --- a/src/themes/esl/app/item-page/simple/item-types/untyped-item/untyped-item.component.html +++ b/src/themes/esl/app/item-page/simple/item-types/untyped-item/untyped-item.component.html @@ -1,13 +1,17 @@ - -
-
- - +@if (showBackButton$ | async) { + +} +@if (iiifEnabled) { +
+
+ + +
-
+}
@@ -15,28 +19,30 @@
- - + +
- + @if (!(mediaViewer.image || mediaViewer.video)) { - + - -
- -
- + } + @if (mediaViewer.image || mediaViewer.video) { +
+ +
+ } + - - + [label]="'item.page.authors' | translate"> + @@ -70,13 +76,40 @@ [fields]="['dc.identifier.citation']" [label]="'item.page.citation'"> + @if (geospatialItemPageFieldsEnabled) { + + + } + + + + + + + + + + diff --git a/src/themes/esl/app/item-page/simple/item-types/untyped-item/untyped-item.component.scss b/src/themes/esl/app/item-page/simple/item-types/untyped-item/untyped-item.component.scss new file mode 100644 index 00000000000..413c25a4af9 --- /dev/null +++ b/src/themes/esl/app/item-page/simple/item-types/untyped-item/untyped-item.component.scss @@ -0,0 +1 @@ +@import '../../../../../../../styles/variables.scss'; diff --git a/src/themes/esl/app/item-page/simple/item-types/untyped-item/untyped-item.component.ts b/src/themes/esl/app/item-page/simple/item-types/untyped-item/untyped-item.component.ts index 7563de89941..8385cf165bd 100644 --- a/src/themes/esl/app/item-page/simple/item-types/untyped-item/untyped-item.component.ts +++ b/src/themes/esl/app/item-page/simple/item-types/untyped-item/untyped-item.component.ts @@ -1,25 +1,66 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; -import { Item } from '../../../../../../../app/core/shared/item.model'; -import { ViewMode } from '../../../../../../../app/core/shared/view-mode.model'; +import { AsyncPipe } from '@angular/common'; import { - listableObjectComponent -} from '../../../../../../../app/shared/object-collection/shared/listable-object/listable-object.decorator'; + ChangeDetectionStrategy, + Component, +} from '@angular/core'; +import { RouterLink } from '@angular/router'; +import { TranslateModule } from '@ngx-translate/core'; + import { Context } from '../../../../../../../app/core/shared/context.model'; -import { - UntypedItemComponent as BaseComponent -} from '../../../../../../../app/item-page/simple/item-types/untyped-item/untyped-item.component'; +import { Item } from '../../../../../../../app/core/shared/item.model'; +import { ViewMode } from '../../../../../../../app/core/shared/view-mode.model'; +import { CollectionsComponent } from '../../../../../../../app/item-page/field-components/collections/collections.component'; +import { ThemedMediaViewerComponent } from '../../../../../../../app/item-page/media-viewer/themed-media-viewer.component'; +import { MiradorViewerComponent } from '../../../../../../../app/item-page/mirador-viewer/mirador-viewer.component'; +import { ThemedFileSectionComponent } from '../../../../../../../app/item-page/simple/field-components/file-section/themed-file-section.component'; +import { ItemPageAbstractFieldComponent } from '../../../../../../../app/item-page/simple/field-components/specific-field/abstract/item-page-abstract-field.component'; +import { ItemPageCcLicenseFieldComponent } from '../../../../../../../app/item-page/simple/field-components/specific-field/cc-license/item-page-cc-license-field.component'; +import { ItemPageDateFieldComponent } from '../../../../../../../app/item-page/simple/field-components/specific-field/date/item-page-date-field.component'; +import { GenericItemPageFieldComponent } from '../../../../../../../app/item-page/simple/field-components/specific-field/generic/generic-item-page-field.component'; +import { GeospatialItemPageFieldComponent } from '../../../../../../../app/item-page/simple/field-components/specific-field/geospatial/geospatial-item-page-field.component'; +import { ThemedItemPageTitleFieldComponent } from '../../../../../../../app/item-page/simple/field-components/specific-field/title/themed-item-page-field.component'; +import { ItemPageUriFieldComponent } from '../../../../../../../app/item-page/simple/field-components/specific-field/uri/item-page-uri-field.component'; +import { UntypedItemComponent as BaseComponent } from '../../../../../../../app/item-page/simple/item-types/untyped-item/untyped-item.component'; +import { ThemedMetadataRepresentationListComponent } from '../../../../../../../app/item-page/simple/metadata-representation-list/themed-metadata-representation-list.component'; +import { DsoEditMenuComponent } from '../../../../../../../app/shared/dso-page/dso-edit-menu/dso-edit-menu.component'; +import { MetadataFieldWrapperComponent } from '../../../../../../../app/shared/metadata-field-wrapper/metadata-field-wrapper.component'; +import { listableObjectComponent } from '../../../../../../../app/shared/object-collection/shared/listable-object/listable-object.decorator'; +import { ThemedResultsBackButtonComponent } from '../../../../../../../app/shared/results-back-button/themed-results-back-button.component'; +import { ThemedThumbnailComponent } from '../../../../../../../app/thumbnail/themed-thumbnail.component'; -/** - * Component that represents an untyped Item page - */ @listableObjectComponent(Item, ViewMode.StandalonePage, Context.Any, 'esl') @Component({ selector: 'ds-untyped-item', - // styleUrls: ['./untyped-item.component.scss'], - styleUrls: ['../../../../../../../app/item-page/simple/item-types/untyped-item/untyped-item.component.scss'], + styleUrls: ['./untyped-item.component.scss'], + // styleUrls: [ + // '../../../../../../../app/item-page/simple/item-types/untyped-item/untyped-item.component.scss', + // ], templateUrl: './untyped-item.component.html', - // templateUrl: '../../../../../../../app/item-page/simple/item-types/untyped-item/untyped-item.component.html', + // templateUrl: + // '../../../../../../../app/item-page/simple/item-types/untyped-item/untyped-item.component.html', changeDetection: ChangeDetectionStrategy.OnPush, + standalone: true, + imports: [ + AsyncPipe, + CollectionsComponent, + DsoEditMenuComponent, + GenericItemPageFieldComponent, + GeospatialItemPageFieldComponent, + ItemPageAbstractFieldComponent, + ItemPageCcLicenseFieldComponent, + ItemPageDateFieldComponent, + ItemPageUriFieldComponent, + MetadataFieldWrapperComponent, + MiradorViewerComponent, + RouterLink, + ThemedFileSectionComponent, + ThemedItemPageTitleFieldComponent, + ThemedMediaViewerComponent, + ThemedMetadataRepresentationListComponent, + ThemedResultsBackButtonComponent, + ThemedThumbnailComponent, + TranslateModule, + ], }) export class UntypedItemComponent extends BaseComponent { } diff --git a/src/themes/esl/eager-theme.module.ts b/src/themes/esl/eager-theme.module.ts index ea12953237b..57c13004bfb 100644 --- a/src/themes/esl/eager-theme.module.ts +++ b/src/themes/esl/eager-theme.module.ts @@ -1,46 +1,28 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; -import { ItemPageModule } from '../../app/item-page/item-page.module'; -import { ItemSharedModule } from '../../app/item-page/item-shared.module'; -import { ItemVersionsModule } from '../../app/item-page/versions/item-versions.module'; -import { NavbarModule } from '../../app/navbar/navbar.module'; import { RootModule } from '../../app/root.module'; -import { SharedBrowseByModule } from '../../app/shared/browse-by/shared-browse-by.module'; -import { DsoPageModule } from '../../app/shared/dso-page/dso-page.module'; -import { ResultsBackButtonModule } from '../../app/shared/results-back-button/results-back-button.module'; -import { SharedModule } from '../../app/shared/shared.module'; -import { StatisticsModule } from '../../app/statistics/statistics.module'; -import { FullItemPageComponent } from './app/item-page/full/full-item-page.component'; + import { UntypedItemComponent } from './app/item-page/simple/item-types/untyped-item/untyped-item.component'; +import { FullItemPageComponent } from './app/item-page/full/full-item-page.component'; /** * Add components that use a custom decorator to ENTRY_COMPONENTS as well as DECLARATIONS. * This will ensure that decorator gets picked up when the app loads */ -const ENTRY_COMPONENTS = [ - UntypedItemComponent, - FullItemPageComponent -]; +const ENTRY_COMPONENTS = []; const DECLARATIONS = [ - ...ENTRY_COMPONENTS + ...ENTRY_COMPONENTS, + UntypedItemComponent, + FullItemPageComponent ]; @NgModule({ imports: [ CommonModule, - SharedModule, - SharedBrowseByModule, - ResultsBackButtonModule, RootModule, - NavbarModule, - ItemPageModule, - ItemSharedModule, - ItemVersionsModule, - DsoPageModule, - StatisticsModule, + ...DECLARATIONS, ], - declarations: DECLARATIONS, providers: [ ...ENTRY_COMPONENTS.map((component) => ({ provide: component })) ],