diff --git a/src/Umbraco.Web.UI.Client/src/packages/users/user-groups/workspace/components/user-group-default-permission-list.element.ts b/src/Umbraco.Web.UI.Client/src/packages/users/user-groups/workspace/components/user-group-default-permission-list.element.ts index 653b6c154e..776d6250a7 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/users/user-groups/workspace/components/user-group-default-permission-list.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/users/user-groups/workspace/components/user-group-default-permission-list.element.ts @@ -1,11 +1,12 @@ import { UMB_USER_GROUP_WORKSPACE_CONTEXT } from '../user-group-workspace.context.js'; -import { UUIBooleanInputEvent } from '@umbraco-cms/backoffice/external/uui'; -import { css, html, customElement, state } from '@umbraco-cms/backoffice/external/lit'; +import { html, customElement, state, ifDefined } from '@umbraco-cms/backoffice/external/lit'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { UserGroupResponseModel } from '@umbraco-cms/backoffice/backend-api'; import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { ManifestUserPermission, umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; import { groupBy } from '@umbraco-cms/backoffice/external/lodash'; +import { UmbChangeEvent } from '@umbraco-cms/backoffice/events'; +import { type UmbUserPermissionSettingElement } from '@umbraco-cms/backoffice/users'; @customElement('umb-user-group-default-permission-list') export class UmbUserGroupDefaultPermissionListElement extends UmbLitElement { @@ -15,7 +16,7 @@ export class UmbUserGroupDefaultPermissionListElement extends UmbLitElement { @state() private _groupedUserPermissionManifests: Record> = {}; - #workspaceContext?: typeof UMB_USER_GROUP_WORKSPACE_CONTEXT.TYPE; + #userGroupWorkspaceContext?: typeof UMB_USER_GROUP_WORKSPACE_CONTEXT.TYPE; constructor() { super(); @@ -23,8 +24,8 @@ export class UmbUserGroupDefaultPermissionListElement extends UmbLitElement { this.#observeUserPermissions(); this.consumeContext(UMB_USER_GROUP_WORKSPACE_CONTEXT, (instance) => { - this.#workspaceContext = instance; - this.observe(this.#workspaceContext.data, (userGroup) => (this._userGroup = userGroup)); + this.#userGroupWorkspaceContext = instance; + this.observe(this.#userGroupWorkspaceContext.data, (userGroup) => (this._userGroup = userGroup)); }); } @@ -34,10 +35,12 @@ export class UmbUserGroupDefaultPermissionListElement extends UmbLitElement { }); } - #onChangeUserPermission(event: UUIBooleanInputEvent, userPermissionManifest: ManifestUserPermission) { - event.target.checked - ? this.#workspaceContext?.addPermission(userPermissionManifest.alias) - : this.#workspaceContext?.removePermission(userPermissionManifest.alias); + #onChangeUserPermission(event: UmbChangeEvent, userPermissionManifest: ManifestUserPermission) { + const target = event.target as UmbUserPermissionSettingElement; + + target.allowed + ? this.#userGroupWorkspaceContext?.addPermission(userPermissionManifest.alias) + : this.#userGroupWorkspaceContext?.removePermission(userPermissionManifest.alias); } #isAllowed(userPermissionManifest: ManifestUserPermission) { @@ -45,6 +48,10 @@ export class UmbUserGroupDefaultPermissionListElement extends UmbLitElement { } render() { + return html`${this.#renderEntityGroups()}`; + } + + #renderEntityGroups() { const entityGroups = []; for (const [key, value] of Object.entries(this._groupedUserPermissionManifests)) { @@ -58,40 +65,15 @@ export class UmbUserGroupDefaultPermissionListElement extends UmbLitElement { } #renderPermission(userPermissionManifest: ManifestUserPermission) { - return html`
- this.#onChangeUserPermission(event, userPermissionManifest)}> -
-
${userPermissionManifest.meta.label}
- ${userPermissionManifest.meta.description} -
-
-
`; + return html` + this.#onChangeUserPermission(event, userPermissionManifest)}>`; } - static styles = [ - UmbTextStyles, - css` - .permission-toggle { - display: flex; - align-items: center; - border-bottom: 1px solid var(--uui-color-divider); - padding: var(--uui-size-space-3) 0 var(--uui-size-space-4) 0; - } - - .permission-meta { - margin-left: var(--uui-size-space-4); - line-height: 1.2em; - } - - .permission-name { - font-weight: bold; - } - `, - ]; + static styles = [UmbTextStyles]; } export default UmbUserGroupDefaultPermissionListElement; diff --git a/src/Umbraco.Web.UI.Client/src/packages/users/users/components/index.ts b/src/Umbraco.Web.UI.Client/src/packages/users/users/components/index.ts index c5a96c894c..2a4312053b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/users/users/components/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/users/users/components/index.ts @@ -1,3 +1,5 @@ import './user-input/user-input.element.js'; +import './user-permission-setting/user-permission-setting.element.js'; export * from './user-input/user-input.element.js'; +export * from './user-permission-setting/user-permission-setting.element.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/users/users/components/user-permission-setting/user-permission-setting.element.ts b/src/Umbraco.Web.UI.Client/src/packages/users/users/components/user-permission-setting/user-permission-setting.element.ts new file mode 100644 index 0000000000..2231e11f10 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/users/users/components/user-permission-setting/user-permission-setting.element.ts @@ -0,0 +1,63 @@ +import { type UUIBooleanInputEvent } from '@umbraco-cms/backoffice/external/uui'; +import { css, html, customElement, property } from '@umbraco-cms/backoffice/external/lit'; +import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; +import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; +import { UmbChangeEvent } from '@umbraco-cms/backoffice/events'; + +@customElement('umb-user-permission-setting') +export class UmbUserPermissionSettingElement extends UmbLitElement { + @property({ type: String, attribute: true }) + label: string = ''; + + @property({ type: String, attribute: true }) + description?: string = ''; + + @property({ type: Boolean, attribute: true }) + allowed: boolean = false; + + #onChange(event: UUIBooleanInputEvent) { + event.stopPropagation(); + this.allowed = event.target.checked; + this.dispatchEvent(new UmbChangeEvent()); + } + + render() { + return html`
+ +
+
${this.label}
+ ${this.description} +
+
+
`; + } + + static styles = [ + UmbTextStyles, + css` + #setting { + display: flex; + align-items: center; + border-bottom: 1px solid var(--uui-color-divider); + padding: var(--uui-size-space-3) 0 var(--uui-size-space-4) 0; + } + + #meta { + margin-left: var(--uui-size-space-4); + line-height: 1.2em; + } + + #name { + font-weight: bold; + } + `, + ]; +} + +export default UmbUserPermissionSettingElement; + +declare global { + interface HTMLElementTagNameMap { + 'umb-user-permission-setting': UmbUserPermissionSettingElement; + } +}