diff --git a/src/app/admin/admin-routes.ts b/src/app/admin/admin-routes.ts index 59529710c9..e5afe09cc7 100644 --- a/src/app/admin/admin-routes.ts +++ b/src/app/admin/admin-routes.ts @@ -11,8 +11,8 @@ import { REGISTRIES_MODULE_PATH, REPORTS_MODULE_PATH, } from './admin-routing-paths'; -import { AdminSearchPageComponent } from './admin-search-page/admin-search-page.component'; -import { AdminWorkflowPageComponent } from './admin-workflow-page/admin-workflow-page.component'; +import { ThemedAdminSearchPageComponent } from './admin-search-page/themed-admin-search-page.component'; +import { ThemedAdminWorkflowPageComponent } from './admin-workflow-page/themed-admin-workflow-page.component'; export const ROUTES: Route[] = [ { @@ -28,13 +28,13 @@ export const ROUTES: Route[] = [ { path: 'search', resolve: { breadcrumb: i18nBreadcrumbResolver }, - component: AdminSearchPageComponent, + component: ThemedAdminSearchPageComponent, data: { title: 'admin.search.title', breadcrumbKey: 'admin.search' }, }, { path: 'workflow', resolve: { breadcrumb: i18nBreadcrumbResolver }, - component: AdminWorkflowPageComponent, + component: ThemedAdminWorkflowPageComponent, data: { title: 'admin.workflow.title', breadcrumbKey: 'admin.workflow' }, }, { diff --git a/src/app/admin/admin-search-page/admin-search-page.component.ts b/src/app/admin/admin-search-page/admin-search-page.component.ts index 99909b8257..4ae11a9d47 100644 --- a/src/app/admin/admin-search-page/admin-search-page.component.ts +++ b/src/app/admin/admin-search-page/admin-search-page.component.ts @@ -4,7 +4,7 @@ import { Context } from '../../core/shared/context.model'; import { ThemedConfigurationSearchPageComponent } from '../../search-page/themed-configuration-search-page.component'; @Component({ - selector: 'ds-admin-search-page', + selector: 'ds-base-admin-search-page', templateUrl: './admin-search-page.component.html', styleUrls: ['./admin-search-page.component.scss'], standalone: true, diff --git a/src/app/admin/admin-search-page/admin-search.module.ts b/src/app/admin/admin-search-page/admin-search.module.ts new file mode 100644 index 0000000000..fae7d880be --- /dev/null +++ b/src/app/admin/admin-search-page/admin-search.module.ts @@ -0,0 +1,52 @@ +import { NgModule } from '@angular/core'; + +import { JournalEntitiesModule } from '../../entity-groups/journal-entities/journal-entities.module'; +import { ResearchEntitiesModule } from '../../entity-groups/research-entities/research-entities.module'; +import { SearchModule } from '../../shared/search/search.module'; +import { SharedModule } from '../../shared/shared.module'; +import { AdminSearchPageComponent } from './admin-search-page.component'; +import { CollectionAdminSearchResultGridElementComponent } from './admin-search-results/admin-search-result-grid-element/collection-search-result/collection-admin-search-result-grid-element.component'; +import { CommunityAdminSearchResultGridElementComponent } from './admin-search-results/admin-search-result-grid-element/community-search-result/community-admin-search-result-grid-element.component'; +import { ItemAdminSearchResultGridElementComponent } from './admin-search-results/admin-search-result-grid-element/item-search-result/item-admin-search-result-grid-element.component'; +import { CollectionAdminSearchResultListElementComponent } from './admin-search-results/admin-search-result-list-element/collection-search-result/collection-admin-search-result-list-element.component'; +import { CommunityAdminSearchResultListElementComponent } from './admin-search-results/admin-search-result-list-element/community-search-result/community-admin-search-result-list-element.component'; +import { ItemAdminSearchResultListElementComponent } from './admin-search-results/admin-search-result-list-element/item-search-result/item-admin-search-result-list-element.component'; +import { ItemAdminSearchResultActionsComponent } from './admin-search-results/item-admin-search-result-actions.component'; +import { ThemedAdminSearchPageComponent } from './themed-admin-search-page.component'; + +const ENTRY_COMPONENTS = [ + // put only entry components that use custom decorator + ItemAdminSearchResultListElementComponent, + CommunityAdminSearchResultListElementComponent, + CollectionAdminSearchResultListElementComponent, + ItemAdminSearchResultGridElementComponent, + CommunityAdminSearchResultGridElementComponent, + CollectionAdminSearchResultGridElementComponent, + ItemAdminSearchResultActionsComponent, +]; + +@NgModule({ + imports: [ + SearchModule, + SharedModule.withEntryComponents(), + JournalEntitiesModule.withEntryComponents(), + ResearchEntitiesModule.withEntryComponents(), + ], + declarations: [ + ThemedAdminSearchPageComponent, + AdminSearchPageComponent, + ...ENTRY_COMPONENTS, + ], +}) +export class AdminSearchModule { + /** + * NOTE: this method allows to resolve issue with components that using a custom decorator + * which are not loaded during SSR otherwise + */ + static withEntryComponents() { + return { + ngModule: SharedModule, + providers: ENTRY_COMPONENTS.map((component) => ({ provide: component })), + }; + } +} diff --git a/src/app/admin/admin-search-page/themed-admin-search-page.component.ts b/src/app/admin/admin-search-page/themed-admin-search-page.component.ts new file mode 100644 index 0000000000..d49c184784 --- /dev/null +++ b/src/app/admin/admin-search-page/themed-admin-search-page.component.ts @@ -0,0 +1,29 @@ +import { Component } from '@angular/core'; + +import { ThemedComponent } from '../../shared/theme-support/themed.component'; +import { AdminSearchPageComponent } from './admin-search-page.component'; + +/** + * Themed wrapper for {@link AdminSearchPageComponent} + */ +@Component({ + selector: 'ds-admin-search-page', + templateUrl: '../../shared/theme-support/themed.component.html', + standalone: true, + imports: [AdminSearchPageComponent], +}) +export class ThemedAdminSearchPageComponent extends ThemedComponent { + + protected getComponentName(): string { + return 'AdminSearchPageComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../themes/${themeName}/app/admin/admin-search-page/admin-search-page.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./admin-search-page.component'); + } + +} diff --git a/src/app/admin/admin-workflow-page/admin-workflow-page.component.ts b/src/app/admin/admin-workflow-page/admin-workflow-page.component.ts index 62a66039af..0daf4e67f0 100644 --- a/src/app/admin/admin-workflow-page/admin-workflow-page.component.ts +++ b/src/app/admin/admin-workflow-page/admin-workflow-page.component.ts @@ -4,7 +4,7 @@ import { Context } from '../../core/shared/context.model'; import { ThemedConfigurationSearchPageComponent } from '../../search-page/themed-configuration-search-page.component'; @Component({ - selector: 'ds-admin-workflow-page', + selector: 'ds-base-admin-workflow-page', templateUrl: './admin-workflow-page.component.html', styleUrls: ['./admin-workflow-page.component.scss'], standalone: true, diff --git a/src/app/admin/admin-workflow-page/admin-workflow.module.ts b/src/app/admin/admin-workflow-page/admin-workflow.module.ts new file mode 100644 index 0000000000..ba2520e46e --- /dev/null +++ b/src/app/admin/admin-workflow-page/admin-workflow.module.ts @@ -0,0 +1,43 @@ +import { NgModule } from '@angular/core'; + +import { SearchModule } from '../../shared/search/search.module'; +import { SharedModule } from '../../shared/shared.module'; +import { AdminWorkflowPageComponent } from './admin-workflow-page.component'; +import { WorkflowItemSearchResultAdminWorkflowGridElementComponent } from './admin-workflow-search-results/admin-workflow-search-result-grid-element/workflow-item/workflow-item-search-result-admin-workflow-grid-element.component'; +import { WorkflowItemSearchResultAdminWorkflowListElementComponent } from './admin-workflow-search-results/admin-workflow-search-result-list-element/workflow-item/workflow-item-search-result-admin-workflow-list-element.component'; +import { WorkflowItemAdminWorkflowActionsComponent } from './admin-workflow-search-results/workflow-item-admin-workflow-actions.component'; +import { ThemedAdminWorkflowPageComponent } from './themed-admin-workflow-page.component'; + +const ENTRY_COMPONENTS = [ + // put only entry components that use custom decorator + WorkflowItemSearchResultAdminWorkflowListElementComponent, + WorkflowItemSearchResultAdminWorkflowGridElementComponent, +]; + +@NgModule({ + imports: [ + SearchModule, + SharedModule.withEntryComponents(), + ], + declarations: [ + ThemedAdminWorkflowPageComponent, + AdminWorkflowPageComponent, + WorkflowItemAdminWorkflowActionsComponent, + ...ENTRY_COMPONENTS, + ], + exports: [ + AdminWorkflowPageComponent, + ], +}) +export class AdminWorkflowModuleModule { + /** + * NOTE: this method allows to resolve issue with components that using a custom decorator + * which are not loaded during SSR otherwise + */ + static withEntryComponents() { + return { + ngModule: SharedModule, + providers: ENTRY_COMPONENTS.map((component) => ({ provide: component })), + }; + } +} diff --git a/src/app/admin/admin-workflow-page/themed-admin-workflow-page.component.ts b/src/app/admin/admin-workflow-page/themed-admin-workflow-page.component.ts new file mode 100644 index 0000000000..5668b5c7a6 --- /dev/null +++ b/src/app/admin/admin-workflow-page/themed-admin-workflow-page.component.ts @@ -0,0 +1,29 @@ +import { Component } from '@angular/core'; + +import { ThemedComponent } from '../../shared/theme-support/themed.component'; +import { AdminWorkflowPageComponent } from './admin-workflow-page.component'; + +/** + * Themed wrapper for {@link AdminWorkflowPageComponent} + */ +@Component({ + selector: 'ds-admin-workflow-page', + templateUrl: '../../shared/theme-support/themed.component.html', + standalone: true, + imports: [AdminWorkflowPageComponent], +}) +export class ThemedAdminWorkflowPageComponent extends ThemedComponent { + + protected getComponentName(): string { + return 'AdminWorkflowPageComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../themes/${themeName}/app/admin/admin-workflow-page/admin-workflow-page.component`); + } + + protected importUnthemedComponent(): Promise { + return import('./admin-workflow-page.component'); + } + +} diff --git a/src/themes/custom/app/admin/admin-search-page/admin-search-page.component.html b/src/themes/custom/app/admin/admin-search-page/admin-search-page.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/admin/admin-search-page/admin-search-page.component.scss b/src/themes/custom/app/admin/admin-search-page/admin-search-page.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/admin/admin-search-page/admin-search-page.component.ts b/src/themes/custom/app/admin/admin-search-page/admin-search-page.component.ts new file mode 100644 index 0000000000..b8fa95634b --- /dev/null +++ b/src/themes/custom/app/admin/admin-search-page/admin-search-page.component.ts @@ -0,0 +1,14 @@ +import { Component } from '@angular/core'; + +import { AdminSearchPageComponent as BaseComponent } from '../../../../../app/admin/admin-search-page/admin-search-page.component'; + +@Component({ + selector: 'ds-themed-admin-search-page', + // styleUrls: ['./admin-search-page.component.scss'], + styleUrls: ['../../../../../app/admin/admin-search-page/admin-search-page.component.scss'], + // templateUrl: './admin-search-page.component.html', + templateUrl: '../../../../../app/admin/admin-search-page/admin-search-page.component.html', + standalone: true, +}) +export class AdminSearchPageComponent extends BaseComponent { +} diff --git a/src/themes/custom/app/admin/admin-workflow-page/admin-workflow-page.component.html b/src/themes/custom/app/admin/admin-workflow-page/admin-workflow-page.component.html new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/admin/admin-workflow-page/admin-workflow-page.component.scss b/src/themes/custom/app/admin/admin-workflow-page/admin-workflow-page.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/themes/custom/app/admin/admin-workflow-page/admin-workflow-page.component.ts b/src/themes/custom/app/admin/admin-workflow-page/admin-workflow-page.component.ts new file mode 100644 index 0000000000..2c95da79af --- /dev/null +++ b/src/themes/custom/app/admin/admin-workflow-page/admin-workflow-page.component.ts @@ -0,0 +1,14 @@ +import { Component } from '@angular/core'; + +import { AdminWorkflowPageComponent as BaseComponent } from '../../../../../app/admin/admin-workflow-page/admin-workflow-page.component'; + +@Component({ + selector: 'ds-themed-admin-workflow-page', + // styleUrls: ['./admin-workflow-page.component.scss'], + styleUrls: ['../../../../../app/admin/admin-workflow-page/admin-workflow-page.component.scss'], + // templateUrl: './admin-workflow-page.component.html', + templateUrl: '../../../../../app/admin/admin-workflow-page/admin-workflow-page.component.html', + standalone: true, +}) +export class AdminWorkflowPageComponent extends BaseComponent { +} diff --git a/src/themes/custom/lazy-theme.module.ts b/src/themes/custom/lazy-theme.module.ts index 0394c672f6..7367e291b5 100644 --- a/src/themes/custom/lazy-theme.module.ts +++ b/src/themes/custom/lazy-theme.module.ts @@ -14,7 +14,9 @@ import { ScrollToModule } from '@nicky-lenaers/ngx-scroll-to'; import { RootModule } from '../../app/root.module'; import { SearchResultsSkeletonComponent } from '../../app/shared/search/search-results/search-results-skeleton/search-results-skeleton.component'; import { MetadataImportPageComponent } from './app/admin/admin-import-metadata-page/metadata-import-page.component'; +import { AdminSearchPageComponent } from './app/admin/admin-search-page/admin-search-page.component'; import { AdminSidebarComponent } from './app/admin/admin-sidebar/admin-sidebar.component'; +import { AdminWorkflowPageComponent } from './app/admin/admin-workflow-page/admin-workflow-page.component'; import { EditBitstreamPageComponent } from './app/bitstream-page/edit-bitstream-page/edit-bitstream-page.component'; import { BreadcrumbsComponent } from './app/breadcrumbs/breadcrumbs.component'; import { BrowseByDateComponent } from './app/browse-by/browse-by-date/browse-by-date.component'; @@ -104,7 +106,6 @@ import { WorkflowItemDeleteComponent } from './app/workflowitems-edit-page/workf import { WorkflowItemSendBackComponent } from './app/workflowitems-edit-page/workflow-item-send-back/workflow-item-send-back.component'; import { WorkspaceItemsDeletePageComponent } from './app/workspaceitems-edit-page/workspaceitems-delete-page/workspaceitems-delete-page.component'; - const DECLARATIONS = [ FileSectionComponent, HomePageComponent, @@ -197,6 +198,8 @@ const DECLARATIONS = [ SubmissionUploadFilesComponent, ComcolPageContentComponent, SearchResultsSkeletonComponent, + AdminSearchPageComponent, + AdminWorkflowPageComponent, ]; @NgModule({