diff --git a/src/packages/core/workspace/components/index.ts b/src/packages/core/workspace/components/index.ts index f851e0b3cb..4c92b26e52 100644 --- a/src/packages/core/workspace/components/index.ts +++ b/src/packages/core/workspace/components/index.ts @@ -4,4 +4,5 @@ export * from './workspace-action/index.js'; export * from './workspace-editor/index.js'; export * from './workspace-entity-action-menu/index.js'; export * from './workspace-footer/index.js'; +export * from './workspace-header-name-editable/index.js'; export * from './workspace-split-view/index.js'; diff --git a/src/packages/core/workspace/components/workspace-header-name-editable/index.ts b/src/packages/core/workspace/components/workspace-header-name-editable/index.ts new file mode 100644 index 0000000000..2c4508868d --- /dev/null +++ b/src/packages/core/workspace/components/workspace-header-name-editable/index.ts @@ -0,0 +1 @@ +export * from './workspace-header-name-editable.element.js'; diff --git a/src/packages/core/workspace/components/workspace-header-name-editable/workspace-header-name-editable.element.ts b/src/packages/core/workspace/components/workspace-header-name-editable/workspace-header-name-editable.element.ts new file mode 100644 index 0000000000..8ad2277539 --- /dev/null +++ b/src/packages/core/workspace/components/workspace-header-name-editable/workspace-header-name-editable.element.ts @@ -0,0 +1,76 @@ +import { UMB_NAMABLE_WORKSPACE_CONTEXT } from '../../namable/index.js'; +import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; +import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; +import { umbFocus, UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import type { UUIInputElement } from '@umbraco-cms/backoffice/external/uui'; +import { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; +import { umbBindToValidation } from '@umbraco-cms/backoffice/validation'; + +@customElement('umb-workspace-header-name-editable') +export class UmbWorkspaceHeaderNameEditableElement extends UmbLitElement { + @state() + private _name = ''; + + #workspaceContext?: typeof UMB_NAMABLE_WORKSPACE_CONTEXT.TYPE; + + constructor() { + super(); + + this.consumeContext(UMB_NAMABLE_WORKSPACE_CONTEXT, (workspaceContext) => { + this.#workspaceContext = workspaceContext; + this.#observeName(); + }); + } + + #observeName() { + if (!this.#workspaceContext) return; + this.observe( + this.#workspaceContext.name, + (name) => { + if (name !== this._name) { + this._name = name ?? ''; + } + }, + 'observeWorkspaceName', + ); + } + + #onNameInput(event: UUIInputEvent) { + if (event instanceof UUIInputEvent) { + const target = event.composedPath()[0] as UUIInputElement; + + if (typeof target?.value === 'string') { + this.#workspaceContext?.setName(target.value); + } + } + } + + override render() { + return html``; + } + + static override styles = [ + UmbTextStyles, + css` + :host { + display: contents; + } + + #nameInput { + flex: 1 1 auto; + } + `, + ]; +} + +declare global { + interface HTMLElementTagNameMap { + 'umb-workspace-header-name-editable': UmbWorkspaceHeaderNameEditableElement; + } +} diff --git a/src/packages/core/workspace/namable/index.ts b/src/packages/core/workspace/namable/index.ts new file mode 100644 index 0000000000..a95eb59eab --- /dev/null +++ b/src/packages/core/workspace/namable/index.ts @@ -0,0 +1,2 @@ +export * from './namable-workspace-context.interface.js'; +export * from './namable-workspace.context-token.js'; diff --git a/src/packages/core/workspace/namable/namable-workspace-context.interface.ts b/src/packages/core/workspace/namable/namable-workspace-context.interface.ts new file mode 100644 index 0000000000..18863e7619 --- /dev/null +++ b/src/packages/core/workspace/namable/namable-workspace-context.interface.ts @@ -0,0 +1,8 @@ +import type { UmbWorkspaceContext } from '../workspace-context.interface.js'; +import type { Observable } from '@umbraco-cms/backoffice/external/rxjs'; + +export interface UmbNamableWorkspaceContext extends UmbWorkspaceContext { + name: Observable; + getName(): string | undefined; + setName(name: string): void; +} diff --git a/src/packages/core/workspace/namable/namable-workspace.context-token.ts b/src/packages/core/workspace/namable/namable-workspace.context-token.ts new file mode 100644 index 0000000000..60932ba7b9 --- /dev/null +++ b/src/packages/core/workspace/namable/namable-workspace.context-token.ts @@ -0,0 +1,9 @@ +import type { UmbWorkspaceContext } from '../workspace-context.interface.js'; +import type { UmbNamableWorkspaceContext } from './namable-workspace-context.interface.js'; +import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; + +export const UMB_NAMABLE_WORKSPACE_CONTEXT = new UmbContextToken( + 'UmbWorkspaceContext', + undefined, + (context): context is UmbNamableWorkspaceContext => (context as any).getName !== undefined, +); diff --git a/src/packages/data-type/tree/folder/workspace/data-type-folder-editor.element.ts b/src/packages/data-type/tree/folder/workspace/data-type-folder-editor.element.ts index aaf4f175f7..65046d2744 100644 --- a/src/packages/data-type/tree/folder/workspace/data-type-folder-editor.element.ts +++ b/src/packages/data-type/tree/folder/workspace/data-type-folder-editor.element.ts @@ -1,69 +1,17 @@ -import { UMB_DATA_TYPE_FOLDER_WORKSPACE_ALIAS } from './constants.js'; -import { UMB_DATA_TYPE_FOLDER_WORKSPACE_CONTEXT } from './data-type-folder.workspace.context-token.js'; -import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; -import type { UUIInputElement } from '@umbraco-cms/backoffice/external/uui'; -import { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; -import { umbFocus, UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { html, customElement } from '@umbraco-cms/backoffice/external/lit'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { umbBindToValidation } from '@umbraco-cms/backoffice/validation'; const elementName = 'umb-data-type-folder-workspace-editor'; @customElement(elementName) export class UmbDataTypeFolderWorkspaceEditorElement extends UmbLitElement { - @state() - private _name = ''; - - #workspaceContext?: typeof UMB_DATA_TYPE_FOLDER_WORKSPACE_CONTEXT.TYPE; - - constructor() { - super(); - - this.consumeContext(UMB_DATA_TYPE_FOLDER_WORKSPACE_CONTEXT, (workspaceContext) => { - this.#workspaceContext = workspaceContext; - this.#observeName(); - }); - } - - #observeName() { - if (!this.#workspaceContext) return; - this.observe(this.#workspaceContext.name, (name) => { - if (name !== this._name) { - this._name = name ?? ''; - } - }); - } - - #handleInput(event: UUIInputEvent) { - if (event instanceof UUIInputEvent) { - const target = event.composedPath()[0] as UUIInputElement; - - if (typeof target?.value === 'string') { - this.#workspaceContext?.setName(target.value); - } - } - } - override render() { - return html` - + return html` + `; } - static override styles = [ - UmbTextStyles, - css` - #nameInput { - flex: 1 1 auto; - } - `, - ]; + static override styles = [UmbTextStyles]; } export { UmbDataTypeFolderWorkspaceEditorElement as element }; diff --git a/src/packages/data-type/tree/folder/workspace/data-type-folder-workspace.context.ts b/src/packages/data-type/tree/folder/workspace/data-type-folder-workspace.context.ts index c9e7638018..0930ae60e5 100644 --- a/src/packages/data-type/tree/folder/workspace/data-type-folder-workspace.context.ts +++ b/src/packages/data-type/tree/folder/workspace/data-type-folder-workspace.context.ts @@ -37,13 +37,22 @@ export class UmbDataTypeFolderWorkspaceContext } /** - * @description Set the name of the script + * @description Set the name of the data type folder * @param {string} value - * @memberof UmbScriptWorkspaceContext + * @memberof UmbDataTypeFolderWorkspaceContext */ public setName(value: string) { this._data.updateCurrent({ name: value }); } + + /** + * @description Get the name of the data type folder + * @returns {string} + * @memberof UmbDataTypeFolderWorkspaceContext + */ + public getName() { + return this._data.getCurrent()?.name; + } } export { UmbDataTypeFolderWorkspaceContext as api }; diff --git a/src/packages/data-type/workspace/data-type-workspace-editor.element.ts b/src/packages/data-type/workspace/data-type-workspace-editor.element.ts index 0f47767628..11473eb31d 100644 --- a/src/packages/data-type/workspace/data-type-workspace-editor.element.ts +++ b/src/packages/data-type/workspace/data-type-workspace-editor.element.ts @@ -1,65 +1,15 @@ -import { UMB_DATA_TYPE_WORKSPACE_CONTEXT } from './data-type-workspace.context-token.js'; -import type { UUIInputElement } from '@umbraco-cms/backoffice/external/uui'; -import { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; -import { css, html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit'; -import { UmbLitElement, umbFocus } from '@umbraco-cms/backoffice/lit-element'; -import type { ManifestWorkspace } from '@umbraco-cms/backoffice/workspace'; -import { umbBindToValidation } from '@umbraco-cms/backoffice/validation'; +import { css, html, customElement } from '@umbraco-cms/backoffice/external/lit'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; /** * @element umb-data-type-workspace-editor * @description - Element for displaying the Data Type Workspace edit route. */ @customElement('umb-data-type-workspace-editor') export class UmbDataTypeWorkspaceEditorElement extends UmbLitElement { - @property({ attribute: false }) - manifest?: ManifestWorkspace; - - @state() - private _dataTypeName = ''; - - #workspaceContext?: typeof UMB_DATA_TYPE_WORKSPACE_CONTEXT.TYPE; - - constructor() { - super(); - - this.consumeContext(UMB_DATA_TYPE_WORKSPACE_CONTEXT, (workspaceContext) => { - this.#workspaceContext = workspaceContext; - this.#workspaceContext.createPropertyDatasetContext(this); - this.#observeName(); - }); - } - - #observeName() { - if (!this.#workspaceContext) return; - this.observe(this.#workspaceContext.name, (dataTypeName) => { - if (dataTypeName !== this._dataTypeName) { - this._dataTypeName = dataTypeName ?? ''; - } - }); - } - - // TODO. find a way where we don't have to do this for all Workspaces. - #handleInput(event: UUIInputEvent) { - if (event instanceof UUIInputEvent) { - const target = event.composedPath()[0] as UUIInputElement; - - if (typeof target?.value === 'string') { - this.#workspaceContext?.setName(target.value); - } - } - } - override render() { return html` - + `; } @@ -71,10 +21,6 @@ export class UmbDataTypeWorkspaceEditorElement extends UmbLitElement { width: 100%; height: 100%; } - - #nameInput { - flex: 1 1 auto; - } `, ]; } diff --git a/src/packages/dictionary/workspace/dictionary-workspace-editor.element.ts b/src/packages/dictionary/workspace/dictionary-workspace-editor.element.ts index 3a6b473f77..4a6fdadbc4 100644 --- a/src/packages/dictionary/workspace/dictionary-workspace-editor.element.ts +++ b/src/packages/dictionary/workspace/dictionary-workspace-editor.element.ts @@ -1,68 +1,15 @@ -import { UMB_DICTIONARY_WORKSPACE_CONTEXT } from './dictionary-workspace.context-token.js'; -import type { UUIInputElement } from '@umbraco-cms/backoffice/external/uui'; -import { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; -import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; -import { UmbLitElement, umbFocus } from '@umbraco-cms/backoffice/lit-element'; +import { html, customElement } from '@umbraco-cms/backoffice/external/lit'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; @customElement('umb-dictionary-workspace-editor') export class UmbDictionaryWorkspaceEditorElement extends UmbLitElement { - @state() - private _name?: string | null = ''; - - #workspaceContext?: typeof UMB_DICTIONARY_WORKSPACE_CONTEXT.TYPE; - - constructor() { - super(); - - this.consumeContext(UMB_DICTIONARY_WORKSPACE_CONTEXT, (instance) => { - this.#workspaceContext = instance; - this.#observeName(); - }); - } - - #observeName() { - if (!this.#workspaceContext) return; - this.observe(this.#workspaceContext.name, (name) => (this._name = name)); - } - - // TODO. find a way where we don't have to do this for all workspaces. - #handleInput(event: UUIInputEvent) { - if (event instanceof UUIInputEvent) { - const target = event.composedPath()[0] as UUIInputElement; - - if (typeof target?.value === 'string') { - this.#workspaceContext?.setName(target.value); - } - } - } - override render() { return html` - - + + `; } - - static override styles = [ - css` - #header { - display: flex; - gap: var(--uui-size-space-4); - width: 100%; - } - uui-input { - width: 100%; - } - `, - ]; } export default UmbDictionaryWorkspaceEditorElement; diff --git a/src/packages/dictionary/workspace/dictionary-workspace.context.ts b/src/packages/dictionary/workspace/dictionary-workspace.context.ts index 3f709f8bbf..e85b75a67f 100644 --- a/src/packages/dictionary/workspace/dictionary-workspace.context.ts +++ b/src/packages/dictionary/workspace/dictionary-workspace.context.ts @@ -56,6 +56,10 @@ export class UmbDictionaryWorkspaceContext this._data.updateCurrent({ name }); } + getName() { + return this._data.getCurrent()?.name; + } + setPropertyValue(isoCode: string, translation: string) { const currentData = this._data.getCurrent(); if (!currentData) return; diff --git a/src/packages/documents/document-blueprints/tree/folder/workspace/document-blueprint-folder-editor.element.ts b/src/packages/documents/document-blueprints/tree/folder/workspace/document-blueprint-folder-editor.element.ts index 1e5bef9c0c..bbbbd8dd17 100644 --- a/src/packages/documents/document-blueprints/tree/folder/workspace/document-blueprint-folder-editor.element.ts +++ b/src/packages/documents/document-blueprints/tree/folder/workspace/document-blueprint-folder-editor.element.ts @@ -1,68 +1,17 @@ -import { UMB_DOCUMENT_BLUEPRINT_FOLDER_WORKSPACE_CONTEXT } from './document-blueprint-folder.workspace.context-token.js'; -import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; -import type { UUIInputElement } from '@umbraco-cms/backoffice/external/uui'; -import { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; -import { umbFocus, UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { html, customElement } from '@umbraco-cms/backoffice/external/lit'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { umbBindToValidation } from '@umbraco-cms/backoffice/validation'; const elementName = 'umb-document-blueprint-folder-workspace-editor'; @customElement(elementName) export class UmbDocumentBlueprintFolderWorkspaceEditorElement extends UmbLitElement { - @state() - private _name = ''; - - #workspaceContext?: typeof UMB_DOCUMENT_BLUEPRINT_FOLDER_WORKSPACE_CONTEXT.TYPE; - - constructor() { - super(); - - this.consumeContext(UMB_DOCUMENT_BLUEPRINT_FOLDER_WORKSPACE_CONTEXT, (workspaceContext) => { - this.#workspaceContext = workspaceContext; - this.#observeName(); - }); - } - - #observeName() { - if (!this.#workspaceContext) return; - this.observe(this.#workspaceContext.name, (name) => { - if (name !== this._name) { - this._name = name ?? ''; - } - }); - } - - #handleInput(event: UUIInputEvent) { - if (event instanceof UUIInputEvent) { - const target = event.composedPath()[0] as UUIInputElement; - - if (typeof target?.value === 'string') { - this.#workspaceContext?.setName(target.value); - } - } - } - override render() { return html` - + `; } - static override styles = [ - UmbTextStyles, - css` - #nameInput { - flex: 1 1 auto; - } - `, - ]; + static override styles = [UmbTextStyles]; } export { UmbDocumentBlueprintFolderWorkspaceEditorElement as element }; diff --git a/src/packages/documents/document-blueprints/tree/folder/workspace/document-blueprint-folder-workspace.context.ts b/src/packages/documents/document-blueprints/tree/folder/workspace/document-blueprint-folder-workspace.context.ts index 2fffbd70b1..34c64aa011 100644 --- a/src/packages/documents/document-blueprints/tree/folder/workspace/document-blueprint-folder-workspace.context.ts +++ b/src/packages/documents/document-blueprints/tree/folder/workspace/document-blueprint-folder-workspace.context.ts @@ -40,13 +40,22 @@ export class UmbDocumentBlueprintFolderWorkspaceContext } /** - * @description Set the name of the script + * @description Set the name of the document blueprint folder * @param {string} value - * @memberof UmbScriptWorkspaceContext + * @memberof UmbDocumentBlueprintFolderWorkspaceContext */ public setName(value: string) { this._data.updateCurrent({ name: value }); } + + /** + * @description Get the name of the document blueprint folder + * @returns {string} + * @memberof UmbDocumentBlueprintFolderWorkspaceContext + */ + public getName() { + return this._data.getCurrent()?.name; + } } export { UmbDocumentBlueprintFolderWorkspaceContext as api }; diff --git a/src/packages/documents/document-types/tree/folder/workspace/document-type-folder-editor.element.ts b/src/packages/documents/document-types/tree/folder/workspace/document-type-folder-editor.element.ts index 2e548d984f..19803c6715 100644 --- a/src/packages/documents/document-types/tree/folder/workspace/document-type-folder-editor.element.ts +++ b/src/packages/documents/document-types/tree/folder/workspace/document-type-folder-editor.element.ts @@ -1,69 +1,17 @@ -import { UMB_DOCUMENT_TYPE_FOLDER_WORKSPACE_ALIAS } from './constants.js'; -import { UMB_DOCUMENT_TYPE_FOLDER_WORKSPACE_CONTEXT } from './document-type-folder.workspace.context-token.js'; -import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; -import type { UUIInputElement } from '@umbraco-cms/backoffice/external/uui'; -import { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; -import { umbFocus, UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { html, customElement } from '@umbraco-cms/backoffice/external/lit'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { umbBindToValidation } from '@umbraco-cms/backoffice/validation'; const elementName = 'umb-document-type-folder-workspace-editor'; @customElement(elementName) export class UmbDocumentTypeFolderWorkspaceEditorElement extends UmbLitElement { - @state() - private _name = ''; - - #workspaceContext?: typeof UMB_DOCUMENT_TYPE_FOLDER_WORKSPACE_CONTEXT.TYPE; - - constructor() { - super(); - - this.consumeContext(UMB_DOCUMENT_TYPE_FOLDER_WORKSPACE_CONTEXT, (workspaceContext) => { - this.#workspaceContext = workspaceContext; - this.#observeName(); - }); - } - - #observeName() { - if (!this.#workspaceContext) return; - this.observe(this.#workspaceContext.name, (name) => { - if (name !== this._name) { - this._name = name ?? ''; - } - }); - } - - #handleInput(event: UUIInputEvent) { - if (event instanceof UUIInputEvent) { - const target = event.composedPath()[0] as UUIInputElement; - - if (typeof target?.value === 'string') { - this.#workspaceContext?.setName(target.value); - } - } - } - override render() { - return html` - + return html` + `; } - static override styles = [ - UmbTextStyles, - css` - #nameInput { - flex: 1 1 auto; - } - `, - ]; + static override styles = [UmbTextStyles]; } export { UmbDocumentTypeFolderWorkspaceEditorElement as element }; diff --git a/src/packages/documents/document-types/tree/folder/workspace/document-type-folder-workspace.context.ts b/src/packages/documents/document-types/tree/folder/workspace/document-type-folder-workspace.context.ts index 7055f03015..81ee4598ca 100644 --- a/src/packages/documents/document-types/tree/folder/workspace/document-type-folder-workspace.context.ts +++ b/src/packages/documents/document-types/tree/folder/workspace/document-type-folder-workspace.context.ts @@ -40,13 +40,22 @@ export class UmbDocumentTypeFolderWorkspaceContext } /** - * @description Set the name of the script + * @description Set the name of the document type folder * @param {string} value - * @memberof UmbScriptWorkspaceContext + * @memberof UmbDocumentTypeFolderWorkspaceContext */ public setName(value: string) { this._data.updateCurrent({ name: value }); } + + /** + * @description Get the name of the document type folder + * @returns {string} + * @memberof UmbDocumentTypeFolderWorkspaceContext + */ + public getName() { + return this._data.getCurrent()?.name; + } } export { UmbDocumentTypeFolderWorkspaceContext as api }; diff --git a/src/packages/language/workspace/language/language-workspace-editor.element.ts b/src/packages/language/workspace/language/language-workspace-editor.element.ts index 3e83ea0c08..786869eb54 100644 --- a/src/packages/language/workspace/language/language-workspace-editor.element.ts +++ b/src/packages/language/workspace/language/language-workspace-editor.element.ts @@ -1,17 +1,11 @@ -import type { UmbLanguageDetailModel } from '../../types.js'; import { UMB_LANGUAGE_WORKSPACE_CONTEXT } from './language-workspace.context-token.js'; -import type { UUIInputElement } from '@umbraco-cms/backoffice/external/uui'; -import { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; -import { css, html, customElement, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; -import { UmbLitElement, umbFocus } from '@umbraco-cms/backoffice/lit-element'; +import { html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; @customElement('umb-language-workspace-editor') export class UmbLanguageWorkspaceEditorElement extends UmbLitElement { #workspaceContext?: typeof UMB_LANGUAGE_WORKSPACE_CONTEXT.TYPE; - @state() - _language?: UmbLanguageDetailModel; - @state() _isNew?: boolean; @@ -20,73 +14,21 @@ export class UmbLanguageWorkspaceEditorElement extends UmbLitElement { this.consumeContext(UMB_LANGUAGE_WORKSPACE_CONTEXT, (context) => { this.#workspaceContext = context; - this.#observeData(); + this.observe(this.#workspaceContext.isNew, (isNew) => (this._isNew = isNew)); }); } - #observeData() { - if (!this.#workspaceContext) return; - this.observe(this.#workspaceContext.data, (data) => { - this._language = data; - }); - this.observe(this.#workspaceContext.isNew, (isNew) => { - this._isNew = isNew; - }); - } - - #handleInput(event: UUIInputEvent) { - if (event instanceof UUIInputEvent) { - const target = event.composedPath()[0] as UUIInputElement; - - if (typeof target?.value === 'string') { - this.#workspaceContext?.setName(target.value); - } - } - } - override render() { return html` - + ${this._isNew + ? html`

Add language

` + : html``}
`; } - static override styles = [ - UmbTextStyles, - css` - #header { - display: flex; - gap: var(--uui-size-space-4); - width: 100%; - } - - uui-input { - width: 100%; - } - - strong { - display: flex; - align-items: center; - } - - #footer-into { - padding: 0 var(--uui-size-layout-1); - } - - uui-input:not(:focus) { - border: 1px solid transparent; - } - `, - ]; + static override styles = [UmbTextStyles]; } export default UmbLanguageWorkspaceEditorElement; diff --git a/src/packages/language/workspace/language/language-workspace.context.ts b/src/packages/language/workspace/language/language-workspace.context.ts index ca4456fea0..a0c0db4d18 100644 --- a/src/packages/language/workspace/language/language-workspace.context.ts +++ b/src/packages/language/workspace/language/language-workspace.context.ts @@ -55,6 +55,10 @@ export class UmbLanguageWorkspaceContext this._data.updateCurrent({ name }); } + getName() { + return this._data.getCurrent()?.name; + } + setCulture(unique: string) { this._data.updateCurrent({ unique }); } diff --git a/src/packages/media/media-types/tree/folder/workspace/media-type-folder-editor.element.ts b/src/packages/media/media-types/tree/folder/workspace/media-type-folder-editor.element.ts index 8a3f7b50ec..1fd8798b49 100644 --- a/src/packages/media/media-types/tree/folder/workspace/media-type-folder-editor.element.ts +++ b/src/packages/media/media-types/tree/folder/workspace/media-type-folder-editor.element.ts @@ -1,69 +1,17 @@ -import { UMB_MEDIA_TYPE_FOLDER_WORKSPACE_ALIAS } from './constants.js'; -import { UMB_MEDIA_TYPE_FOLDER_WORKSPACE_CONTEXT } from './media-type-folder.workspace.context-token.js'; -import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; -import type { UUIInputElement } from '@umbraco-cms/backoffice/external/uui'; -import { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; -import { umbFocus, UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { html, customElement } from '@umbraco-cms/backoffice/external/lit'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { umbBindToValidation } from '@umbraco-cms/backoffice/validation'; const elementName = 'umb-media-type-folder-workspace-editor'; @customElement(elementName) export class UmbMediaTypeFolderWorkspaceEditorElement extends UmbLitElement { - @state() - private _name = ''; - - #workspaceContext?: typeof UMB_MEDIA_TYPE_FOLDER_WORKSPACE_CONTEXT.TYPE; - - constructor() { - super(); - - this.consumeContext(UMB_MEDIA_TYPE_FOLDER_WORKSPACE_CONTEXT, (workspaceContext) => { - this.#workspaceContext = workspaceContext; - this.#observeName(); - }); - } - - #observeName() { - if (!this.#workspaceContext) return; - this.observe(this.#workspaceContext.name, (name) => { - if (name !== this._name) { - this._name = name ?? ''; - } - }); - } - - #handleInput(event: UUIInputEvent) { - if (event instanceof UUIInputEvent) { - const target = event.composedPath()[0] as UUIInputElement; - - if (typeof target?.value === 'string') { - this.#workspaceContext?.setName(target.value); - } - } - } - override render() { - return html` - + return html` + `; } - static override styles = [ - UmbTextStyles, - css` - #nameInput { - flex: 1 1 auto; - } - `, - ]; + static override styles = [UmbTextStyles]; } export { UmbMediaTypeFolderWorkspaceEditorElement as element }; diff --git a/src/packages/media/media-types/tree/folder/workspace/media-type-folder-workspace.context.ts b/src/packages/media/media-types/tree/folder/workspace/media-type-folder-workspace.context.ts index 01f74a2969..c44aee3ee1 100644 --- a/src/packages/media/media-types/tree/folder/workspace/media-type-folder-workspace.context.ts +++ b/src/packages/media/media-types/tree/folder/workspace/media-type-folder-workspace.context.ts @@ -37,13 +37,22 @@ export class UmbMediaTypeFolderWorkspaceContext } /** - * @description Set the name of the script + * @description Set the name of the media type folder * @param {string} value - * @memberof UmbScriptWorkspaceContext + * @memberof UmbMediaTypeFolderWorkspaceContext */ public setName(value: string) { this._data.updateCurrent({ name: value }); } + + /** + * @description Get the name of the media type folder + * @returns {string} + * @memberof UmbMediaTypeFolderWorkspaceContext + */ + public getName() { + return this._data.getCurrent()?.name; + } } export { UmbMediaTypeFolderWorkspaceContext as api }; diff --git a/src/packages/members/member-group/workspace/member-group/member-group-workspace-editor.element.ts b/src/packages/members/member-group/workspace/member-group/member-group-workspace-editor.element.ts index 1e5fbae975..9de32097d1 100644 --- a/src/packages/members/member-group/workspace/member-group/member-group-workspace-editor.element.ts +++ b/src/packages/members/member-group/workspace/member-group/member-group-workspace-editor.element.ts @@ -1,20 +1,11 @@ import { UMB_MEMBER_GROUP_ROOT_WORKSPACE_PATH } from '../../paths.js'; import { UMB_MEMBER_GROUP_WORKSPACE_CONTEXT } from './member-group-workspace.context-token.js'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; -import { css, html, customElement, property, state, nothing } from '@umbraco-cms/backoffice/external/lit'; -import { UmbLitElement, umbFocus } from '@umbraco-cms/backoffice/lit-element'; -import type { ManifestWorkspace } from '@umbraco-cms/backoffice/workspace'; -import type { UUIInputElement } from '@umbraco-cms/backoffice/external/uui'; -import { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; +import { css, html, customElement, state, nothing } from '@umbraco-cms/backoffice/external/lit'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; @customElement('umb-member-group-workspace-editor') export class UmbMemberGroupWorkspaceEditorElement extends UmbLitElement { - @property({ attribute: false }) - manifest?: ManifestWorkspace; - - @state() - private _name = ''; - @state() private _unique?: string; @@ -26,22 +17,10 @@ export class UmbMemberGroupWorkspaceEditorElement extends UmbLitElement { this.consumeContext(UMB_MEMBER_GROUP_WORKSPACE_CONTEXT, (workspaceContext) => { this.#workspaceContext = workspaceContext; if (!this.#workspaceContext) return; - this.observe(this.#workspaceContext.name, (name) => (this._name = name ?? '')); this.observe(this.#workspaceContext.unique, (unique) => (this._unique = unique ?? undefined)); }); } - // TODO. find a way where we don't have to do this for all Workspaces. - #onInput(event: UUIInputEvent) { - if (event instanceof UUIInputEvent) { - const target = event.composedPath()[0] as UUIInputElement; - - if (typeof target?.value === 'string') { - this.#workspaceContext?.setName(target.value); - } - } - } - #renderActions() { // Actions only works if we have a valid unique. if (!this._unique || this.#workspaceContext?.getIsNew()) return nothing; @@ -52,10 +31,8 @@ export class UmbMemberGroupWorkspaceEditorElement extends UmbLitElement { override render() { return html` + ${this.#renderActions()} - `; @@ -69,14 +46,6 @@ export class UmbMemberGroupWorkspaceEditorElement extends UmbLitElement { width: 100%; height: 100%; } - #header { - display: flex; - align-items: center; - width: 100%; - } - uui-input { - width: 100%; - } `, ]; } diff --git a/src/packages/templating/partial-views/tree/folder/workspace/partial-view-folder-workspace-editor.element.ts b/src/packages/templating/partial-views/tree/folder/workspace/partial-view-folder-workspace-editor.element.ts index 58cbe9a003..5a796bd923 100644 --- a/src/packages/templating/partial-views/tree/folder/workspace/partial-view-folder-workspace-editor.element.ts +++ b/src/packages/templating/partial-views/tree/folder/workspace/partial-view-folder-workspace-editor.element.ts @@ -23,11 +23,15 @@ export class UmbPartialViewFolderWorkspaceEditorElement extends UmbLitElement { #observeName() { if (!this.#workspaceContext) return; - this.observe(this.#workspaceContext.name, (name) => { - if (name !== this._name) { - this._name = name ?? ''; - } - }); + this.observe( + this.#workspaceContext.name, + (name) => { + if (name !== this._name) { + this._name = name ?? ''; + } + }, + 'observeName', + ); } override render() { diff --git a/src/packages/templating/scripts/tree/folder/workspace/script-folder-workspace-editor.element.ts b/src/packages/templating/scripts/tree/folder/workspace/script-folder-workspace-editor.element.ts index feec527561..9cd7909d5a 100644 --- a/src/packages/templating/scripts/tree/folder/workspace/script-folder-workspace-editor.element.ts +++ b/src/packages/templating/scripts/tree/folder/workspace/script-folder-workspace-editor.element.ts @@ -23,11 +23,15 @@ export class UmbScriptFolderWorkspaceEditorElement extends UmbLitElement { #observeName() { if (!this.#workspaceContext) return; - this.observe(this.#workspaceContext.name, (name) => { - if (name !== this._name) { - this._name = name ?? ''; - } - }); + this.observe( + this.#workspaceContext.name, + (name) => { + if (name !== this._name) { + this._name = name ?? ''; + } + }, + 'observeName', + ); } override render() { diff --git a/src/packages/templating/stylesheets/tree/folder/workspace/stylesheet-folder-workspace-editor.element.ts b/src/packages/templating/stylesheets/tree/folder/workspace/stylesheet-folder-workspace-editor.element.ts index d6b1397c5c..d79af43294 100644 --- a/src/packages/templating/stylesheets/tree/folder/workspace/stylesheet-folder-workspace-editor.element.ts +++ b/src/packages/templating/stylesheets/tree/folder/workspace/stylesheet-folder-workspace-editor.element.ts @@ -23,11 +23,15 @@ export class UmbStylesheetFolderWorkspaceEditorElement extends UmbLitElement { #observeName() { if (!this.#workspaceContext) return; - this.observe(this.#workspaceContext.name, (name) => { - if (name !== this._name) { - this._name = name ?? ''; - } - }); + this.observe( + this.#workspaceContext.name, + (name) => { + if (name !== this._name) { + this._name = name ?? ''; + } + }, + 'observeName', + ); } override render() { diff --git a/src/packages/user/user/workspace/user/user-workspace-editor.element.ts b/src/packages/user/user/workspace/user/user-workspace-editor.element.ts index b65ebebf63..10afe3c6b5 100644 --- a/src/packages/user/user/workspace/user/user-workspace-editor.element.ts +++ b/src/packages/user/user/workspace/user/user-workspace-editor.element.ts @@ -3,10 +3,8 @@ import { UMB_USER_ROOT_WORKSPACE_PATH } from '../../paths.js'; import type { UmbUserWorkspaceContext } from './user-workspace.context.js'; import { UMB_USER_WORKSPACE_CONTEXT } from './user-workspace.context-token.js'; import { UMB_USER_WORKSPACE_ALIAS } from './constants.js'; -import type { UUIInputElement } from '@umbraco-cms/backoffice/external/uui'; -import { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; import { css, html, nothing, customElement, state } from '@umbraco-cms/backoffice/external/lit'; -import { UmbLitElement, umbFocus } from '@umbraco-cms/backoffice/lit-element'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; // import local components. Theses are not meant to be used outside of this component. @@ -37,17 +35,6 @@ export class UmbUserWorkspaceEditorElement extends UmbLitElement { this.observe(this.#workspaceContext.data, (user) => (this._user = user), 'umbUserObserver'); } - // TODO. find a way where we don't have to do this for all workspaces. - #onNameChange(event: UUIInputEvent) { - if (event instanceof UUIInputEvent) { - const target = event.composedPath()[0] as UUIInputElement; - - if (typeof target?.value === 'string') { - this.#workspaceContext?.updateProperty('name', target.value); - } - } - } - override render() { if (!this._user) return html`User not found`; @@ -67,9 +54,7 @@ export class UmbUserWorkspaceEditorElement extends UmbLitElement { #renderHeader() { return html` - + `; } @@ -106,11 +91,6 @@ export class UmbUserWorkspaceEditorElement extends UmbLitElement { height: 100%; } - #header { - width: 100%; - display: grid; - } - #main { display: grid; grid-template-columns: 1fr 350px; diff --git a/src/packages/user/user/workspace/user/user-workspace.context.ts b/src/packages/user/user/workspace/user/user-workspace.context.ts index 72982cec05..5b0d7572db 100644 --- a/src/packages/user/user/workspace/user/user-workspace.context.ts +++ b/src/packages/user/user/workspace/user/user-workspace.context.ts @@ -21,6 +21,7 @@ export class UmbUserWorkspaceContext public readonly avatarRepository: UmbUserAvatarRepository = new UmbUserAvatarRepository(this); public readonly configRepository = new UmbUserConfigRepository(this); + readonly name = this._data.createObservablePartOfCurrent((x) => x?.name); readonly state = this._data.createObservablePartOfCurrent((x) => x?.state); readonly kind = this._data.createObservablePartOfCurrent((x) => x?.kind); readonly userGroupUniques = this._data.createObservablePartOfCurrent((x) => x?.userGroupUniques || []); @@ -110,6 +111,14 @@ export class UmbUserWorkspaceContext return this.avatarRepository.deleteAvatar(unique); } + getName(): string { + return this._data.getCurrent()?.name || ''; + } + + setName(name: string) { + this._data.updateCurrent({ name }); + } + override destroy(): void { this.avatarRepository.destroy(); super.destroy();