diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/index.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/index.ts index d3fa3e2be5..53639397c5 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/index.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/index.ts @@ -9,6 +9,7 @@ import { UMB_CURRENT_USER_HISTORY_STORE_CONTEXT_TOKEN, } from './current-user/current-user-history.store'; import { UmbUserItemStore } from './users/repository/user-item.store'; +import { UmbUserGroupItemStore } from './user-groups/repository/user-group-item.store'; import { UmbContextProviderController } from '@umbraco-cms/backoffice/context-api'; import { UmbEntrypointOnInit } from '@umbraco-cms/backoffice/extensions-api'; @@ -22,6 +23,7 @@ export const onInit: UmbEntrypointOnInit = (host, extensionRegistry) => { new UmbContextProviderController(host, UMB_CURRENT_USER_STORE_CONTEXT_TOKEN, new UmbCurrentUserStore()); new UmbUserItemStore(host); + new UmbUserGroupItemStore(host); new UmbContextProviderController( host, UMB_CURRENT_USER_HISTORY_STORE_CONTEXT_TOKEN, diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/components/input-user-group/user-group-input.context.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/components/input-user-group/user-group-input.context.ts index f757425350..c69d3e465e 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/components/input-user-group/user-group-input.context.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/components/input-user-group/user-group-input.context.ts @@ -1,9 +1,9 @@ import { UmbPickerInputContext } from '@umbraco-cms/backoffice/picker-input'; import { UmbControllerHostElement } from '@umbraco-cms/backoffice/controller'; -import { UserItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; import { UMB_USER_GROUP_PICKER_MODAL } from '@umbraco-cms/backoffice/modal'; +import { UserGroupItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; -export class UmbUserGroupPickerContext extends UmbPickerInputContext { +export class UmbUserGroupPickerContext extends UmbPickerInputContext { constructor(host: UmbControllerHostElement) { super(host, 'Umb.Repository.UserGroup', UMB_USER_GROUP_PICKER_MODAL); } diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/components/input-user-group/user-group-input.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/components/input-user-group/user-group-input.element.ts index 1905d342ae..958435ccc4 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/components/input-user-group/user-group-input.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/components/input-user-group/user-group-input.element.ts @@ -4,7 +4,7 @@ import { customElement, property, state } from 'lit/decorators.js'; import { FormControlMixin } from '@umbraco-ui/uui-base/lib/mixins'; import { UmbUserGroupPickerContext } from './user-group-input.context'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; -import type { UserItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; +import type { UserGroupItemResponseModel } from '@umbraco-cms/backoffice/backend-api'; @customElement('umb-user-group-input') export class UmbUserGroupInputElement extends FormControlMixin(UmbLitElement) { @@ -70,7 +70,7 @@ export class UmbUserGroupInputElement extends FormControlMixin(UmbLitElement) { } @state() - private _items?: Array; + private _items?: Array; #pickerContext = new UmbUserGroupPickerContext(this); @@ -98,6 +98,8 @@ export class UmbUserGroupInputElement extends FormControlMixin(UmbLitElement) { } render() { + console.log('render', this.#pickerContext.getSelection(), this._items); + return html` ${this._items?.map((item) => this._renderItem(item))} this.#pickerContext.openPicker()} label="open" @@ -106,7 +108,7 @@ export class UmbUserGroupInputElement extends FormControlMixin(UmbLitElement) { `; } - private _renderItem(item: UserItemResponseModel) { + private _renderItem(item: UserGroupItemResponseModel) { if (!item.id) return; return html` diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/repository/user-group.repository.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/repository/user-group.repository.ts index 2503c1ac7b..03451019f8 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/repository/user-group.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/user-groups/repository/user-group.repository.ts @@ -4,6 +4,7 @@ import { UmbUserGroupServerDataSource } from './sources/user-group.server.data'; import { UmbUserGroupCollectionServerDataSource } from './sources/user-group-collection.server.data'; import { UMB_USER_GROUP_ITEM_STORE_CONTEXT_TOKEN, UmbUserGroupItemStore } from './user-group-item.store'; import { UMB_USER_GROUP_STORE_CONTEXT_TOKEN, UmbUserGroupStore } from './user-group.store'; +import { UmbUserGroupItemServerDataSource } from './sources/user-group-item.server.data'; import { CreateUserGroupRequestModel, UpdateUserGroupRequestModel, @@ -23,7 +24,6 @@ import { } from '@umbraco-cms/backoffice/repository'; import { UmbContextConsumerController } from '@umbraco-cms/backoffice/context-api'; import { UMB_NOTIFICATION_CONTEXT_TOKEN, UmbNotificationContext } from '@umbraco-cms/backoffice/notification'; -import { UmbUserGroupItemServerDataSource } from './sources/user-group-item.server.data'; // TODO: implement export class UmbUserGroupRepository @@ -62,6 +62,7 @@ export class UmbUserGroupRepository new UmbContextConsumerController(this.#host, UMB_USER_GROUP_ITEM_STORE_CONTEXT_TOKEN, (instance) => { this.#itemStore = instance; + console.log('item store', instance); }).asPromise(), new UmbContextConsumerController(this.#host, UMB_NOTIFICATION_CONTEXT_TOKEN, (instance) => { diff --git a/src/Umbraco.Web.UI.Client/src/backoffice/users/users/workspace/user-workspace-edit.element.ts b/src/Umbraco.Web.UI.Client/src/backoffice/users/users/workspace/user-workspace-edit.element.ts index 3e7c12678d..a3183e4de8 100644 --- a/src/Umbraco.Web.UI.Client/src/backoffice/users/users/workspace/user-workspace-edit.element.ts +++ b/src/Umbraco.Web.UI.Client/src/backoffice/users/users/workspace/user-workspace-edit.element.ts @@ -8,6 +8,7 @@ import { repeat } from 'lit/directives/repeat.js'; import { UmbCurrentUserStore, UMB_CURRENT_USER_STORE_CONTEXT_TOKEN } from '../../current-user/current-user.store'; import { getLookAndColorFromUserStatus } from '../../utils'; import { UmbUserRepository } from '../repository/user.repository'; +import UmbUserGroupInputElement from '../../user-groups/components/input-user-group/user-group-input.element'; import { UmbUserWorkspaceContext } from './user-workspace.context'; import { UMB_CHANGE_PASSWORD_MODAL } from '@umbraco-cms/backoffice/modal'; import type { UmbModalContext } from '@umbraco-cms/backoffice/modal'; @@ -85,6 +86,10 @@ export class UmbUserWorkspaceEditElement extends UmbLitElement { } } + #onUserGroupsChange(userGroupIds: Array) { + this.#workspaceContext?.updateProperty('userGroupIds', userGroupIds); + } + #onUserDelete() { if (!this._user || !this._user.id) return; @@ -153,8 +158,8 @@ export class UmbUserWorkspaceEditElement extends UmbLitElement { - this.#workspaceContext?.updateProperty('userGroupIds', e.target.value)}> + @change=${(e: Event) => + this.#onUserGroupsChange((e.target as UmbUserGroupInputElement).selectedIds)}>