diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/manifests.ts new file mode 100644 index 0000000000..018793b44e --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/manifests.ts @@ -0,0 +1,4 @@ +import { manifest as userIsDisabledManifest } from './user-allow-enable-action.condition.js'; +import { manifest as userIsActiveManifest } from './user-allow-disable-action.condition.js'; + +export const manifests = [userIsDisabledManifest, userIsActiveManifest]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/user-allow-disable-action.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/user-allow-disable-action.condition.ts new file mode 100644 index 0000000000..9418b6c985 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/user-allow-disable-action.condition.ts @@ -0,0 +1,40 @@ +import { UmbUserDetail } from '../types.js'; +import { UmbUserWorkspaceContext } from '../workspace/user-workspace.context.js'; +import { UserStateModel } from '@umbraco-cms/backoffice/backend-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/controller-api'; +import { + ManifestCondition, + UmbConditionConfigBase, + UmbConditionControllerArguments, + UmbExtensionCondition, +} from '@umbraco-cms/backoffice/extension-api'; +import { UMB_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/workspace'; + +export class UmbUserAllowDisableActionCondition extends UmbBaseController implements UmbExtensionCondition { + config: UmbConditionConfigBase; + permitted = false; + #onChange: () => void; + + constructor(args: UmbConditionControllerArguments) { + super(args.host); + this.config = args.config; + this.#onChange = args.onChange; + + this.consumeContext(UMB_WORKSPACE_CONTEXT, (context) => { + const userContext = context as UmbUserWorkspaceContext; + this.observe(userContext.data, (data) => this.onUserDataChange(data)); + }); + } + + onUserDataChange(user: UmbUserDetail | undefined) { + this.permitted = user?.state !== UserStateModel.DISABLED; + this.#onChange(); + } +} + +export const manifest: ManifestCondition = { + type: 'condition', + name: 'User Allow Disable Action Condition', + alias: 'Umb.Condition.User.AllowDisableAction', + api: UmbUserAllowDisableActionCondition, +}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/user-allow-enable-action.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/user-allow-enable-action.condition.ts new file mode 100644 index 0000000000..c3a4b1ec3b --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/user-allow-enable-action.condition.ts @@ -0,0 +1,40 @@ +import { UmbUserDetail } from '../types.js'; +import { UmbUserWorkspaceContext } from '../workspace/user-workspace.context.js'; +import { UserStateModel } from '@umbraco-cms/backoffice/backend-api'; +import { UmbBaseController } from '@umbraco-cms/backoffice/controller-api'; +import { + ManifestCondition, + UmbConditionConfigBase, + UmbConditionControllerArguments, + UmbExtensionCondition, +} from '@umbraco-cms/backoffice/extension-api'; +import { UMB_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/workspace'; + +export class UmbUserAllowEnableActionCondition extends UmbBaseController implements UmbExtensionCondition { + config: UmbConditionConfigBase; + permitted = false; + #onChange: () => void; + + constructor(args: UmbConditionControllerArguments) { + super(args.host); + this.config = args.config; + this.#onChange = args.onChange; + + this.consumeContext(UMB_WORKSPACE_CONTEXT, (context) => { + const userContext = context as UmbUserWorkspaceContext; + this.observe(userContext.data, (data) => this.onUserDataChange(data)); + }); + } + + onUserDataChange(user: UmbUserDetail | undefined) { + this.permitted = user?.state === UserStateModel.DISABLED; + this.#onChange(); + } +} + +export const manifest: ManifestCondition = { + type: 'condition', + name: 'User Allow Enable Action Condition', + alias: 'Umb.Condition.User.AllowEnableAction', + api: UmbUserAllowEnableActionCondition, +}; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/manifests.ts index 8760543db2..39b1b6d04b 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/entity-actions/manifests.ts @@ -37,6 +37,11 @@ const entityActions: Array = [ repositoryAlias: ENABLE_USER_REPOSITORY_ALIAS, entityTypes: [UMB_USER_ENTITY_TYPE], }, + conditions: [ + { + alias: 'Umb.Condition.User.AllowEnableAction', + }, + ], }, { type: 'entityAction', @@ -50,6 +55,11 @@ const entityActions: Array = [ repositoryAlias: DISABLE_USER_REPOSITORY_ALIAS, entityTypes: [UMB_USER_ENTITY_TYPE], }, + conditions: [ + { + alias: 'Umb.Condition.User.AllowDisableAction', + }, + ], }, { type: 'entityAction', diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/manifests.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/manifests.ts index a2b2ab6f34..5df3013681 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/user/user/manifests.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/manifests.ts @@ -4,6 +4,7 @@ import { manifests as modalManifests } from './modals/manifests.js'; import { manifests as sectionViewManifests } from './section-view/manifests.js'; import { manifests as entityActionsManifests } from './entity-actions/manifests.js'; import { manifests as entityBulkActionManifests } from './entity-bulk-actions/manifests.js'; +import { manifests as conditionsManifests } from './conditions/manifests.js'; export const manifests = [ ...repositoryManifests, @@ -12,4 +13,5 @@ export const manifests = [ ...sectionViewManifests, ...entityActionsManifests, ...entityBulkActionManifests, + ...conditionsManifests, ];