diff --git a/packages/client/src/v2-events/features/events/actions/quick-actions/useQuickActionModal.tsx b/packages/client/src/v2-events/features/events/actions/quick-actions/useQuickActionModal.tsx
index 7c776998a1d..e9fa8a579f2 100644
--- a/packages/client/src/v2-events/features/events/actions/quick-actions/useQuickActionModal.tsx
+++ b/packages/client/src/v2-events/features/events/actions/quick-actions/useQuickActionModal.tsx
@@ -19,6 +19,7 @@ import {
TertiaryButton
} from '@opencrvs/components/lib/buttons'
import { Icon, IconProps } from '@opencrvs/components/src/Icon'
+import { Stack } from '@opencrvs/components/lib/Stack'
import {
ActionType,
CustomActionConfig,
@@ -157,15 +158,17 @@ function QuickActionModal({
width={898}
onClose={() => close({ result: false })}
>
-
-
- {config.description ? intl.formatMessage(config.description) : null}
-
+
+
+ {config.description ? intl.formatMessage(config.description) : null}
+
+
+
)
}
diff --git a/packages/client/src/v2-events/utils.ts b/packages/client/src/v2-events/utils.ts
index 178d0914379..13bf05c87b3 100644
--- a/packages/client/src/v2-events/utils.ts
+++ b/packages/client/src/v2-events/utils.ts
@@ -23,6 +23,8 @@ import {
SystemVariables,
Scope,
ActionScopes,
+ ConfigurableActionScopes,
+ parseConfigurableScope,
WorkqueueConfigWithoutQuery,
joinValues,
UUID,
@@ -232,7 +234,14 @@ export enum CoreWorkqueues {
}
export function hasOutboxWorkqueue(scopes: Scope[]) {
- return scopes.some((scope) => ActionScopes.safeParse(scope).success)
+ const hasLiteralActionScopes = scopes.some(
+ (scope) => ActionScopes.safeParse(scope).success
+ )
+ const parsedScopes = scopes.map(parseConfigurableScope)
+ const hasConfigurableActionScopes = parsedScopes.some(
+ (scope) => ConfigurableActionScopes.safeParse(scope).success
+ )
+ return hasLiteralActionScopes || hasConfigurableActionScopes
}
export function hasDraftWorkqueue(scopes: Scope[]) {
diff --git a/packages/commons/src/conditionals/conditionals.test.ts b/packages/commons/src/conditionals/conditionals.test.ts
index cfd70d0612a..2cd388dc562 100644
--- a/packages/commons/src/conditionals/conditionals.test.ts
+++ b/packages/commons/src/conditionals/conditionals.test.ts
@@ -1048,6 +1048,9 @@ describe('"flag" conditionals', () => {
expect(validate(flag(InherentFlags.CORRECTION_REQUESTED), params)).toBe(
false
)
+ expect(
+ validate(not(flag(InherentFlags.CORRECTION_REQUESTED)), params)
+ ).toBe(true)
})
it('validation fails if params dont include flags', () => {
diff --git a/packages/commons/src/events/EventConfig.ts b/packages/commons/src/events/EventConfig.ts
index bed2710b42d..f5d2aafb70e 100644
--- a/packages/commons/src/events/EventConfig.ts
+++ b/packages/commons/src/events/EventConfig.ts
@@ -18,7 +18,7 @@ import { DeclarationFormConfig } from './FormConfig'
import { FieldType } from './FieldType'
import { FieldReference } from './FieldConfig'
-import { FlagConfig } from './Flag'
+import { FlagConfig, InherentFlags } from './Flag'
/**
* Description of event features defined by the country. Includes configuration for process steps and forms involved.
@@ -134,6 +134,9 @@ export const EventConfig = z
}
}
+ const isInherentFlag = (value: unknown): value is InherentFlags =>
+ Object.values(InherentFlags).includes(value as InherentFlags)
+
// Validate that all referenced action flags are configured in the event flags array.
const configuredFlagIds = event.flags.map((flag) => flag.id)
const actionFlagIds = event.actions.flatMap((action) =>
@@ -141,10 +144,13 @@ export const EventConfig = z
)
for (const actionFlagId of actionFlagIds) {
- if (!configuredFlagIds.includes(actionFlagId)) {
+ const isConfigured = configuredFlagIds.includes(actionFlagId)
+ const isInherent = isInherentFlag(actionFlagId)
+
+ if (!isConfigured && !isInherent) {
ctx.addIssue({
code: 'custom',
- message: `Action flag id must match a configured flag in the flags array. Invalid action flag ID for event '${event.id}': '${actionFlagId}'`,
+ message: `Action flag id must match an inherent flag or a configured flag in the flags array. Invalid action flag ID for event '${event.id}': '${actionFlagId}'`,
path: ['actions']
})
}
diff --git a/packages/commons/src/events/Flag.ts b/packages/commons/src/events/Flag.ts
index 010291de413..8b526afa207 100644
--- a/packages/commons/src/events/Flag.ts
+++ b/packages/commons/src/events/Flag.ts
@@ -79,7 +79,7 @@ export type FlagConfig = z.infer
* Configuration for a flag action, which is executed when the action is performed.
*/
export const ActionFlagConfig = z.object({
- id: CustomFlag,
+ id: Flag,
operation: z
.enum(['add', 'remove'])
.describe('Operation to perform on the flag.'),
diff --git a/packages/commons/src/events/state/utils.ts b/packages/commons/src/events/state/utils.ts
index 45c4aae03ca..8f5c82bd1d9 100644
--- a/packages/commons/src/events/state/utils.ts
+++ b/packages/commons/src/events/state/utils.ts
@@ -93,7 +93,8 @@ const updateActions = ActionTypes.extract([
ActionType.REJECT,
ActionType.ARCHIVE,
ActionType.PRINT_CERTIFICATE,
- ActionType.REQUEST_CORRECTION
+ ActionType.REQUEST_CORRECTION,
+ ActionType.CUSTOM
])
/**
diff --git a/packages/commons/src/icons.ts b/packages/commons/src/icons.ts
index ddb7392a31e..b15d9384ab5 100644
--- a/packages/commons/src/icons.ts
+++ b/packages/commons/src/icons.ts
@@ -83,6 +83,7 @@ export const AvailableIcons = z.enum([
'Plus',
'Printer',
'SignOut',
+ 'Stamp',
'Star',
'Target',
'TextT',
diff --git a/packages/commons/src/scopes.ts b/packages/commons/src/scopes.ts
index ae6b613f94a..0746b0fabbe 100644
--- a/packages/commons/src/scopes.ts
+++ b/packages/commons/src/scopes.ts
@@ -327,6 +327,12 @@ const ConfigurableRawScopes = z.discriminatedUnion('type', [
CustomActionScope
])
+export const ConfigurableActionScopes = z.discriminatedUnion('type', [
+ // @TODO - Record scope holds non-action scopes as well e.g., `record.read`
+ RecordScope,
+ CustomActionScope
+])
+
type ConfigurableRawScopes = z.infer
export type ConfigurableScopeType = ConfigurableRawScopes['type']
diff --git a/packages/components/src/Icon/all-icons.ts b/packages/components/src/Icon/all-icons.ts
index 4f8dd67eb5e..11ff11811a9 100644
--- a/packages/components/src/Icon/all-icons.ts
+++ b/packages/components/src/Icon/all-icons.ts
@@ -91,6 +91,7 @@ export {
Users,
WarningCircle,
Webcam,
- X
+ X,
+ Stamp
} from 'phosphor-react'
export * from './custom-icons'