From 738cc39da1f3afd700ccb6e4d4debffa33a966cf Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Fri, 2 Feb 2024 13:27:30 +0100 Subject: [PATCH] mapping --- .../user-group-collection.repository.ts | 6 +- .../entity-bulk-actions/manifests.ts | 4 +- .../detail/user-group-detail.repository.ts | 17 +---- .../user-group-detail.server.data-source.ts | 65 ++++++++++++------- .../detail/user-group-detail.store.ts | 5 -- .../user/user-group/repository/item/types.ts | 2 +- .../user-group-item.server.data-source.ts | 2 +- .../src/packages/user/user-group/types.ts | 4 +- .../user-collection-header.element.ts | 7 +- .../grid/user-grid-collection-view.element.ts | 20 +++--- .../src/packages/user/utils.ts | 2 +- 11 files changed, 67 insertions(+), 67 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/repository/user-group-collection.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/repository/user-group-collection.repository.ts index 4191d87bd3..ea348ff58c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/repository/user-group-collection.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/collection/repository/user-group-collection.repository.ts @@ -1,8 +1,8 @@ -import type { UmbUserGroupCollectionFilterModel } from '../../types.js'; +import type { UmbUserGroupDetailModel } from '../../types.js'; import type { UmbUserGroupStore } from '../../repository/user-group.store.js'; import { UMB_USER_GROUP_STORE_CONTEXT } from '../../repository/user-group.store.js'; +import type { UmbUserGroupCollectionFilterModel } from '../types.js'; import { UmbUserGroupCollectionServerDataSource } from './user-group-collection.server.data-source.js'; -import type { UserGroupResponseModel } from '@umbraco-cms/backoffice/backend-api'; import type { UmbCollectionDataSource, UmbCollectionRepository } from '@umbraco-cms/backoffice/repository'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbBaseController } from '@umbraco-cms/backoffice/class-api'; @@ -11,7 +11,7 @@ export class UmbUserGroupCollectionRepository extends UmbBaseController implemen #init; #detailStore?: UmbUserGroupStore; - #collectionSource: UmbCollectionDataSource; + #collectionSource: UmbCollectionDataSource; constructor(host: UmbControllerHost) { super(host); diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/entity-bulk-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/entity-bulk-actions/manifests.ts index 5dff5930b7..c859e6fb9b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/entity-bulk-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/entity-bulk-actions/manifests.ts @@ -1,5 +1,5 @@ import { UMB_USER_GROUP_COLLECTION_ALIAS } from '../collection/index.js'; -import { UMB_USER_GROUP_REPOSITORY_ALIAS } from '../repository/manifests.js'; +import { UMB_USER_GROUP_DETAIL_REPOSITORY_ALIAS } from '../repository/index.js'; import { UmbDeleteUserGroupEntityBulkAction } from './delete/delete.action.js'; import { UMB_COLLECTION_ALIAS_CONDITION } from '@umbraco-cms/backoffice/collection'; import type { ManifestEntityBulkAction } from '@umbraco-cms/backoffice/extension-registry'; @@ -13,7 +13,7 @@ const entityActions: Array = [ api: UmbDeleteUserGroupEntityBulkAction, meta: { label: 'Delete', - repositoryAlias: UMB_USER_GROUP_REPOSITORY_ALIAS, + repositoryAlias: UMB_USER_GROUP_DETAIL_REPOSITORY_ALIAS, }, conditions: [ { diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.repository.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.repository.ts index ba3b046d6d..7f404eaf42 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.repository.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/detail/user-group-detail.repository.ts @@ -1,26 +1,11 @@ import type { UmbUserGroupDetailModel } from '../../types.js'; import { UmbUserGroupServerDataSource } from './user-group-detail.server.data-source.js'; -import type { UmbUserGroupDetailStore } from './user-group-detail.store.js'; import { UMB_USER_GROUP_DETAIL_STORE_CONTEXT } from './user-group-detail.store.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UmbDetailRepositoryBase } from '@umbraco-cms/backoffice/repository'; -export class UmbUserGroupDetailRepository extends UmbDetailRepositoryBase { - #init: Promise; - #detailStore?: UmbUserGroupDetailStore; +export class UmbUserGroupDetailRepository extends UmbDetailRepositoryBase { constructor(host: UmbControllerHost) { super(host, UmbUserGroupServerDataSource, UMB_USER_GROUP_DETAIL_STORE_CONTEXT); - - this.#init = Promise.all([ - this.consumeContext(UMB_USER_GROUP_DETAIL_STORE_CONTEXT, (instance) => { - this.#detailStore = instance; - }).asPromise(), - ]); - } - - async byPropertyEditorUiAlias(propertyEditorUiAlias: string) { - if (!propertyEditorUiAlias) throw new Error('propertyEditorUiAlias is missing'); - await this.#init; - return this.#detailStore!.withPropertyEditorUiAlias(propertyEditorUiAlias); } } 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 c1fcda1c8f..c60195c0e0 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 @@ -1,8 +1,8 @@ -import type { UmbUserGroupDetailModel, UmbUserGroupPropertyModel } from '../../types.js'; +import type { UmbUserGroupDetailModel } from '../../types.js'; import { UMB_USER_GROUP_ENTITY_TYPE } from '../../entity.js'; import { UmbId } from '@umbraco-cms/backoffice/id'; import type { UmbDetailDataSource } from '@umbraco-cms/backoffice/repository'; -import type { CreateUserGroupRequestModel, UserGroupModelBaseModel } from '@umbraco-cms/backoffice/backend-api'; +import type { CreateUserGroupRequestModel, UpdateUserGroupRequestModel } from '@umbraco-cms/backoffice/backend-api'; import { UserGroupResource } from '@umbraco-cms/backoffice/backend-api'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { tryExecuteAndNotify } from '@umbraco-cms/backoffice/resources'; @@ -31,15 +31,21 @@ export class UmbUserGroupServerDataSource implements UmbDetailDataSource, + icon: data.icon || null, + sections: data.sections, + languages: data.languages, + hasAccessToAllLanguages: data.hasAccessToAllLanguages, + documentStartNode: data.documentStartNode ? { unique: data.documentStartNode.id } : null, + documentRootAccess: data.documentRootAccess, + mediaStartNode: data.mediaStartNode ? { unique: data.mediaStartNode.id } : null, + mediaRootAccess: data.mediaRootAccess, + permissions: data.permissions, }; return { data: userGroup }; @@ -82,17 +94,19 @@ export class UmbUserGroupServerDataSource implements UmbDetailDataSource items.filter((item) => item.editorUiAlias === propertyEditorUiAlias)); - } } export const UMB_USER_GROUP_DETAIL_STORE_CONTEXT = new UmbContextToken( diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/item/types.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/item/types.ts index 40590dd004..3a7b84b6d9 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/item/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/item/types.ts @@ -1,5 +1,5 @@ export interface UmbUserGroupItemModel { unique: string; name: string; - propertyEditorUiAlias: string; + icon: string | null; } diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/item/user-group-item.server.data-source.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/item/user-group-item.server.data-source.ts index 4d77b94bdd..1dc31d60df 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/item/user-group-item.server.data-source.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/repository/item/user-group-item.server.data-source.ts @@ -34,6 +34,6 @@ const mapper = (item: UserGroupItemResponseModel): UmbUserGroupItemModel => { return { unique: item.id, name: item.name, - propertyEditorUiAlias: item.editorUiAlias || '', // TODO: why can this be undefined or null on the server? + icon: item.icon || null, }; }; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/types.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/types.ts index 99f8100c15..a75d18c774 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user-group/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user-group/types.ts @@ -1,4 +1,6 @@ -export interface UserGroupDetailModel { +import type { UmbUserGroupEntityType } from './entity.js'; + +export interface UmbUserGroupDetailModel { unique: string; entityType: UmbUserGroupEntityType; isSystemGroup: boolean; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts index 06c781d607..28e079b8fa 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/user-collection-header.element.ts @@ -9,9 +9,8 @@ import { css, html, customElement, state, repeat, ifDefined } from '@umbraco-cms import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; import { UMB_DEFAULT_COLLECTION_CONTEXT } from '@umbraco-cms/backoffice/collection'; import type { UmbModalManagerContext } from '@umbraco-cms/backoffice/modal'; -import type { UserGroupResponseModel} from '@umbraco-cms/backoffice/backend-api'; import { UserOrderModel, UserStateModel } from '@umbraco-cms/backoffice/backend-api'; -import { UmbUserGroupCollectionRepository } from '@umbraco-cms/backoffice/user-group'; +import { UmbUserGroupCollectionRepository, UmbUserGroupDetailModel } from '@umbraco-cms/backoffice/user-group'; @customElement('umb-user-collection-header') export class UmbUserCollectionHeaderElement extends UmbLitElement { @@ -28,10 +27,10 @@ export class UmbUserCollectionHeaderElement extends UmbLitElement { private _orderBy?: UserOrderModel; @state() - private _userGroups: Array = []; + private _userGroups: Array = []; @state() - private _userGroupFilterSelection: Array = []; + private _userGroupFilterSelection: Array = []; #modalContext?: UmbModalManagerContext; #collectionContext?: UmbUserCollectionContext; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/views/grid/user-grid-collection-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/views/grid/user-grid-collection-view.element.ts index 044984e9de..236782dfef 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/views/grid/user-grid-collection-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/collection/views/grid/user-grid-collection-view.element.ts @@ -5,8 +5,8 @@ import { css, html, nothing, customElement, state, repeat, ifDefined } from '@um import { UmbTextStyles } from '@umbraco-cms/backoffice/style'; import { UMB_DEFAULT_COLLECTION_CONTEXT } from '@umbraco-cms/backoffice/collection'; import { UmbLitElement } from '@umbraco-cms/internal/lit-element'; -import type { UserGroupResponseModel} from '@umbraco-cms/backoffice/backend-api'; import { UserStateModel } from '@umbraco-cms/backoffice/backend-api'; +import type { UmbUserGroupDetailModel } from '@umbraco-cms/backoffice/user-group'; import { UmbUserGroupCollectionRepository } from '@umbraco-cms/backoffice/user-group'; @customElement('umb-user-grid-collection-view') @@ -20,7 +20,7 @@ export class UmbUserGridCollectionViewElement extends UmbLitElement { @state() private _loading = false; - #userGroups: Array = []; + #userGroups: Array = []; #collectionContext?: UmbUserCollectionContext; #userGroupCollectionRepository = new UmbUserGroupCollectionRepository(this); @@ -55,11 +55,11 @@ export class UmbUserGridCollectionViewElement extends UmbLitElement { } #onSelect(user: UmbUserDetailModel) { - this.#collectionContext?.selection.select(user.id ?? ''); + this.#collectionContext?.selection.select(user.unique ?? ''); } #onDeselect(user: UmbUserDetailModel) { - this.#collectionContext?.selection.deselect(user.id ?? ''); + this.#collectionContext?.selection.deselect(user.unique ?? ''); } render() { @@ -68,7 +68,7 @@ export class UmbUserGridCollectionViewElement extends UmbLitElement {
${repeat( this._users, - (user) => user.id, + (user) => user.unique, (user) => this.#renderUserCard(user), )}
@@ -81,8 +81,8 @@ export class UmbUserGridCollectionViewElement extends UmbLitElement { .name=${user.name ?? 'Unnamed user'} selectable ?select-only=${this._selection.length > 0} - ?selected=${this.#collectionContext?.selection.isSelected(user.id ?? '')} - @open=${() => this._handleOpenCard(user.id ?? '')} + ?selected=${this.#collectionContext?.selection.isSelected(user.unique)} + @open=${() => this._handleOpenCard(user.unique)} @selected=${() => this.#onSelect(user)} @deselected=${() => this.#onDeselect(user)}> ${this.#renderUserTag(user)} ${this.#renderUserGroupNames(user)} ${this.#renderUserLoginDate(user)} @@ -95,19 +95,19 @@ export class UmbUserGridCollectionViewElement extends UmbLitElement { return nothing; } - const statusLook = getDisplayStateFromUserStatus(user.state); + const statusLook = user.state ? getDisplayStateFromUserStatus(user.state) : undefined; return html` - + `; } #renderUserGroupNames(user: UmbUserDetailModel) { const userGroupNames = this.#userGroups - .filter((userGroup) => user.userGroupIds?.includes(userGroup.id!)) + .filter((userGroup) => user.userGroupIds?.includes(userGroup.unique)) .map((userGroup) => userGroup.name) .join(', '); diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/utils.ts b/src/Umbraco.Web.UI.Client/src/packages/user/utils.ts index 987ac4dea3..4a405a9883 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/utils.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/utils.ts @@ -18,7 +18,7 @@ const userStates: UmbUserDisplayStatus[] = [ export const getDisplayStateFromUserStatus = (status: UserStateModel): UmbUserDisplayStatus => userStates - .filter((state) => state.key === status)! + .filter((state) => state.key === status) .map((state) => ({ ...state, key: 'state' + state.key,