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