diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/user-details/user-details.component.html b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/user-details/user-details.component.html index ffadbe1fe..0adcdcfab 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/user-details/user-details.component.html +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-user-dialog/user-details/user-details.component.html @@ -1,6 +1,6 @@
+ @if (!user()) { +
+ + {{ 'add-edit-user.form.send-email' | translate }} + +
+ } + @@ -48,14 +56,14 @@
can't disable RED_USER_ADMIN as long as RED_ADMIN is checked */ - private readonly _ROLE_REQUIREMENTS = { RED_MANAGER: 'RED_USER', RED_ADMIN: 'RED_USER_ADMIN' }; - @Input() user: User; - @Output() readonly toggleResetPassword = new EventEmitter(); - @Output() readonly closeDialog = new EventEmitter(); - @Output() readonly cancel = new EventEmitter(); +export class UserDetailsComponent extends BaseFormComponent implements OnInit { + user = input(); + readonly toggleResetPassword = output(); + readonly closeDialog = output(); + readonly cancel = output(); readonly ROLES = ['RED_USER', 'RED_MANAGER', 'RED_USER_ADMIN', 'RED_ADMIN']; readonly translations = rolesTranslations; + /** e.g. a RED_ADMIN is automatically a RED_USER_ADMIN => can't disable RED_USER_ADMIN as long as RED_ADMIN is checked */ + readonly #ROLE_REQUIREMENTS = { RED_MANAGER: 'RED_USER', RED_ADMIN: 'RED_USER_ADMIN' }; constructor( private readonly _formBuilder: UntypedFormBuilder, @@ -49,13 +49,17 @@ export class UserDetailsComponent extends BaseFormComponent implements OnChanges }, []); } - private get _rolesControls(): any { + get sendSetPasswordMail() { + return !this.form.controls.sendSetPasswordMail.value; + } + + get #rolesControls() { return this.ROLES.reduce( (prev, role) => ({ ...prev, [role]: [ { - value: this.user && this.user.has(role), + value: this.user() && this.user().has(role), disabled: this.shouldBeDisabled(role), }, ], @@ -64,20 +68,20 @@ export class UserDetailsComponent extends BaseFormComponent implements OnChanges ); } - ngOnChanges() { - this.form = this._getForm(); + ngOnInit() { + this.form = this.#getForm(); this.initialFormValue = this.form.getRawValue(); } shouldBeDisabled(role: string): boolean { - const isCurrentAdminUser = this.user && this.user.isAdmin && this.user.id === this._userService.currentUser.id; + const isCurrentAdminUser = this.user() && this.user().isAdmin && this.user().id === this._userService.currentUser.id; return ( // RED_ADMIN can't remove own RED_ADMIN role (role === 'RED_ADMIN' && isCurrentAdminUser) || // only RED_ADMINs can edit RED_ADMIN roles (role === 'RED_ADMIN' && !this._userService.currentUser.isAdmin) || - Object.keys(this._ROLE_REQUIREMENTS).reduce( - (value, key) => value || (role === this._ROLE_REQUIREMENTS[key] && this.user?.roles.includes(key)), + Object.keys(this.#ROLE_REQUIREMENTS).reduce( + (value, key) => value || (role === this.#ROLE_REQUIREMENTS[key] && this.user()?.roles.includes(key)), false, ) ); @@ -85,9 +89,13 @@ export class UserDetailsComponent extends BaseFormComponent implements OnChanges async save() { this._loadingService.start(); - const userData: IProfileUpdateRequest = { ...this.form.getRawValue(), roles: this.activeRoles }; + const userData: IProfileUpdateRequest = { + ...this.form.getRawValue(), + roles: this.activeRoles, + sendSetPasswordMail: this.sendSetPasswordMail, + }; - if (!this.user) { + if (!this.user()) { await firstValueFrom(this._userService.create(userData)) .then(() => { this.closeDialog.emit(true); @@ -101,22 +109,22 @@ export class UserDetailsComponent extends BaseFormComponent implements OnChanges this._loadingService.stop(); }); } else { - await firstValueFrom(this._userService.updateProfile(userData, this.user.id)); + await firstValueFrom(this._userService.updateProfile(userData, this.user().id)); this.closeDialog.emit(true); } } delete() { - this._dialogService.deleteUsers([this.user.id], () => this.closeDialog.emit(true)); + this._dialogService.deleteUsers([this.user().id], () => this.closeDialog.emit(true)); } setRolesRequirements(checked: boolean, role: string): void { - if (Object.keys(this._ROLE_REQUIREMENTS).includes(role)) { + if (Object.keys(this.#ROLE_REQUIREMENTS).includes(role)) { if (checked) { - this.form.patchValue({ [this._ROLE_REQUIREMENTS[role]]: true }); - this.form.controls[this._ROLE_REQUIREMENTS[role]].disable(); + this.form.patchValue({ [this.#ROLE_REQUIREMENTS[role]]: true }); + this.form.controls[this.#ROLE_REQUIREMENTS[role]].disable(); } else { - this.form.controls[this._ROLE_REQUIREMENTS[role]].enable(); + this.form.controls[this.#ROLE_REQUIREMENTS[role]].enable(); } } } @@ -127,18 +135,19 @@ export class UserDetailsComponent extends BaseFormComponent implements OnChanges return user.id === this._userService.currentUser.id || (userAdmin && !currentUserAdmin); } - private _getForm(): UntypedFormGroup { + #getForm(): UntypedFormGroup { return this._formBuilder.group({ - firstName: [this.user?.firstName, Validators.required], - lastName: [this.user?.lastName, Validators.required], + firstName: [this.user()?.firstName, Validators.required], + lastName: [this.user()?.lastName, Validators.required], email: [ { - value: this.user?.email, - disabled: !!this.user?.email, + value: this.user()?.email, + disabled: !!this.user()?.email, }, [Validators.required, Validators.email], ], - ...this._rolesControls, + ...this.#rolesControls, + sendSetPasswordMail: [false], }); } } diff --git a/apps/red-ui/src/assets/i18n/redact/de.json b/apps/red-ui/src/assets/i18n/redact/de.json index 2702382fd..725601f97 100644 --- a/apps/red-ui/src/assets/i18n/redact/de.json +++ b/apps/red-ui/src/assets/i18n/redact/de.json @@ -206,11 +206,14 @@ "generic": "Speichern des Benutzers fehlgeschlagen." }, "form": { + "account-setup": "User account setup", "email": "E-Mail", "first-name": "Vorname", "last-name": "Nachname", "reset-password": "Passwort zurücksetzen", - "role": "Rolle" + "role": "Rolle", + "send-email": "Do not send email requesting the user to set a password", + "send-email-explanation": "Select this option if you use SSO. Please note that you will need to inform the user directly." }, "title": "{type, select, edit{Benutzer bearbeiten} create{Neuen Benutzer erstellen} other{}}" }, diff --git a/apps/red-ui/src/assets/i18n/redact/en.json b/apps/red-ui/src/assets/i18n/redact/en.json index 1860da3cc..265f38568 100644 --- a/apps/red-ui/src/assets/i18n/redact/en.json +++ b/apps/red-ui/src/assets/i18n/redact/en.json @@ -206,11 +206,14 @@ "generic": "Failed to save user." }, "form": { + "account-setup": "User account setup", "email": "E-mail", "first-name": "First name", "last-name": "Last name", "reset-password": "Reset password", - "role": "Role" + "role": "Role", + "send-email": "Do not send email requesting the user to set a password", + "send-email-explanation": "Select this option if you use SSO. Please note that you will need to inform the user directly." }, "title": "{type, select, edit{Edit} create{Add new} other{}} user" }, diff --git a/apps/red-ui/src/assets/i18n/scm/de.json b/apps/red-ui/src/assets/i18n/scm/de.json index 7be5da4e8..e43c33760 100644 --- a/apps/red-ui/src/assets/i18n/scm/de.json +++ b/apps/red-ui/src/assets/i18n/scm/de.json @@ -206,11 +206,14 @@ "generic": "Benutzer konnte nicht gespeichert werden!" }, "form": { + "account-setup": "User account setup", "email": "E-Mail", "first-name": "Vorname", "last-name": "Nachname", "reset-password": "Passwort zurücksetzen", - "role": "Rolle" + "role": "Rolle", + "send-email": "Do not send email requesting the user to set a password", + "send-email-explanation": "Select this option if you use SSO. Please note that you will need to inform the user directly." }, "title": "{type, select, edit{Benutzer bearbeiten} create{Neuen Benutzer hinzufügen} other{}}" }, diff --git a/apps/red-ui/src/assets/i18n/scm/en.json b/apps/red-ui/src/assets/i18n/scm/en.json index 944a3a7cc..2ab27f327 100644 --- a/apps/red-ui/src/assets/i18n/scm/en.json +++ b/apps/red-ui/src/assets/i18n/scm/en.json @@ -206,11 +206,14 @@ "generic": "Failed to save user!" }, "form": { + "account-setup": "User account setup", "email": "E-mail", "first-name": "First name", "last-name": "Last name", "reset-password": "Reset password", - "role": "Role" + "role": "Role", + "send-email": "Do not send email requesting the user to set a password", + "send-email-explanation": "Select this option if you use SSO. Please note that you will need to inform the user directly." }, "title": "{type, select, edit{Edit} create{Add New} other{}} user" }, diff --git a/libs/common-ui b/libs/common-ui index f685955f8..efd7e2a08 160000 --- a/libs/common-ui +++ b/libs/common-ui @@ -1 +1 @@ -Subproject commit f685955f8f49529eef366f9d4c25c5bf510e6740 +Subproject commit efd7e2a085be179765fc2d20b40b7787dc161a5b