From f418c99fa1ebe750bc52acfc0be8475f3cfe5d7c Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 20 Nov 2023 17:05:34 +0100 Subject: [PATCH] add collection alias condition --- .../collection/collection-alias.condition.ts | 42 +++++++++++++++++++ .../src/packages/core/collection/index.ts | 2 + 2 files changed, 44 insertions(+) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/core/collection/collection-alias.condition.ts diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/collection/collection-alias.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/core/collection/collection-alias.condition.ts new file mode 100644 index 0000000000..56b2acfd96 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/core/collection/collection-alias.condition.ts @@ -0,0 +1,42 @@ +import { UMB_COLLECTION_CONTEXT } from './collection.context.js'; +import { UmbBaseController } from '@umbraco-cms/backoffice/controller-api'; +import { + ManifestCondition, + UmbConditionConfigBase, + UmbConditionControllerArguments, + UmbExtensionCondition, +} from '@umbraco-cms/backoffice/extension-api'; + +export class UmbCollectionAliasCondition extends UmbBaseController implements UmbExtensionCondition { + config: CollectionAliasConditionConfig; + permitted = false; + #onChange: () => void; + + constructor(args: UmbConditionControllerArguments) { + super(args.host); + this.config = args.config; + this.#onChange = args.onChange; + this.consumeContext(UMB_COLLECTION_CONTEXT, (context) => { + this.permitted = context.getAlias() === this.config.match; + this.#onChange(); + }); + } +} + +export type CollectionAliasConditionConfig = UmbConditionConfigBase<'Umb.Condition.CollectionAlias'> & { + /** + * The collection that this extension should be available in + * + * @example + * "Umb.Collection.User" + */ + match: string; +}; + +export const UMB_COLLECTION_ALIAS_CONDITION = 'Umb.Condition.CollectionAlias'; +export const manifest: ManifestCondition = { + type: 'condition', + name: 'Collection Alias Condition', + alias: 'Umb.Condition.CollectionAlias', + api: UmbCollectionAliasCondition, +}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/collection/index.ts b/src/Umbraco.Web.UI.Client/src/packages/core/collection/index.ts index 73ce324b54..7e5b1c53be 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/collection/index.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/collection/index.ts @@ -7,3 +7,5 @@ export * from './components/index.js'; export * from './collection.context.js'; export * from './collection-filter-model.interface.js'; export { type CollectionEntityTypeConditionConfig } from './collection-entity-type.condition.js'; + +export { UMB_COLLECTION_ALIAS_CONDITION } from './collection-alias.condition.js';