Skip to content

Commit c42328e

Browse files
authored
Add signal workflow to workflow actions (#904)
1 parent a15ec26 commit c42328e

File tree

6 files changed

+49
-1
lines changed

6 files changed

+49
-1
lines changed

src/config/dynamic/resolvers/schemas/resolver-schemas.ts

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ const resolverSchemas: ResolverSchemas = {
3838
returnType: z.object({
3939
cancel: workflowActionsEnabledValueSchema,
4040
terminate: workflowActionsEnabledValueSchema,
41+
signal: workflowActionsEnabledValueSchema,
4142
restart: workflowActionsEnabledValueSchema,
4243
reset: workflowActionsEnabledValueSchema,
4344
}),

src/config/dynamic/resolvers/workflow-actions-enabled.ts

+1
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,6 @@ export default async function workflowActionsEnabled(
1515
cancel: 'ENABLED',
1616
restart: 'ENABLED',
1717
reset: 'ENABLED',
18+
signal: 'ENABLED',
1819
};
1920
}

src/config/dynamic/resolvers/workflow-actions-enabled.types.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import type WORKFLOW_ACTIONS_DISABLED_VALUES_CONFIG from './workflow-actions-disabled-values.config';
22

3-
export type WorkflowActionID = 'cancel' | 'terminate' | 'restart' | 'reset';
3+
export type WorkflowActionID =
4+
| 'cancel'
5+
| 'terminate'
6+
| 'restart'
7+
| 'reset'
8+
| 'signal';
49

510
export type WorkflowActionsEnabledResolverParams = {
611
domain: string;

src/utils/config/__fixtures__/resolved-config-values.ts

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ const mockResolvedConfigValues: LoadedConfigResolvedValues = {
3030
WORKFLOW_ACTIONS_ENABLED: {
3131
terminate: 'ENABLED',
3232
cancel: 'ENABLED',
33+
signal: 'ENABLED',
3334
restart: 'ENABLED',
3435
reset: 'ENABLED',
3536
},

src/views/workflow-actions/config/workflow-actions.config.ts

+39
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
MdPowerSettingsNew,
66
MdOutlineRestartAlt,
77
MdRefresh,
8+
MdOutlineWifiTethering,
89
} from 'react-icons/md';
910

1011
import { type CancelWorkflowResponse } from '@/route-handlers/cancel-workflow/cancel-workflow.types';
@@ -20,6 +21,12 @@ import {
2021
type ResetWorkflowSubmissionData,
2122
type ResetWorkflowFormData,
2223
} from '../workflow-action-reset-form/workflow-action-reset-form.types';
24+
import { signalWorkflowFormSchema } from '../workflow-action-signal-form/schemas/signal-workflow-form-schema';
25+
import WorkflowActionSignalForm from '../workflow-action-signal-form/workflow-action-signal-form';
26+
import {
27+
type SignalWorkflowSubmissionData,
28+
type SignalWorkflowFormData,
29+
} from '../workflow-action-signal-form/workflow-action-signal-form.types';
2330
import { type WorkflowAction } from '../workflow-actions.types';
2431

2532
const cancelWorkflowActionConfig: WorkflowAction<CancelWorkflowResponse> = {
@@ -69,6 +76,37 @@ const terminateWorkflowActionConfig: WorkflowAction<TerminateWorkflowResponse> =
6976
renderSuccessMessage: () => 'Workflow has been terminated.',
7077
};
7178

79+
const signalWorkflowActionConfig: WorkflowAction<
80+
unknown,
81+
SignalWorkflowFormData,
82+
SignalWorkflowSubmissionData
83+
> = {
84+
id: 'signal',
85+
label: 'Signal',
86+
subtitle: 'Send a signal to the workflow',
87+
modal: {
88+
text: 'Provide data to running workflows using signals',
89+
docsLink: {
90+
text: 'Learn more about signals',
91+
href: 'https://cadenceworkflow.io/docs/go-client/signals',
92+
},
93+
withForm: true,
94+
form: WorkflowActionSignalForm,
95+
formSchema: signalWorkflowFormSchema,
96+
transformFormDataToSubmission: (formData) => formData,
97+
},
98+
icon: MdOutlineWifiTethering,
99+
getRunnableStatus: (workflow) =>
100+
getWorkflowIsCompleted(
101+
workflow.workflowExecutionInfo?.closeEvent?.attributes ?? ''
102+
)
103+
? 'NOT_RUNNABLE_WORKFLOW_CLOSED'
104+
: 'RUNNABLE',
105+
apiRoute: 'signal',
106+
renderSuccessMessage: ({ inputParams }) =>
107+
`Successfully sent signal "${inputParams.submissionData.signalName}"`,
108+
};
109+
72110
const restartWorkflowActionConfig: WorkflowAction<RestartWorkflowResponse> = {
73111
id: 'restart',
74112
label: 'Restart',
@@ -136,6 +174,7 @@ export const resetWorkflowActionConfig: WorkflowAction<
136174
const workflowActionsConfig = [
137175
cancelWorkflowActionConfig,
138176
terminateWorkflowActionConfig,
177+
signalWorkflowActionConfig,
139178
restartWorkflowActionConfig,
140179
resetWorkflowActionConfig,
141180
] as const satisfies WorkflowAction<any, any, any>[];

src/views/workflow-actions/workflow-actions-menu/__tests__/workflow-actions-menu.test.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ describe(WorkflowActionsMenu.name, () => {
6363
actionsEnabledConfig: {
6464
cancel: 'DISABLED_DEFAULT',
6565
terminate: 'DISABLED_DEFAULT',
66+
signal: 'DISABLED_DEFAULT',
6667
restart: 'ENABLED',
6768
reset: 'ENABLED',
6869
},

0 commit comments

Comments
 (0)