From 89da4c46886cf6a6d1c327ab00d8d2178b95d881 Mon Sep 17 00:00:00 2001 From: Lars Hadeler Date: Thu, 20 Nov 2025 10:33:32 +0100 Subject: [PATCH 1/4] Created themed version of login-password component --- .../log-in/methods/auth-methods.type.ts | 6 ++- .../methods/log-in.methods-decorator.ts | 7 +++- .../password/log-in-password.component.ts | 2 +- .../themed-log-in-password.component.ts | 30 ++++++++++++++ .../password/log-in-password.component.html | 0 .../password/log-in-password.component.scss | 0 .../password/log-in-password.component.ts | 39 +++++++++++++++++++ src/themes/custom/eager-theme.module.ts | 2 + 8 files changed, 81 insertions(+), 5 deletions(-) create mode 100644 src/app/shared/log-in/methods/password/themed-log-in-password.component.ts create mode 100644 src/themes/custom/app/shared/log-in/methods/password/log-in-password.component.html create mode 100644 src/themes/custom/app/shared/log-in/methods/password/log-in-password.component.scss create mode 100644 src/themes/custom/app/shared/log-in/methods/password/log-in-password.component.ts diff --git a/src/app/shared/log-in/methods/auth-methods.type.ts b/src/app/shared/log-in/methods/auth-methods.type.ts index 5b68f0b2e6b..48c46014b62 100644 --- a/src/app/shared/log-in/methods/auth-methods.type.ts +++ b/src/app/shared/log-in/methods/auth-methods.type.ts @@ -1,6 +1,8 @@ import { LogInExternalProviderComponent } from './log-in-external-provider/log-in-external-provider.component'; -import { LogInPasswordComponent } from './password/log-in-password.component'; +//import { LogInPasswordComponent } from './password/log-in-password.component'; //TODO: remove comment +import { ThemedLogInPasswordComponent } from './password/themed-log-in-password.component'; export type AuthMethodTypeComponent = - typeof LogInPasswordComponent | + //typeof LogInPasswordComponent | //TODO: remove comment + typeof ThemedLogInPasswordComponent | typeof LogInExternalProviderComponent; diff --git a/src/app/shared/log-in/methods/log-in.methods-decorator.ts b/src/app/shared/log-in/methods/log-in.methods-decorator.ts index b5292815faa..ef17d8f5897 100644 --- a/src/app/shared/log-in/methods/log-in.methods-decorator.ts +++ b/src/app/shared/log-in/methods/log-in.methods-decorator.ts @@ -2,10 +2,13 @@ import { AuthMethodType } from '@dspace/core/auth/models/auth.method-type'; import { AuthMethodTypeComponent } from './auth-methods.type'; import { LogInExternalProviderComponent } from './log-in-external-provider/log-in-external-provider.component'; -import { LogInPasswordComponent } from './password/log-in-password.component'; +//import { LogInPasswordComponent } from './password/log-in-password.component'; //TODO: remove comment +import { ThemedLogInPasswordComponent } from './password/themed-log-in-password.component'; + export const AUTH_METHOD_FOR_DECORATOR_MAP = new Map([ - [AuthMethodType.Password, LogInPasswordComponent], + //[AuthMethodType.Password, LogInPasswordComponent], //TODO: remove comment + [AuthMethodType.Password, ThemedLogInPasswordComponent], [AuthMethodType.Shibboleth, LogInExternalProviderComponent], [AuthMethodType.Oidc, LogInExternalProviderComponent], [AuthMethodType.Orcid, LogInExternalProviderComponent], diff --git a/src/app/shared/log-in/methods/password/log-in-password.component.ts b/src/app/shared/log-in/methods/password/log-in-password.component.ts index 0c54e6629ab..f26f0779987 100644 --- a/src/app/shared/log-in/methods/password/log-in-password.component.ts +++ b/src/app/shared/log-in/methods/password/log-in-password.component.ts @@ -55,7 +55,7 @@ import { BrowserOnlyPipe } from '../../../utils/browser-only.pipe'; * @class LogInPasswordComponent */ @Component({ - selector: 'ds-log-in-password', + selector: 'ds-base-log-in-password', templateUrl: './log-in-password.component.html', styleUrls: ['./log-in-password.component.scss'], animations: [fadeOut], diff --git a/src/app/shared/log-in/methods/password/themed-log-in-password.component.ts b/src/app/shared/log-in/methods/password/themed-log-in-password.component.ts new file mode 100644 index 00000000000..46b2fe132ed --- /dev/null +++ b/src/app/shared/log-in/methods/password/themed-log-in-password.component.ts @@ -0,0 +1,30 @@ +import { Component } from '@angular/core'; + +import { ThemedComponent } from '../../../theme-support/themed.component'; +import { LogInPasswordComponent } from './log-in-password.component'; + +/** + * Themed wrapper for LogInPasswordComponent + */ +@Component({ + selector: 'ds-log-in-password', + styleUrls: [], + templateUrl: '../../../theme-support/themed.component.html', + standalone: true, + imports: [ + LogInPasswordComponent, + ], +}) +export class ThemedLogInPasswordComponent extends ThemedComponent { + protected getComponentName(): string { + return 'LogInPasswordComponent'; + } + + protected importThemedComponent(themeName: string): Promise { + return import(`../../../../../themes/${themeName}/app/shared/log-in/methods/password/log-in-password.component`); + } + + protected importUnthemedComponent(): Promise { + return import(`./log-in-password.component`); + } +} diff --git a/src/themes/custom/app/shared/log-in/methods/password/log-in-password.component.html b/src/themes/custom/app/shared/log-in/methods/password/log-in-password.component.html new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/themes/custom/app/shared/log-in/methods/password/log-in-password.component.scss b/src/themes/custom/app/shared/log-in/methods/password/log-in-password.component.scss new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/themes/custom/app/shared/log-in/methods/password/log-in-password.component.ts b/src/themes/custom/app/shared/log-in/methods/password/log-in-password.component.ts new file mode 100644 index 00000000000..d012c39ea9a --- /dev/null +++ b/src/themes/custom/app/shared/log-in/methods/password/log-in-password.component.ts @@ -0,0 +1,39 @@ +import { AsyncPipe } from '@angular/common'; +import { Component } from '@angular/core'; +import { + FormsModule, + ReactiveFormsModule, +} from '@angular/forms'; +import { RouterLink } from '@angular/router'; +import { TranslateModule } from '@ngx-translate/core'; + +import { fadeOut } from '../../../../../../../app/shared/animations/fade'; +import { BtnDisabledDirective } from '../../../../../../../app/shared/btn-disabled.directive'; +import { LogInPasswordComponent as BaseComponent } from '../../../../../../../app/shared/log-in/methods/password/log-in-password.component'; +import { BrowserOnlyPipe } from '../../../../../../../app/shared/utils/browser-only.pipe'; + +/** + * /users/sign-in + * @class LogInPasswordComponent + */ +@Component({ + selector: 'ds-themed-log-in-password', + // templateUrl: './log-in-password.component.html', + templateUrl: '../../../../../../../app/shared/log-in/methods/password/log-in-password.component.html', + // styleUrls: ['./log-in-password.component.scss'], + styleUrls: ['../../../../../../../app/shared/log-in/methods/password/log-in-password.component.scss'], + animations: [fadeOut], + standalone: true, + imports: [ + AsyncPipe, + BrowserOnlyPipe, + BtnDisabledDirective, + FormsModule, + ReactiveFormsModule, + RouterLink, + TranslateModule, + ], +}) +export class LogInPasswordComponent extends BaseComponent { + +} diff --git a/src/themes/custom/eager-theme.module.ts b/src/themes/custom/eager-theme.module.ts index ecc88073a3c..1d5233c1e6d 100644 --- a/src/themes/custom/eager-theme.module.ts +++ b/src/themes/custom/eager-theme.module.ts @@ -25,6 +25,7 @@ import { EditItemSelectorComponent } from './app/shared/dso-selector/modal-wrapp import { FileDownloadLinkComponent } from './app/shared/file-download-link/file-download-link.component'; import { LangSwitchComponent } from './app/shared/lang-switch/lang-switch.component'; import { LogInComponent } from './app/shared/log-in/log-in.component'; +import { LogInPasswordComponent } from './app/shared/log-in/methods/password/log-in-password.component'; import { BrowseEntryListElementComponent } from './app/shared/object-list/browse-entry-list-element/browse-entry-list-element.component'; import { CollectionListElementComponent } from './app/shared/object-list/collection-list-element/collection-list-element.component'; import { CommunityListElementComponent } from './app/shared/object-list/community-list-element/community-list-element.component'; @@ -72,6 +73,7 @@ const DECLARATIONS = [ EditItemSelectorComponent, LogInComponent, LangSwitchComponent, + LogInPasswordComponent, ]; @NgModule({ From 365c16ebecbaf5c579dcce64c7c1cbf8da370fd2 Mon Sep 17 00:00:00 2001 From: Lars Hadeler Date: Thu, 20 Nov 2025 14:41:12 +0100 Subject: [PATCH 2/4] Removed unnecessary commented-out lines. --- src/app/shared/log-in/methods/auth-methods.type.ts | 2 -- src/app/shared/log-in/methods/log-in.methods-decorator.ts | 2 -- 2 files changed, 4 deletions(-) diff --git a/src/app/shared/log-in/methods/auth-methods.type.ts b/src/app/shared/log-in/methods/auth-methods.type.ts index 48c46014b62..3b6fb6c0aea 100644 --- a/src/app/shared/log-in/methods/auth-methods.type.ts +++ b/src/app/shared/log-in/methods/auth-methods.type.ts @@ -1,8 +1,6 @@ import { LogInExternalProviderComponent } from './log-in-external-provider/log-in-external-provider.component'; -//import { LogInPasswordComponent } from './password/log-in-password.component'; //TODO: remove comment import { ThemedLogInPasswordComponent } from './password/themed-log-in-password.component'; export type AuthMethodTypeComponent = - //typeof LogInPasswordComponent | //TODO: remove comment typeof ThemedLogInPasswordComponent | typeof LogInExternalProviderComponent; diff --git a/src/app/shared/log-in/methods/log-in.methods-decorator.ts b/src/app/shared/log-in/methods/log-in.methods-decorator.ts index ef17d8f5897..14c009e190d 100644 --- a/src/app/shared/log-in/methods/log-in.methods-decorator.ts +++ b/src/app/shared/log-in/methods/log-in.methods-decorator.ts @@ -2,12 +2,10 @@ import { AuthMethodType } from '@dspace/core/auth/models/auth.method-type'; import { AuthMethodTypeComponent } from './auth-methods.type'; import { LogInExternalProviderComponent } from './log-in-external-provider/log-in-external-provider.component'; -//import { LogInPasswordComponent } from './password/log-in-password.component'; //TODO: remove comment import { ThemedLogInPasswordComponent } from './password/themed-log-in-password.component'; export const AUTH_METHOD_FOR_DECORATOR_MAP = new Map([ - //[AuthMethodType.Password, LogInPasswordComponent], //TODO: remove comment [AuthMethodType.Password, ThemedLogInPasswordComponent], [AuthMethodType.Shibboleth, LogInExternalProviderComponent], [AuthMethodType.Oidc, LogInExternalProviderComponent], From 861350343a1bf1089b0faaf335edc7d229574cec Mon Sep 17 00:00:00 2001 From: Lars Hadeler Date: Mon, 24 Nov 2025 16:56:31 +0100 Subject: [PATCH 3/4] Fixed log-in-container test by adding missing theme imports --- .../shared/log-in/container/log-in-container.component.spec.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/app/shared/log-in/container/log-in-container.component.spec.ts b/src/app/shared/log-in/container/log-in-container.component.spec.ts index ef936226d81..b3cdbc4d24e 100644 --- a/src/app/shared/log-in/container/log-in-container.component.spec.ts +++ b/src/app/shared/log-in/container/log-in-container.component.spec.ts @@ -25,6 +25,8 @@ import { createTestComponent } from '@dspace/core/testing/utils.test'; import { StoreModule } from '@ngrx/store'; import { TranslateModule } from '@ngx-translate/core'; +import { getMockThemeService } from '../../theme-support/test/theme-service.mock'; +import { ThemeService } from '../../theme-support/theme.service'; import { LogInContainerComponent } from './log-in-container.component'; describe('LogInContainerComponent', () => { @@ -56,6 +58,7 @@ describe('LogInContainerComponent', () => { { provide: AuthorizationDataService, useClass: AuthorizationDataServiceStub }, { provide: HardRedirectService, useValue: hardRedirectService }, LogInContainerComponent, + { provide: ThemeService, useValue: getMockThemeService() }, ], schemas: [ CUSTOM_ELEMENTS_SCHEMA, From 3153724fb20626af215f6b43acac7abd1da4ca5d Mon Sep 17 00:00:00 2001 From: Lars Hadeler Date: Thu, 27 Nov 2025 08:28:08 +0100 Subject: [PATCH 4/4] Removed unnecessary standalone declarations from components to ensure compatibility with Angular 20 update. --- .../log-in/methods/password/themed-log-in-password.component.ts | 1 - .../shared/log-in/methods/password/log-in-password.component.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/src/app/shared/log-in/methods/password/themed-log-in-password.component.ts b/src/app/shared/log-in/methods/password/themed-log-in-password.component.ts index 46b2fe132ed..dbac2122895 100644 --- a/src/app/shared/log-in/methods/password/themed-log-in-password.component.ts +++ b/src/app/shared/log-in/methods/password/themed-log-in-password.component.ts @@ -10,7 +10,6 @@ import { LogInPasswordComponent } from './log-in-password.component'; selector: 'ds-log-in-password', styleUrls: [], templateUrl: '../../../theme-support/themed.component.html', - standalone: true, imports: [ LogInPasswordComponent, ], diff --git a/src/themes/custom/app/shared/log-in/methods/password/log-in-password.component.ts b/src/themes/custom/app/shared/log-in/methods/password/log-in-password.component.ts index d012c39ea9a..21f08bde9d7 100644 --- a/src/themes/custom/app/shared/log-in/methods/password/log-in-password.component.ts +++ b/src/themes/custom/app/shared/log-in/methods/password/log-in-password.component.ts @@ -23,7 +23,6 @@ import { BrowserOnlyPipe } from '../../../../../../../app/shared/utils/browser-o // styleUrls: ['./log-in-password.component.scss'], styleUrls: ['../../../../../../../app/shared/log-in/methods/password/log-in-password.component.scss'], animations: [fadeOut], - standalone: true, imports: [ AsyncPipe, BrowserOnlyPipe,