diff --git a/17/umbraco-cms/customizing/extending-overview/extension-types/condition.md b/17/umbraco-cms/customizing/extending-overview/extension-types/condition.md index b5ab9d51621..8fb35401251 100644 --- a/17/umbraco-cms/customizing/extending-overview/extension-types/condition.md +++ b/17/umbraco-cms/customizing/extending-overview/extension-types/condition.md @@ -1,7 +1,6 @@ --- description: >- - Learn how to declare requirements for your extensions using the Extension - Conditions. + Learn how to declare requirements for your extensions using the Extension Conditions. --- # Extension Conditions @@ -14,22 +13,23 @@ For information on how to utilize conditions in your Manifest, see the [Utilizin The following conditions are available out of the box, for all extension types that support Conditions. -* `Umb.Condition.Switch` - Toggles on and off based on the `frequency` set in seconds. -* `Umb.Condition.MultipleAppLanguages` - Requires the app to have more than one language, such as a multi-language site. -* `Umb.Condition.SectionAlias` - Requires the current Section Alias to match the one specified. -* `Umb.Condition.MenuAlias` - Requires the current Menu Alias to match the one specified. -* `Umb.Condition.WorkspaceAlias` - Requires the current Workspace Alias to match the one specified. -* `Umb.Condition.WorkspaceEntityType` - Requires the current workspace to work on the given Entity Type. Examples: 'document', 'block' or 'user'. -* `Umb.Condition.WorkspaceContentTypeAlias` - Requires the current workspace to be based on a Content Type which Alias matches the one specified. -* `Umb.Condition.Workspace.ContentHasProperties` - Requires the Content Type of the current Workspace to have properties. -* `Umb.Condition.WorkspaceHasCollection` - Requires the current Workspace to have a Collection. -* `Umb.Condition.WorkspaceEntityIsNew` - Requires the current Workspace data to be new, not yet persisted on the server. -* `Umb.Condition.EntityIsTrashed` - Requires the current entity to be trashed. -* `Umb.Condition.EntityIsNotTrashed` - Requires the current entity to not be trashed. -* `Umb.Condition.SectionUserPermission` - Requires the current user to have permissions to the given Section Alias. -* `Umb.Condition.UserPermission.Document` - Requires the current user to have specific Document permissions. Example: 'Umb.Document.Save'. -* `Umb.Condition.CurrentUser.GroupId` - Requires the current user to belong to a specific group by GUID. Accepts `match` (GUID), `oneOf` (array), `allOf` (array), and `noneOf` (array). Example: '8d2b3c4d-4f1f-4b1f-8e3d-4a6b7b8c4f1e'. -* `Umb.Condition.CurrentUser.IsAdmin` - Requires the current user to be an admin as defined by the backend, for example, that they belong to the Administrator group. +- `Umb.Condition.Switch` - Toggles on and off based on the `frequency` set in seconds. +- `Umb.Condition.MultipleAppLanguages` - Requires the app to have more than one language, such as a multi-language site. +- `Umb.Condition.SectionAlias` - Requires the current Section Alias to match the one specified. +- `Umb.Condition.MenuAlias` - Requires the current Menu Alias to match the one specified. +- `Umb.Condition.WorkspaceAlias` - Requires the current Workspace Alias to match the one specified. +- `Umb.Condition.WorkspaceEntityType` - Requires the current workspace to work on the given Entity Type. Examples: 'document', 'block', or 'user'. +- `Umb.Condition.WorkspaceContentTypeAlias` - Requires the current workspace to be based on a Content Type whose Alias matches the one specified. +- `Umb.Condition.WorkspaceContentTypeUnique` - Requires the current workspace to be based on a Content Type that uniquely matches the one specified. +- `Umb.Condition.Workspace.ContentHasProperties` - Requires the Content Type of the current Workspace to have properties. +- `Umb.Condition.WorkspaceHasCollection` - Requires the current Workspace to have a Collection. +- `Umb.Condition.WorkspaceEntityIsNew` - Requires the current Workspace data to be new, not yet persisted on the server. +- `Umb.Condition.EntityIsTrashed` - Requires the current entity to be trashed. +- `Umb.Condition.EntityIsNotTrashed` - Requires the current entity not to be trashed. +- `Umb.Condition.SectionUserPermission` - Requires the current user to have permissions to the given Section Alias. +- `Umb.Condition.UserPermission.Document` - Requires the current user to have specific Document permissions. Example: 'Umb.Document.Save'. +- `Umb.Condition.CurrentUser.GroupId` - Requires the current user to belong to a specific group by GUID. Accepts `match` (GUID), `oneOf` (array), `allOf` (array), and `noneOf` (array). Example: '8d2b3c4d-4f1f-4b1f-8e3d-4a6b7b8c4f1e'. +- `Umb.Condition.CurrentUser.IsAdmin` - Requires the current user to be an admin as defined by the backend, for example, that they belong to the Administrator group. ## Make your own Conditions @@ -37,27 +37,34 @@ You can make your own Conditions by creating a class that implements the `UmbExt ```typescript import { - UmbConditionConfigBase, - UmbConditionControllerArguments, - UmbExtensionCondition -} from '@umbraco-cms/backoffice/extension-api'; -import { UmbConditionBase } from '@umbraco-cms/backoffice/extension-registry'; -import { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api'; - -export type MyExtensionConditionConfig = UmbConditionConfigBase<'My.Condition.CustomName'> & { - match?: string; -}; - -export class MyExtensionCondition extends UmbConditionBase implements UmbExtensionCondition { - constructor(host: UmbControllerHost, args: UmbConditionControllerArguments) { - super(host, args); - - // enable extension after 10 seconds - setTimeout(() => { - this.permitted = true; - args.onChange(); - }, 10000); - } + UmbConditionConfigBase, + UmbConditionControllerArguments, + UmbExtensionCondition, +} from "@umbraco-cms/backoffice/extension-api"; +import { UmbConditionBase } from "@umbraco-cms/backoffice/extension-registry"; +import { UmbControllerHost } from "@umbraco-cms/backoffice/controller-api"; + +export type MyExtensionConditionConfig = + UmbConditionConfigBase<"My.Condition.CustomName"> & { + match?: string; + }; + +export class MyExtensionCondition + extends UmbConditionBase + implements UmbExtensionCondition +{ + constructor( + host: UmbControllerHost, + args: UmbConditionControllerArguments + ) { + super(host, args); + + // enable extension after 10 seconds + setTimeout(() => { + this.permitted = true; + args.onChange(); + }, 10000); + } } // Declare the Condition Configuration Type in the global UmbExtensionConditionConfigMap interface: @@ -74,10 +81,10 @@ The Condition then needs to be registered in the Extension Registry: ```typescript export const manifest: UmbExtensionManifest = { - type: 'condition', - name: 'My Condition', - alias: 'My.Condition.CustomName', - api: MyExtensionCondition, + type: "condition", + name: "My Condition", + alias: "My.Condition.CustomName", + api: MyExtensionCondition, }; ``` @@ -85,20 +92,20 @@ Finally, you can make use of your condition in any manifests: ```typescript export const manifest: UmbExtensionManifest = { - type: 'workspaceAction', - name: 'example-workspace-action', - alias: 'My.Example.WorkspaceAction', - elementName: 'my-workspace-action-element', - conditions: [ - { - alias: 'Umb.Condition.SectionAlias', - match: 'My.Example.Workspace' - }, - { - alias: 'My.Condition.CustomName' - } - ] -} + type: "workspaceAction", + name: "example-workspace-action", + alias: "My.Example.WorkspaceAction", + elementName: "my-workspace-action-element", + conditions: [ + { + alias: "Umb.Condition.SectionAlias", + match: "My.Example.Workspace", + }, + { + alias: "My.Condition.CustomName", + }, + ], +}; ``` As shown in the code above, the configuration property `match` isn't used for our condition. We can do this by replacing the timeout with some other check: @@ -106,15 +113,21 @@ As shown in the code above, the configuration property `match` isn't used for ou ```typescript // ... -export class MyExtensionCondition extends UmbConditionBase implements UmbExtensionCondition { - constructor(host: UmbControllerHost, args: UmbConditionControllerArguments) { - super(host, args); - - if (args.config.match === 'Yes') { - this.permitted = true; - args.onChange(); +export class MyExtensionCondition + extends UmbConditionBase + implements UmbExtensionCondition +{ + constructor( + host: UmbControllerHost, + args: UmbConditionControllerArguments + ) { + super(host, args); + + if (args.config.match === "Yes") { + this.permitted = true; + args.onChange(); + } } - } } // ... @@ -124,13 +137,13 @@ With all that in place, the configuration can look like shown below: ```typescript { - // ... - conditions: [ - // ... - { - alias: 'My.Condition.CustomName', - match: 'Yes' - } - ] + // ... + conditions: [ + // ... + { + alias: "My.Condition.CustomName", + match: "Yes", + }, + ]; } ```