diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type-workspace-editor.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type-workspace-editor.element.ts
index 2a9a386c38..2009d4860d 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type-workspace-editor.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/documents/document-types/workspace/document-type-workspace-editor.element.ts
@@ -8,6 +8,7 @@ import {
UMB_ICON_PICKER_MODAL,
} from '@umbraco-cms/backoffice/modal';
import { UMB_ENTITY_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/workspace';
+import { generateAlias } from '@umbraco-cms/backoffice/utils';
@customElement('umb-document-type-workspace-editor')
export class UmbDocumentTypeWorkspaceEditorElement extends UmbLitElement {
@state()
@@ -25,6 +26,9 @@ export class UmbDocumentTypeWorkspaceEditorElement extends UmbLitElement {
@state()
private _alias?: string;
+ @state()
+ private _aliasLocked = true;
+
private _modalContext?: UmbModalManagerContext;
constructor() {
@@ -48,18 +52,30 @@ export class UmbDocumentTypeWorkspaceEditorElement extends UmbLitElement {
}
// TODO. find a way where we don't have to do this for all workspaces.
- private _handleNameInput(event: UUIInputEvent) {
+ #onNameChange(event: UUIInputEvent) {
if (event instanceof UUIInputEvent) {
const target = event.composedPath()[0] as UUIInputElement;
if (typeof target?.value === 'string') {
+
+ const oldName = this._name;
+ const oldAlias = this._alias;
+ const newName = event.target.value.toString();
+ if (this._aliasLocked) {
+ const expectedOldAlias = generateAlias(oldName ?? '');
+ // Only update the alias if the alias matches a generated alias of the old name (otherwise the alias is considered one written by the user.)
+ if (expectedOldAlias === oldAlias) {
+ this.#workspaceContext?.setAlias(generateAlias(newName));
+ }
+ }
this.#workspaceContext?.setName(target.value);
}
}
}
+
// TODO. find a way where we don't have to do this for all workspaces.
- private _handleAliasInput(event: UUIInputEvent) {
+ #onAliasChange(event: UUIInputEvent) {
if (event instanceof UUIInputEvent) {
const target = event.composedPath()[0] as UUIInputElement;
@@ -70,6 +86,10 @@ export class UmbDocumentTypeWorkspaceEditorElement extends UmbLitElement {
event.stopPropagation();
}
+ #onToggleAliasLock() {
+ this._aliasLocked = !this._aliasLocked;
+ }
+
private async _handleIconClick() {
const modalContext = this._modalContext?.open(UMB_ICON_PICKER_MODAL, {
icon: this._icon,
@@ -90,10 +110,23 @@ export class UmbDocumentTypeWorkspaceEditorElement extends UmbLitElement {