From 0adec22aaacb6a58267dfc5e861d791e5cd6b510 Mon Sep 17 00:00:00 2001 From: leekelleher Date: Mon, 11 Mar 2024 18:43:33 +0000 Subject: [PATCH 1/4] Adds Workspace Collection Context interface and token --- .../core/workspace/workspace-context/index.ts | 2 ++ .../workspace-collection-context.interface.ts | 10 ++++++++++ .../workspace-collection-context.token.ts | 16 ++++++++++++++++ 3 files changed, 28 insertions(+) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-context/workspace-collection-context.interface.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-context/workspace-collection-context.token.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-context/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-context/index.ts index f467da08d3..269d85792a 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-context/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-context/index.ts @@ -1,6 +1,8 @@ export * from './property-structure-workspace-context.interface.js'; export * from './publishable-workspace-context.interface.js'; export * from './saveable-workspace-context.interface.js'; +export * from './workspace-collection-context.interface.js'; +export * from './workspace-collection-context.token.js'; export * from './variant-workspace-context.token.js'; export * from './workspace-context.interface.js'; export * from './editable-workspace-context-base.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-context/workspace-collection-context.interface.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-context/workspace-collection-context.interface.ts new file mode 100644 index 0000000000..aaadac60de --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-context/workspace-collection-context.interface.ts @@ -0,0 +1,10 @@ +import type { UmbWorkspaceContextInterface } from './workspace-context.interface.js'; +import type { Observable } from '@umbraco-cms/backoffice/external/rxjs'; +import type { UmbContentTypeModel, UmbContentTypePropertyStructureManager } from '@umbraco-cms/backoffice/content-type'; + +export interface UmbWorkspaceCollectionContextInterface + extends UmbWorkspaceContextInterface { + contentTypeHasCollection: Observable; + getCollectionAlias(): string; + structure: UmbContentTypePropertyStructureManager; +} diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-context/workspace-collection-context.token.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-context/workspace-collection-context.token.ts new file mode 100644 index 0000000000..4cc4ba1460 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-context/workspace-collection-context.token.ts @@ -0,0 +1,16 @@ +import { UmbContextToken } from '@umbraco-cms/backoffice/context-api'; +import type { UmbContentTypeModel } from '@umbraco-cms/backoffice/content-type'; +import type { + UmbWorkspaceContextInterface, + UmbWorkspaceCollectionContextInterface, +} from '@umbraco-cms/backoffice/workspace'; + +export const UMB_WORKSPACE_COLLECTION_CONTEXT = new UmbContextToken< + UmbWorkspaceContextInterface, + UmbWorkspaceCollectionContextInterface +>( + 'UmbWorkspaceContext', + undefined, + (context): context is UmbWorkspaceCollectionContextInterface => + (context as UmbWorkspaceCollectionContextInterface).contentTypeHasCollection !== undefined, +); From d38d3e42fb61e59cbc8665acfe821384fa4af20a Mon Sep 17 00:00:00 2001 From: leekelleher Date: Mon, 11 Mar 2024 18:45:57 +0000 Subject: [PATCH 2/4] Implements the Workspace Collection Context interface on Documents and Media --- .../workspace/document-workspace.context.ts | 21 +++++++++++++------ .../workspace/media-workspace.context.ts | 17 +++++++++------ 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts index dd8f95e9b7..3b754584e3 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/document-workspace.context.ts @@ -14,11 +14,11 @@ import { UmbUnpublishDocumentEntityAction } from '../entity-actions/unpublish.ac import { UMB_DOCUMENT_WORKSPACE_ALIAS } from './manifests.js'; import { UMB_INVARIANT_CULTURE, UmbVariantId } from '@umbraco-cms/backoffice/variant'; import { UmbContentTypePropertyStructureManager } from '@umbraco-cms/backoffice/content-type'; -import { - UmbEditableWorkspaceContextBase, - UmbWorkspaceSplitViewManager, - type UmbVariantableWorkspaceContextInterface, - type UmbPublishableWorkspaceContextInterface, +import { UmbEditableWorkspaceContextBase, UmbWorkspaceSplitViewManager } from '@umbraco-cms/backoffice/workspace'; +import type { + UmbWorkspaceCollectionContextInterface, + UmbVariantableWorkspaceContextInterface, + UmbPublishableWorkspaceContextInterface, } from '@umbraco-cms/backoffice/workspace'; import { appendToFrozenArray, @@ -33,11 +33,15 @@ import { type Observable, firstValueFrom } from '@umbraco-cms/backoffice/externa import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; import { UmbReloadTreeItemChildrenRequestEntityActionEvent } from '@umbraco-cms/backoffice/tree'; import { UmbRequestReloadStructureForEntityEvent } from '@umbraco-cms/backoffice/event'; +import type { UmbDocumentTypeDetailModel } from '@umbraco-cms/backoffice/document-type'; type EntityType = UmbDocumentDetailModel; export class UmbDocumentWorkspaceContext extends UmbEditableWorkspaceContextBase - implements UmbVariantableWorkspaceContextInterface, UmbPublishableWorkspaceContextInterface + implements + UmbVariantableWorkspaceContextInterface, + UmbPublishableWorkspaceContextInterface, + UmbWorkspaceCollectionContextInterface { // public readonly repository = new UmbDocumentDetailRepository(this); @@ -64,6 +68,7 @@ export class UmbDocumentWorkspaceContext readonly contentTypeUnique = this.#currentData.asObservablePart((data) => data?.documentType.unique); readonly contentTypeHasCollection = this.#currentData.asObservablePart((data) => !!data?.documentType.collection); + readonly variants = this.#currentData.asObservablePart((data) => data?.variants ?? []); readonly urls = this.#currentData.asObservablePart((data) => data?.urls || []); @@ -163,6 +168,10 @@ export class UmbDocumentWorkspaceContext return data; } + getCollectionAlias() { + return 'Umb.Collection.Document'; + } + getData() { return this.#currentData.getValue(); } diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.context.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.context.ts index f36ba974b9..bf13bd9675 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.context.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/media-workspace.context.ts @@ -5,11 +5,11 @@ import { UmbMediaDetailRepository } from '../repository/index.js'; import type { UmbMediaDetailModel, UmbMediaVariantModel, UmbMediaVariantOptionModel } from '../types.js'; import { UMB_INVARIANT_CULTURE, UmbVariantId } from '@umbraco-cms/backoffice/variant'; import { UmbContentTypePropertyStructureManager } from '@umbraco-cms/backoffice/content-type'; -import { - UmbEditableWorkspaceContextBase, - UmbWorkspaceSplitViewManager, - type UmbVariantableWorkspaceContextInterface, +import type { + UmbWorkspaceCollectionContextInterface, + UmbVariantableWorkspaceContextInterface, } from '@umbraco-cms/backoffice/workspace'; +import { UmbEditableWorkspaceContextBase, UmbWorkspaceSplitViewManager } from '@umbraco-cms/backoffice/workspace'; import { appendToFrozenArray, jsonStringComparison, @@ -23,11 +23,12 @@ import { UmbLanguageCollectionRepository, type UmbLanguageDetailModel } from '@u import { UMB_ACTION_EVENT_CONTEXT } from '@umbraco-cms/backoffice/action'; import { UmbReloadTreeItemChildrenRequestEntityActionEvent } from '@umbraco-cms/backoffice/tree'; import { UmbRequestReloadStructureForEntityEvent } from '@umbraco-cms/backoffice/event'; +import type { UmbMediaTypeDetailModel } from '@umbraco-cms/backoffice/media-type'; type EntityType = UmbMediaDetailModel; export class UmbMediaWorkspaceContext extends UmbEditableWorkspaceContextBase - implements UmbVariantableWorkspaceContextInterface + implements UmbVariantableWorkspaceContextInterface, UmbWorkspaceCollectionContextInterface { // public readonly repository = new UmbMediaDetailRepository(this); @@ -51,7 +52,7 @@ export class UmbMediaWorkspaceContext readonly unique = this.#currentData.asObservablePart((data) => data?.unique); readonly contentTypeUnique = this.#currentData.asObservablePart((data) => data?.mediaType.unique); - readonly contentTypeCollection = this.#currentData.asObservablePart((data) => data?.mediaType.collection); + readonly contentTypeHasCollection = this.#currentData.asObservablePart((data) => !!data?.mediaType.collection); readonly variants = this.#currentData.asObservablePart((data) => data?.variants || []); @@ -146,6 +147,10 @@ export class UmbMediaWorkspaceContext return data; } + getCollectionAlias() { + return 'Umb.Collection.Media'; + } + getData() { return this.#currentData.getValue(); } From 62453f59d0936719e8646674e742ad36c69c51ab Mon Sep 17 00:00:00 2001 From: leekelleher Date: Mon, 11 Mar 2024 18:56:01 +0000 Subject: [PATCH 3/4] Combined the Document/Media "Workspace Has Collection" condition --- .../src/packages/core/workspace/manifests.ts | 2 + .../workspace-has-collection.condition.ts | 44 +++++++++++++++++++ ...ment-workspace-has-collection.condition.ts | 44 ------------------- .../documents/documents/conditions/index.ts | 1 - .../documents/conditions/manifests.ts | 3 -- .../src/packages/documents/documents/index.ts | 1 - .../packages/documents/documents/manifests.ts | 2 - .../documents/workspace/manifests.ts | 7 ++- .../packages/media/media/conditions/index.ts | 1 - .../media/media/conditions/manifests.ts | 3 -- ...edia-workspace-has-collection.condition.ts | 44 ------------------- .../src/packages/media/media/index.ts | 1 - .../src/packages/media/media/manifests.ts | 2 - .../media/media/workspace/manifests.ts | 7 ++- 14 files changed, 56 insertions(+), 106 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-has-collection.condition.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/conditions/document-workspace-has-collection.condition.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/conditions/index.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/documents/documents/conditions/manifests.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/media/media/conditions/index.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/media/media/conditions/manifests.ts delete mode 100644 src/Umbraco.Web.UI.Client/src/packages/media/media/conditions/media-workspace-has-collection.condition.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/manifests.ts index fdcf26b4c7..d7a4ef36ca 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/manifests.ts @@ -2,10 +2,12 @@ import { manifests as componentManifests } from './components/manifests.js'; import { manifests as workspaceModals } from './workspace-modal/manifests.js'; import { manifest as workspaceAliasCondition } from './workspace-alias.condition.js'; import { manifest as workspaceEntityTypeCondition } from './workspace-entity-type.condition.js'; +import { manifest as workspaceHasCollectionCondition } from './workspace-has-collection.condition.js'; export const manifests = [ ...componentManifests, ...workspaceModals, workspaceAliasCondition, workspaceEntityTypeCondition, + workspaceHasCollectionCondition, ]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-has-collection.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-has-collection.condition.ts new file mode 100644 index 0000000000..03555f0019 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/workspace-has-collection.condition.ts @@ -0,0 +1,44 @@ +import { UmbConditionBase } from '@umbraco-cms/backoffice/extension-registry'; +import type { + ManifestCondition, + UmbConditionConfigBase, + UmbConditionControllerArguments, + UmbExtensionCondition, +} from '@umbraco-cms/backoffice/extension-api'; +import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; +import { UMB_WORKSPACE_COLLECTION_CONTEXT } from '@umbraco-cms/backoffice/workspace'; + +export class UmbWorkspaceHasCollectionCondition + extends UmbConditionBase + implements UmbExtensionCondition +{ + constructor( + host: UmbControllerHost, + args: UmbConditionControllerArguments, + ) { + super(host, args); + + this.consumeContext(UMB_WORKSPACE_COLLECTION_CONTEXT, (context) => { + this.observe( + context.contentTypeHasCollection, + (hasCollection) => { + this.permitted = hasCollection; + }, + 'observeHasCollection', + ); + }); + } +} + +export type WorkspaceHasCollectionConditionConfig = UmbConditionConfigBase< + typeof UMB_WORKSPACE_HAS_COLLECTION_CONDITION +>; + +export const UMB_WORKSPACE_HAS_COLLECTION_CONDITION = 'Umb.Condition.WorkspaceHasCollection'; + +export const manifest: ManifestCondition = { + type: 'condition', + name: 'Workspace Has Collection Condition', + alias: UMB_WORKSPACE_HAS_COLLECTION_CONDITION, + api: UmbWorkspaceHasCollectionCondition, +}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/conditions/document-workspace-has-collection.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/conditions/document-workspace-has-collection.condition.ts deleted file mode 100644 index 8c7670b5d3..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/conditions/document-workspace-has-collection.condition.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { UMB_DOCUMENT_WORKSPACE_CONTEXT } from '../workspace/document-workspace.context-token.js'; -import { UmbConditionBase } from '@umbraco-cms/backoffice/extension-registry'; -import type { - ManifestCondition, - UmbConditionConfigBase, - UmbConditionControllerArguments, - UmbExtensionCondition, -} from '@umbraco-cms/backoffice/extension-api'; -import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; - -export class UmbDocumentWorkspaceHasCollectionCondition - extends UmbConditionBase - implements UmbExtensionCondition -{ - constructor( - host: UmbControllerHost, - args: UmbConditionControllerArguments, - ) { - super(host, args); - - this.consumeContext(UMB_DOCUMENT_WORKSPACE_CONTEXT, (context) => { - this.observe( - context.contentTypeHasCollection, - (hasCollection) => { - this.permitted = hasCollection; - }, - 'observeCollection', - ); - }); - } -} - -export type DocumentWorkspaceHasCollectionConditionConfig = UmbConditionConfigBase< - typeof UMB_DOCUMENT_WORKSPACE_HAS_COLLECTION_CONDITION ->; - -export const UMB_DOCUMENT_WORKSPACE_HAS_COLLECTION_CONDITION = 'Umb.Condition.DocumentWorkspaceHasCollection'; - -export const manifest: ManifestCondition = { - type: 'condition', - name: 'Document Workspace Has Collection Condition', - alias: UMB_DOCUMENT_WORKSPACE_HAS_COLLECTION_CONDITION, - api: UmbDocumentWorkspaceHasCollectionCondition, -}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/conditions/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/conditions/index.ts deleted file mode 100644 index 2e4679e22a..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/conditions/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { UMB_DOCUMENT_WORKSPACE_HAS_COLLECTION_CONDITION } from './document-workspace-has-collection.condition.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/conditions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/conditions/manifests.ts deleted file mode 100644 index 2935035044..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/conditions/manifests.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { manifest as docummentWorkspaceHasCollectionCondition } from './document-workspace-has-collection.condition.js'; - -export const manifests = [docummentWorkspaceHasCollectionCondition]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/index.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/index.ts index f8e2d03e2d..1367c634c4 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/index.ts @@ -8,7 +8,6 @@ export * from './user-permissions/index.js'; export * from './components/index.js'; export * from './entity.js'; export * from './entity-actions/index.js'; -export * from './conditions/index.js'; export * from './modals/index.js'; export * from './tree/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/manifests.ts index 4b900ea615..52b65d695d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/manifests.ts @@ -1,6 +1,5 @@ import { manifests as breadcrumbManifests } from './breadcrumb/manifests.js'; import { manifests as collectionManifests } from './collection/manifests.js'; -import { manifests as conditionManifests } from './conditions/manifests.js'; import { manifests as entityActionManifests } from './entity-actions/manifests.js'; import { manifests as entityBulkActionManifests } from './entity-bulk-actions/manifests.js'; import { manifests as menuItemManifests } from './menu-item/manifests.js'; @@ -16,7 +15,6 @@ import { manifests as workspaceManifests } from './workspace/manifests.js'; export const manifests = [ ...breadcrumbManifests, ...collectionManifests, - ...conditionManifests, ...entityActionManifests, ...entityBulkActionManifests, ...menuItemManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/manifests.ts index 9ab6259089..6d91660a03 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/workspace/manifests.ts @@ -1,5 +1,4 @@ import { UMB_DOCUMENT_ENTITY_TYPE } from '../entity.js'; -import { UMB_DOCUMENT_WORKSPACE_HAS_COLLECTION_CONDITION } from '../conditions/document-workspace-has-collection.condition.js'; //import { UmbUnpublishDocumentEntityAction } from '../entity-actions/unpublish.action.js'; //import { UmbPublishDocumentEntityAction } from '../entity-actions/publish.action.js'; import { UmbDocumentSaveAndPublishWorkspaceAction } from './actions/save-and-publish.action.js'; @@ -40,7 +39,11 @@ const workspaceViews: Array = [ }, conditions: [ { - alias: UMB_DOCUMENT_WORKSPACE_HAS_COLLECTION_CONDITION, + alias: 'Umb.Condition.WorkspaceAlias', + match: workspace.alias, + }, + { + alias: 'Umb.Condition.WorkspaceHasCollection', }, ], }, diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/conditions/index.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/conditions/index.ts deleted file mode 100644 index a6d19b94f4..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/conditions/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { UMB_MEDIA_WORKSPACE_HAS_COLLECTION_CONDITION } from './media-workspace-has-collection.condition.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/conditions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/conditions/manifests.ts deleted file mode 100644 index 839a888d34..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/conditions/manifests.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { manifest as mediaWorkspaceHasCollectionCondition } from './media-workspace-has-collection.condition.js'; - -export const manifests = [mediaWorkspaceHasCollectionCondition]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/conditions/media-workspace-has-collection.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/conditions/media-workspace-has-collection.condition.ts deleted file mode 100644 index 9641679f12..0000000000 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/conditions/media-workspace-has-collection.condition.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { UMB_MEDIA_WORKSPACE_CONTEXT } from '../workspace/media-workspace.context-token.js'; -import { UmbConditionBase } from '@umbraco-cms/backoffice/extension-registry'; -import type { - ManifestCondition, - UmbConditionConfigBase, - UmbConditionControllerArguments, - UmbExtensionCondition, -} from '@umbraco-cms/backoffice/extension-api'; -import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; - -export class UmbMediaWorkspaceHasCollectionCondition - extends UmbConditionBase - implements UmbExtensionCondition -{ - constructor( - host: UmbControllerHost, - args: UmbConditionControllerArguments, - ) { - super(host, args); - - this.consumeContext(UMB_MEDIA_WORKSPACE_CONTEXT, (context) => { - this.observe( - context.contentTypeCollection, - (collection) => { - this.permitted = !!collection?.unique; - }, - 'observeCollection', - ); - }); - } -} - -export type MediaWorkspaceHasCollectionConditionConfig = UmbConditionConfigBase< - typeof UMB_MEDIA_WORKSPACE_HAS_COLLECTION_CONDITION ->; - -export const UMB_MEDIA_WORKSPACE_HAS_COLLECTION_CONDITION = 'Umb.Condition.MediaWorkspaceHasCollection'; - -export const manifest: ManifestCondition = { - type: 'condition', - name: 'Media Workspace Has Collection Condition', - alias: UMB_MEDIA_WORKSPACE_HAS_COLLECTION_CONDITION, - api: UmbMediaWorkspaceHasCollectionCondition, -}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/index.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/index.ts index 00c3d17dda..2629a02d48 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/index.ts @@ -6,7 +6,6 @@ export * from './tracked-reference/index.js'; export * from './components/index.js'; export * from './entity.js'; export * from './utils/index.js'; -export * from './conditions/index.js'; export { UMB_MEDIA_TREE_ALIAS } from './tree/index.js'; export { UMB_MEDIA_COLLECTION_ALIAS } from './collection/index.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/manifests.ts index 222c4f8347..fcff2b6510 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/manifests.ts @@ -1,5 +1,4 @@ import { manifests as collectionManifests } from './collection/manifests.js'; -import { manifests as conditionManifests } from './conditions/manifests.js'; import { manifests as entityActionsManifests } from './entity-actions/manifests.js'; import { manifests as entityBulkActionsManifests } from './entity-bulk-actions/manifests.js'; import { manifests as menuItemManifests } from './menu-item/manifests.js'; @@ -11,7 +10,6 @@ import { manifests as workspaceManifests } from './workspace/manifests.js'; export const manifests = [ ...collectionManifests, - ...conditionManifests, ...entityActionsManifests, ...entityBulkActionsManifests, ...menuItemManifests, diff --git a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/manifests.ts index e702e90afc..a51cd4223b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/media/media/workspace/manifests.ts @@ -1,4 +1,3 @@ -import { UMB_MEDIA_WORKSPACE_HAS_COLLECTION_CONDITION } from '../conditions/media-workspace-has-collection.condition.js'; import { UmbSaveWorkspaceAction } from '@umbraco-cms/backoffice/workspace'; import type { ManifestWorkspace, @@ -31,7 +30,11 @@ const workspaceViews: Array = [ }, conditions: [ { - alias: UMB_MEDIA_WORKSPACE_HAS_COLLECTION_CONDITION, + alias: 'Umb.Condition.WorkspaceAlias', + match: workspace.alias, + }, + { + alias: 'Umb.Condition.WorkspaceHasCollection', }, ], }, From 490379868cfa88fc22d93de852b6ea2bee0ca71b Mon Sep 17 00:00:00 2001 From: leekelleher Date: Mon, 11 Mar 2024 18:56:48 +0000 Subject: [PATCH 4/4] Refactored Collection property-editor UI to use the Workspace Collection Context. --- ...perty-editor-ui-collection-view.element.ts | 26 +++++-------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/property-editor-ui-collection-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/property-editor-ui-collection-view.element.ts index d7f4dc65d5..98877f738f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/property-editor-ui-collection-view.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/property-editor/uis/collection-view/property-editor-ui-collection-view.element.ts @@ -8,7 +8,7 @@ import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; import { UMB_DOCUMENT_COLLECTION_ALIAS } from '@umbraco-cms/backoffice/document'; import { UMB_MEDIA_COLLECTION_ALIAS } from '@umbraco-cms/backoffice/media'; import { UMB_PROPERTY_CONTEXT } from '@umbraco-cms/backoffice/property'; -import { UMB_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/workspace'; +import { UMB_WORKSPACE_CONTEXT, UMB_WORKSPACE_COLLECTION_CONTEXT } from '@umbraco-cms/backoffice/workspace'; import type { UmbDocumentWorkspaceContext } from '@umbraco-cms/backoffice/document'; import type { UmbMediaWorkspaceContext } from '@umbraco-cms/backoffice/media'; import type { UmbPropertyEditorUiElement } from '@umbraco-cms/backoffice/extension-registry'; @@ -35,28 +35,16 @@ export class UmbPropertyEditorUICollectionViewElement extends UmbLitElement impl constructor() { super(); - // Gets the Data Type ID for the current property. - this.consumeContext(UMB_PROPERTY_CONTEXT, (propertyContext) => { - this.consumeContext(UMB_WORKSPACE_CONTEXT, (workspaceContext) => { - // TODO: [LK:2024-02-22] We need a solution that will allow the Collection property-editor - // to work in any workspace (that supports `unique` and `structure.getPropertyStructureByAlias`). - const entityType = workspaceContext.getEntityType(); - const contentWorkspaceContext = - entityType === 'media' - ? (workspaceContext as UmbMediaWorkspaceContext) - : (workspaceContext as UmbDocumentWorkspaceContext); + this.consumeContext(UMB_WORKSPACE_COLLECTION_CONTEXT, (workspaceContext) => { + this._collectionAlias = workspaceContext.getCollectionAlias(); - this._collectionAlias = entityType === 'media' ? UMB_MEDIA_COLLECTION_ALIAS : UMB_DOCUMENT_COLLECTION_ALIAS; - - this.observe(contentWorkspaceContext.unique, (unique) => { - if (this._config) { - this._config.unique = unique; - } - }); + this.consumeContext(UMB_PROPERTY_CONTEXT, (propertyContext) => { this.observe(propertyContext.alias, async (propertyAlias) => { if (propertyAlias) { - const property = await contentWorkspaceContext.structure.getPropertyStructureByAlias(propertyAlias); + // Gets the Data Type ID for the current property. + const property = await workspaceContext.structure.getPropertyStructureByAlias(propertyAlias); if (property && this._config) { + this._config.unique = workspaceContext.getUnique(); this._config.dataTypeId = property.dataType.unique; this.requestUpdate('_config'); }