Skip to content

Commit 5b37f0e

Browse files
committed
fix: listen to the state of usernameIsEmail and display a username field
this also fixes an issue where you could not change the username/email
1 parent 370283b commit 5b37f0e

File tree

1 file changed

+57
-4
lines changed

1 file changed

+57
-4
lines changed

src/packages/user/user/workspace/components/user-workspace-profile-settings/user-workspace-profile-settings.element.ts

Lines changed: 57 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { UMB_USER_WORKSPACE_CONTEXT } from '../../user-workspace.context-token.js';
22
import type { UmbUserDetailModel } from '../../../types.js';
3-
import { html, customElement, state, ifDefined, css } from '@umbraco-cms/backoffice/external/lit';
3+
import { html, customElement, state, ifDefined, css, nothing } from '@umbraco-cms/backoffice/external/lit';
44
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
55
import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
66
import type { UmbChangeEvent } from '@umbraco-cms/backoffice/event';
@@ -11,6 +11,9 @@ export class UmbUserWorkspaceProfileSettingsElement extends UmbLitElement {
1111
@state()
1212
private _user?: UmbUserDetailModel;
1313

14+
@state()
15+
private _usernameIsEmail = true;
16+
1417
#userWorkspaceContext?: typeof UMB_USER_WORKSPACE_CONTEXT.TYPE;
1518

1619
constructor() {
@@ -19,9 +22,34 @@ export class UmbUserWorkspaceProfileSettingsElement extends UmbLitElement {
1922
this.consumeContext(UMB_USER_WORKSPACE_CONTEXT, (instance) => {
2023
this.#userWorkspaceContext = instance;
2124
this.observe(this.#userWorkspaceContext.data, (user) => (this._user = user), 'umbUserObserver');
25+
this.observe(
26+
this.#userWorkspaceContext.configRepository.part('usernameIsEmail'),
27+
(usernameIsEmail) => (this._usernameIsEmail = usernameIsEmail),
28+
'umbUsernameIsEmailObserver',
29+
);
2230
});
2331
}
2432

33+
#onEmailChange(event: UmbChangeEvent) {
34+
const target = event.target as HTMLInputElement;
35+
36+
if (typeof target?.value === 'string') {
37+
this.#userWorkspaceContext?.updateProperty('email', target.value);
38+
39+
if (this._usernameIsEmail) {
40+
this.#userWorkspaceContext?.updateProperty('userName', target.value);
41+
}
42+
}
43+
}
44+
45+
#onUsernameChange(event: UmbChangeEvent) {
46+
const target = event.target as HTMLInputElement;
47+
48+
if (typeof target?.value === 'string') {
49+
this.#userWorkspaceContext?.updateProperty('userName', target.value);
50+
}
51+
}
52+
2553
#onLanguageChange(event: UmbChangeEvent) {
2654
const target = event.target as UmbUiCultureInputElement;
2755

@@ -33,23 +61,48 @@ export class UmbUserWorkspaceProfileSettingsElement extends UmbLitElement {
3361
override render() {
3462
return html`<uui-box>
3563
<div slot="headline"><umb-localize key="user_profile">Profile</umb-localize></div>
36-
${this.#renderEmailProperty()} ${this.#renderUILanguageProperty()}
64+
${this.#renderEmailProperty()} ${this.#renderUsernameProperty()} ${this.#renderUILanguageProperty()}
3765
</uui-box>`;
3866
}
3967

4068
#renderEmailProperty() {
4169
return html`
42-
<umb-property-layout label="${this.localize.term('general_email')}">
70+
<umb-property-layout
71+
label="${this.localize.term('general_email')}"
72+
.description=${this.localize.term('user_emailDescription', this._usernameIsEmail)}>
4373
<uui-input
4474
slot="editor"
4575
name="email"
4676
label="${this.localize.term('general_email')}"
47-
readonly
77+
@change="${this.#onEmailChange}"
78+
required
79+
required-message=${this.localize.term('user_emailRequired')}
4880
value=${ifDefined(this._user?.email)}></uui-input>
4981
</umb-property-layout>
5082
`;
5183
}
5284

85+
#renderUsernameProperty() {
86+
if (this._usernameIsEmail) {
87+
return nothing;
88+
}
89+
90+
return html`
91+
<umb-property-layout
92+
label="${this.localize.term('user_loginname')}"
93+
description=${this.localize.term('user_loginnameDescription')}>
94+
<uui-input
95+
slot="editor"
96+
name="username"
97+
label="${this.localize.term('user_loginname')}"
98+
@change="${this.#onUsernameChange}"
99+
required
100+
required-message=${this.localize.term('user_loginnameRequired')}
101+
value=${ifDefined(this._user?.userName)}></uui-input>
102+
</umb-property-layout>
103+
`;
104+
}
105+
53106
#renderUILanguageProperty() {
54107
return html`
55108
<umb-property-layout

0 commit comments

Comments
 (0)