From 28548b8e0e6ddcbd6b34208d6189f89db055e5dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Lyngs=C3=B8?= Date: Fri, 13 Sep 2024 14:14:20 +0200 Subject: [PATCH] workspace conditions --- .../extension-registry/conditions/types.ts | 10 +--- .../core/workspace/conditions/const.ts | 1 + .../core/workspace/conditions/index.ts | 6 +-- .../core/workspace/conditions/types.ts | 46 +++++++++++++++++++ .../conditions/workspace-alias.condition.ts | 17 +------ .../workspace-content-type-alias.condition.ts | 18 +------- .../workspace-entity-type.condition.ts | 11 +---- .../workspace-has-collection.condition.ts | 13 ++---- 8 files changed, 57 insertions(+), 65 deletions(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/const.ts create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/types.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/types.ts index 72219b0bb7..0939e4845c 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/types.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/extension-registry/conditions/types.ts @@ -4,11 +4,6 @@ import type { UmbSectionUserPermissionConditionConfig } from '../../section/cond import type { SectionAliasConditionConfig } from './section-alias.condition.js'; import type { SwitchConditionConfig } from './switch.condition.js'; import type { UmbMultipleAppLanguageConditionConfig } from './multiple-app-languages.condition.js'; -import type { - WorkspaceAliasConditionConfig, - WorkspaceEntityTypeConditionConfig, - WorkspaceContentTypeAliasConditionConfig, -} from '@umbraco-cms/backoffice/workspace'; import type { UmbConditionConfigBase } from '@umbraco-cms/backoffice/extension-api'; import type { UmbDocumentUserPermissionConditionConfig } from '@umbraco-cms/backoffice/document'; @@ -29,10 +24,7 @@ export type ConditionTypes = | UmbConditionConfigBase | UmbDocumentUserPermissionConditionConfig | UmbMultipleAppLanguageConditionConfig - | UmbSectionUserPermissionConditionConfig - | WorkspaceAliasConditionConfig - | WorkspaceContentTypeAliasConditionConfig - | WorkspaceEntityTypeConditionConfig; + | UmbSectionUserPermissionConditionConfig; type UnionOfProperties = T extends object ? T[keyof T] : never; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/const.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/const.ts new file mode 100644 index 0000000000..aa7f5b839f --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/const.ts @@ -0,0 +1 @@ +export const UMB_WORKSPACE_HAS_COLLECTION_CONDITION = 'Umb.Condition.WorkspaceHasCollection'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/index.ts index 9ec898b193..06c33f562f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/index.ts @@ -1,5 +1 @@ -export type { WorkspaceAliasConditionConfig } from './workspace-alias.condition.js'; -export type { WorkspaceEntityTypeConditionConfig } from './workspace-entity-type.condition.js'; -export type { WorkspaceHasCollectionConditionConfig } from './workspace-has-collection.condition.js'; -export type { WorkspaceContentTypeAliasConditionConfig as WorkspaceEntityContentTypeConditionConfig } from './workspace-content-type-alias.condition.js'; -export type { WorkspaceContentTypeAliasConditionConfig } from './workspace-content-type-alias.condition.js'; +export type * from './types.js'; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/types.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/types.ts new file mode 100644 index 0000000000..dc934238f1 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/types.ts @@ -0,0 +1,46 @@ +import type { UMB_WORKSPACE_HAS_COLLECTION_CONDITION } from './const.js'; +import type { UmbConditionConfigBase } from '@umbraco-cms/backoffice/extension-api'; + +export type WorkspaceAliasConditionConfig = UmbConditionConfigBase<'Umb.Condition.WorkspaceAlias'> & { + /** + * Define the workspace that this extension should be available in + * @example + * "Umb.Workspace.Document" + */ + match?: string; + /** + * Define one or more workspaces that this extension should be available in + * @example + * ["Umb.Workspace.Document", "Umb.Workspace.Media"] + */ + oneOf?: Array; +}; + +export type WorkspaceContentTypeAliasConditionConfig = + UmbConditionConfigBase<'Umb.Condition.WorkspaceContentTypeAlias'> & { + /** + * Define a content type alias in which workspace this extension should be available + * @example + * Depends on implementation, but i.e. "article", "image", "blockPage" + */ + match?: string; + /** + * Define one or more content type aliases in which workspace this extension should be available + * @example + * ["article", "image", "blockPage"] + */ + oneOf?: Array; + }; + +export type WorkspaceEntityTypeConditionConfig = UmbConditionConfigBase<'Umb.Condition.WorkspaceEntityType'> & { + /** + * Define the workspace that this extension should be available in + * @example + * "Document" + */ + match: string; +}; + +export type WorkspaceHasCollectionConditionConfig = UmbConditionConfigBase< + typeof UMB_WORKSPACE_HAS_COLLECTION_CONDITION +>; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-alias.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-alias.condition.ts index cd9026d329..e065f2d7a6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-alias.condition.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-alias.condition.ts @@ -1,8 +1,8 @@ import { UMB_WORKSPACE_CONTEXT, type UmbWorkspaceContext } from '../contexts/index.js'; +import type { WorkspaceAliasConditionConfig } from './types.js'; import { UmbConditionBase } from '@umbraco-cms/backoffice/extension-registry'; import type { ManifestCondition, - UmbConditionConfigBase, UmbConditionControllerArguments, UmbExtensionCondition, } from '@umbraco-cms/backoffice/extension-api'; @@ -34,21 +34,6 @@ export class UmbWorkspaceAliasCondition } } -export type WorkspaceAliasConditionConfig = UmbConditionConfigBase<'Umb.Condition.WorkspaceAlias'> & { - /** - * Define the workspace that this extension should be available in - * @example - * "Umb.Workspace.Document" - */ - match?: string; - /** - * Define one or more workspaces that this extension should be available in - * @example - * ["Umb.Workspace.Document", "Umb.Workspace.Media"] - */ - oneOf?: Array; -}; - export const manifest: ManifestCondition = { type: 'condition', name: 'Workspace Alias Condition', diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-content-type-alias.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-content-type-alias.condition.ts index eefd16baa0..c6bb6b8a4d 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-content-type-alias.condition.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-content-type-alias.condition.ts @@ -1,9 +1,9 @@ import { UmbConditionBase } from '../../extension-registry/conditions/condition-base.controller.js'; +import type { WorkspaceContentTypeAliasConditionConfig } from './types.js'; import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; import { UMB_PROPERTY_STRUCTURE_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/workspace'; import type { ManifestCondition, - UmbConditionConfigBase, UmbConditionControllerArguments, UmbExtensionCondition, } from '@umbraco-cms/backoffice/extension-api'; @@ -49,22 +49,6 @@ export class UmbWorkspaceContentTypeAliasCondition } } -export type WorkspaceContentTypeAliasConditionConfig = - UmbConditionConfigBase<'Umb.Condition.WorkspaceContentTypeAlias'> & { - /** - * Define a content type alias in which workspace this extension should be available - * @example - * Depends on implementation, but i.e. "article", "image", "blockPage" - */ - match?: string; - /** - * Define one or more content type aliases in which workspace this extension should be available - * @example - * ["article", "image", "blockPage"] - */ - oneOf?: Array; - }; - export const manifest: ManifestCondition = { type: 'condition', name: 'Workspace Content Type Alias Condition', diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-entity-type.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-entity-type.condition.ts index b8b510681f..45e61e61f6 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-entity-type.condition.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-entity-type.condition.ts @@ -1,8 +1,8 @@ import { UMB_WORKSPACE_CONTEXT } from '../contexts/index.js'; +import type { WorkspaceEntityTypeConditionConfig } from './types.js'; import { UmbConditionBase } from '@umbraco-cms/backoffice/extension-registry'; import type { ManifestCondition, - UmbConditionConfigBase, UmbConditionControllerArguments, UmbExtensionCondition, } from '@umbraco-cms/backoffice/extension-api'; @@ -20,15 +20,6 @@ export class UmbWorkspaceEntityTypeCondition } } -export type WorkspaceEntityTypeConditionConfig = UmbConditionConfigBase<'Umb.Condition.WorkspaceEntityType'> & { - /** - * Define the workspace that this extension should be available in - * @example - * "Document" - */ - match: string; -}; - export const manifest: ManifestCondition = { type: 'condition', name: 'Workspace Entity Type Condition', diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-has-collection.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-has-collection.condition.ts index ef1ef8c203..1ce9048884 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-has-collection.condition.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/workspace/conditions/workspace-has-collection.condition.ts @@ -1,13 +1,16 @@ import { UMB_COLLECTION_WORKSPACE_CONTEXT } from '../contexts/tokens/collection-workspace.context-token.js'; +import type { WorkspaceHasCollectionConditionConfig } from './types.js'; +import { UMB_WORKSPACE_HAS_COLLECTION_CONDITION } from './const.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'; +const ObserveSymbol = Symbol(); + export class UmbWorkspaceHasCollectionCondition extends UmbConditionBase implements UmbExtensionCondition @@ -21,18 +24,12 @@ export class UmbWorkspaceHasCollectionCondition (hasCollection) => { this.permitted = hasCollection; }, - 'observeHasCollection', + ObserveSymbol, ); }); } } -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',