From 906ce5510d8543ae2ecb9003b27c053b528eaabd Mon Sep 17 00:00:00 2001 From: Mads Rasmussen Date: Mon, 16 Oct 2023 21:02:36 +0200 Subject: [PATCH] add condition for resend invite --- .../user/user/conditions/manifests.ts | 8 +++- ...er-allow-resend-invite-action.condition.ts | 47 +++++++++++++++++++ .../user/user/entity-actions/manifests.ts | 5 ++ 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/user-allow-resend-invite-action.condition.ts 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 index 5595685474..4aa77928a4 100644 --- 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 @@ -1,5 +1,11 @@ import { manifest as userAllowDisableActionManifest } from './user-allow-disable-action.condition.js'; import { manifest as userAllowEnableActionManifest } from './user-allow-enable-action.condition.js'; import { manifest as userAllowUnlockActionManifest } from './user-allow-unlock-action.condition.js'; +import { manifest as userAllowResendInviteActionManifest } from './user-allow-resend-invite-action.condition.js'; -export const manifests = [userAllowDisableActionManifest, userAllowEnableActionManifest, userAllowUnlockActionManifest]; +export const manifests = [ + userAllowDisableActionManifest, + userAllowEnableActionManifest, + userAllowUnlockActionManifest, + userAllowResendInviteActionManifest, +]; diff --git a/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/user-allow-resend-invite-action.condition.ts b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/user-allow-resend-invite-action.condition.ts new file mode 100644 index 0000000000..c821c938e0 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/packages/user/user/conditions/user-allow-resend-invite-action.condition.ts @@ -0,0 +1,47 @@ +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 { isCurrentUser } from '@umbraco-cms/backoffice/current-user'; +import { + ManifestCondition, + UmbConditionConfigBase, + UmbConditionControllerArguments, + UmbExtensionCondition, +} from '@umbraco-cms/backoffice/extension-api'; +import { UMB_WORKSPACE_CONTEXT } from '@umbraco-cms/backoffice/workspace'; + +export class UmbUserAllowResendInviteActionCondition 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)); + }); + } + + async onUserDataChange(user: UmbUserDetail | undefined) { + if (!user || !user.id) { + this.permitted = false; + this.#onChange(); + return; + } + + this.permitted = user?.state === UserStateModel.INVITED; + this.#onChange(); + } +} + +export const manifest: ManifestCondition = { + type: 'condition', + name: 'User Allow Resend Invite Action Condition', + alias: 'Umb.Condition.User.AllowResendInviteAction', + api: UmbUserAllowResendInviteActionCondition, +}; 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 21e323d39d..35ef0bf431 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 @@ -108,6 +108,11 @@ const entityActions: Array = [ repositoryAlias: INVITE_USER_REPOSITORY_ALIAS, entityTypes: [UMB_USER_ENTITY_TYPE], }, + conditions: [ + { + alias: 'Umb.Condition.User.AllowResendInviteAction', + }, + ], }, ];