diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.server.data-source.ts index 15cc4b51a2..ec1fbf77d8 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.server.data-source.ts @@ -40,7 +40,7 @@ export class UmbUserGroupServerDataSource implements UmbDetailDataSource { this.#workspaceContext = instance; - this.observe(this.#workspaceContext.data, (userGroup) => (this._userGroup = userGroup), 'umbUserGroupObserver'); + this.#observeUserGroup(); }); } + #observeUserGroup() { + if (!this.#workspaceContext) return; + this.observe(this.#workspaceContext.unique, (value) => (this._unique = value), '_observeUnique'); + this.observe(this.#workspaceContext.name, (value) => (this._name = value), '_observeName'); + this.observe(this.#workspaceContext.icon, (value) => (this._icon = value), '_observeIcon'); + this.observe(this.#workspaceContext.sections, (value) => (this._sections = value), '_observeSections'); + this.observe( + this.#workspaceContext.documentStartNode, + (value) => (this._documentStartNode = value), + '_observeDocumentStartNode', + ); + this.observe( + this.#workspaceContext.mediaStartNode, + (value) => (this._mediaStartNode = value), + '_observeDocumentStartNode', + ); + } + #onSectionsChange(event: UmbChangeEvent) { event.stopPropagation(); const target = event.target as UmbInputSectionElement; @@ -59,7 +93,7 @@ export class UmbUserGroupWorkspaceEditorElement extends UmbLitElement { } render() { - if (!this._userGroup) return nothing; + if (!this._unique) return nothing; return html` @@ -72,16 +106,40 @@ export class UmbUserGroupWorkspaceEditorElement extends UmbLitElement { `; } + async #onIconClick() { + const [alias, color] = this._icon?.replace('color-', '')?.split(' ') ?? []; + const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT); + const modalContext = modalManager.open(this, UMB_ICON_PICKER_MODAL, { + value: { + icon: alias, + color: color, + }, + }); + + modalContext?.onSubmit().then((saved) => { + if (saved.icon && saved.color) { + this.#workspaceContext?.updateProperty('icon', `${saved.icon} color-${saved.color}`); + } else if (saved.icon) { + this.#workspaceContext?.updateProperty('icon', saved.icon); + } + }); + } + #renderHeader() { return html` @@ -89,7 +147,7 @@ export class UmbUserGroupWorkspaceEditorElement extends UmbLitElement { } #renderLeftColumn() { - if (!this._userGroup) return nothing; + if (!this._unique) return nothing; return html` @@ -99,7 +157,7 @@ export class UmbUserGroupWorkspaceEditorElement extends UmbLitElement { description=${this.localize.term('user_sectionsHelp')}> @@ -139,9 +197,7 @@ export class UmbUserGroupWorkspaceEditorElement extends UmbLitElement { #renderRightColumn() { return html` - `; } @@ -152,28 +208,43 @@ export class UmbUserGroupWorkspaceEditorElement extends UmbLitElement { display: block; height: 100%; } + #header { - width: 100%; - display: grid; - grid-template-columns: var(--uui-size-layout-1) 1fr; + display: flex; + flex: 1 1 auto; + gap: var(--uui-size-space-3); } + + #icon { + font-size: calc(var(--uui-size-layout-3) / 2); + } + + #name { + width: 100%; + flex: 1 1 auto; + align-items: center; + } + #main { display: grid; grid-template-columns: 1fr 350px; gap: var(--uui-size-layout-1); padding: var(--uui-size-layout-1); } + #left-column, #right-column { display: flex; flex-direction: column; gap: var(--uui-size-space-4); } + #right-column > uui-box > div { display: flex; flex-direction: column; gap: var(--uui-size-space-2); } + uui-input { width: 100%; }