diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-item/data-resolver/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-item/data-resolver/types.ts new file mode 100644 index 0000000000..65b93edd6f --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-item/data-resolver/types.ts @@ -0,0 +1,23 @@ +import type { UmbItemModel } from '../types.js'; +import type { UmbControllerBase } from '@umbraco-cms/backoffice/class-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import type { Observable } from '@umbraco-cms/backoffice/observable-api'; + +export interface UmbItemDataResolverConstructor { + new (host: UmbControllerHost): UmbItemDataResolver; +} + +export interface UmbItemDataResolver extends UmbControllerBase { + entityType: Observable; + unique: Observable; + name: Observable; + icon: Observable; + + setData(data: ItemType | undefined): void; + getData(): ItemType | undefined; + + getEntityType(): Promise; + getUnique(): Promise; + getName(): Promise; + getIcon(): Promise; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-item/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-item/index.ts index a0ee69f820..37c47e5ec3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-item/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-item/index.ts @@ -1,2 +1,4 @@ export * from './item-data-api-get-request-controller/index.js'; export * from './entity-item-ref/index.js'; + +export type { UmbItemDataResolver, UmbItemDataResolverConstructor } from './data-resolver/types.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/entity-item/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/entity-item/types.ts index 78aae14245..3c778ff06b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/entity-item/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/entity-item/types.ts @@ -1,6 +1,13 @@ -import type { UmbNamedEntityModel } from '@umbraco-cms/backoffice/entity'; +import type { UmbEntityModel, UmbNamedEntityModel } from '@umbraco-cms/backoffice/entity'; export type * from './item-data-api-get-request-controller/types.js'; +export type * from './data-resolver/types.js'; export interface UmbDefaultItemModel extends UmbNamedEntityModel { icon?: string; } + +export interface UmbItemModel extends UmbEntityModel { + unique: string; + name?: string; + icon?: string; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/item/document-item-data-resolver.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/item/document-item-data-resolver.ts index fc15e05439..e24e0e62a6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/item/document-item-data-resolver.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/item/document-item-data-resolver.ts @@ -5,6 +5,7 @@ import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import type { DocumentVariantStateModel } from '@umbraco-cms/backoffice/external/backend-api'; import { UmbBasicState, UmbBooleanState, UmbObjectState, UmbStringState } from '@umbraco-cms/backoffice/observable-api'; import { type UmbVariantContext, UMB_VARIANT_CONTEXT } from '@umbraco-cms/backoffice/variant'; +import type { UmbItemDataResolver } from '@umbraco-cms/backoffice/entity-item'; type UmbDocumentItemDataResolverModel = Omit; @@ -14,11 +15,13 @@ type UmbDocumentItemDataResolverModel = Omit extends UmbControllerBase { +export class UmbDocumentItemDataResolver + extends UmbControllerBase + implements UmbItemDataResolver +{ #data = new UmbObjectState(undefined); + public readonly entityType = this.#data.asObservablePart((x) => x?.entityType); public readonly unique = this.#data.asObservablePart((x) => x?.unique); public readonly icon = this.#data.asObservablePart((x) => x?.documentType.icon); public readonly isTrashed = this.#data.asObservablePart((x) => x?.isTrashed); @@ -101,6 +104,15 @@ export class UmbDocumentItemDataResolver< this.#setVariantAwareValues(); } + /** + * Get the entity type of the item + * @returns {Promise} The entity type of the item + * @memberof UmbDocumentItemDataResolver + */ + async getEntityType(): Promise { + return await this.observe(this.entityType).asPromise(); + } + /** * Get the unique of the item * @returns {Promise} The unique of the item diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/entity-action/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/entity-action/manifests.ts index cc11edeb22..bbcf5e5185 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/entity-action/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/recycle-bin/entity-action/manifests.ts @@ -7,6 +7,7 @@ import { } from '../../constants.js'; import { UMB_DOCUMENT_REFERENCE_REPOSITORY_ALIAS } from '../../reference/constants.js'; import { UMB_DOCUMENT_ITEM_REPOSITORY_ALIAS } from '../../item/constants.js'; +import { UmbDocumentItemDataResolver } from '../../item/document-item-data-resolver.js'; import { manifests as bulkTrashManifests } from './bulk-trash/manifests.js'; import { UMB_ENTITY_IS_NOT_TRASHED_CONDITION_ALIAS, @@ -25,6 +26,7 @@ export const manifests: Array = [ itemRepositoryAlias: UMB_DOCUMENT_ITEM_REPOSITORY_ALIAS, recycleBinRepositoryAlias: UMB_DOCUMENT_RECYCLE_BIN_REPOSITORY_ALIAS, referenceRepositoryAlias: UMB_DOCUMENT_REFERENCE_REPOSITORY_ALIAS, + itemDataResolver: UmbDocumentItemDataResolver, }, conditions: [ { diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/trash/modal/trash-with-relation-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/trash/modal/trash-with-relation-modal.element.ts index d68a75cbb0..cb4ebb134c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/trash/modal/trash-with-relation-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/trash/modal/trash-with-relation-modal.element.ts @@ -48,7 +48,13 @@ export class UmbTrashWithRelationConfirmModalElement extends UmbModalBaseElement const item = data?.[0]; if (!item) throw new Error('Item not found.'); - this._name = item.name; + if (this.data.itemDataResolver) { + const resolver = new this.data.itemDataResolver(this); + resolver.setData(item); + this._name = await resolver.getName(); + } else { + this._name = item.name; + } this._referencesConfig = { unique: this.data.unique, diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/trash/modal/trash-with-relation-modal.token.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/trash/modal/trash-with-relation-modal.token.ts index 6e67d47f1a..e2a814da74 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/trash/modal/trash-with-relation-modal.token.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/trash/modal/trash-with-relation-modal.token.ts @@ -1,3 +1,4 @@ +import type { UmbItemDataResolverConstructor } from '@umbraco-cms/backoffice/entity-item'; import { UmbModalToken } from '@umbraco-cms/backoffice/modal'; export interface UmbTrashWithRelationConfirmModalData { @@ -5,6 +6,7 @@ export interface UmbTrashWithRelationConfirmModalData { entityType: string; itemRepositoryAlias: string; referenceRepositoryAlias: string; + itemDataResolver?: UmbItemDataResolverConstructor; } export type UmbTrashWithRelationConfirmModalValue = undefined; diff --git a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/trash/trash-with-relation.action.ts b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/trash/trash-with-relation.action.ts index 3d9754f1ed..ede458383d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/trash/trash-with-relation.action.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/relations/relations/entity-actions/trash/trash-with-relation.action.ts @@ -16,6 +16,7 @@ export class UmbTrashWithRelationEntityAction extends UmbTrashEntityAction