From 15cc85b9a8048c28f2e27b8ef02202eeef7a1fe1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Wed, 7 Jun 2023 16:45:27 +0200 Subject: [PATCH] alias generation on document workspace editor --- .../document-type-workspace-editor.element.ts | 56 ++++++++++++++++--- 1 file changed, 47 insertions(+), 9 deletions(-) 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 { - - + + + + +
''} id="alias-lock" slot="prepend"> + +
+
+ +
@@ -134,15 +167,20 @@ export class UmbDocumentTypeWorkspaceEditorElement extends UmbLitElement { align-items: center; } - #alias { - height: calc(100% - 2px); - --uui-input-border-width: 0; - --uui-button-height: calc(100% -2px); + #alias-lock { + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + } + #alias-lock uui-icon { + margin-bottom: 2px; } #icon { font-size: calc(var(--uui-size-layout-3) / 2); } + `, ]; }