0144553667
In this PR: - Add support for manual triggers in the backend - Add a right drawer to let users select the type of trigger they want - Create a specific right drawer for database event triggers - Create a right drawer for manual triggers; let the user select where the manual trigger should be made available - Create a default trigger as soon as the user selects the type of trigger they want. It prevents the user to see empty selects for record type and event type. By default, the database event trigger will be set to "company.created". It should be visible enough for users to understand what happens and choose another record type or event type. https://github.com/user-attachments/assets/29a21985-1823-4890-9eb3-e4f876459c7a
111 lines
3.3 KiB
TypeScript
111 lines
3.3 KiB
TypeScript
import { WorkflowEditActionFormSendEmail } from '@/workflow/components/WorkflowEditActionFormSendEmail';
|
|
import { WorkflowEditActionFormServerlessFunction } from '@/workflow/components/WorkflowEditActionFormServerlessFunction';
|
|
import { WorkflowEditTriggerDatabaseEventForm } from '@/workflow/components/WorkflowEditTriggerDatabaseEventForm';
|
|
import { WorkflowEditTriggerManualForm } from '@/workflow/components/WorkflowEditTriggerManualForm';
|
|
import {
|
|
WorkflowAction,
|
|
WorkflowTrigger,
|
|
WorkflowVersion,
|
|
} from '@/workflow/types/Workflow';
|
|
import { assertUnreachable } from '@/workflow/utils/assertUnreachable';
|
|
import { getStepDefinitionOrThrow } from '@/workflow/utils/getStepDefinitionOrThrow';
|
|
import { isDefined } from 'twenty-ui';
|
|
|
|
type WorkflowStepDetailProps =
|
|
| {
|
|
stepId: string;
|
|
workflowVersion: WorkflowVersion;
|
|
readonly: true;
|
|
onTriggerUpdate?: undefined;
|
|
onActionUpdate?: undefined;
|
|
}
|
|
| {
|
|
stepId: string;
|
|
workflowVersion: WorkflowVersion;
|
|
readonly?: false;
|
|
onTriggerUpdate: (trigger: WorkflowTrigger) => void;
|
|
onActionUpdate: (action: WorkflowAction) => void;
|
|
};
|
|
|
|
export const WorkflowStepDetail = ({
|
|
stepId,
|
|
workflowVersion,
|
|
...props
|
|
}: WorkflowStepDetailProps) => {
|
|
const stepDefinition = getStepDefinitionOrThrow({
|
|
stepId,
|
|
workflowVersion,
|
|
});
|
|
if (!isDefined(stepDefinition)) {
|
|
return null;
|
|
}
|
|
|
|
switch (stepDefinition.type) {
|
|
case 'trigger': {
|
|
if (!isDefined(stepDefinition.definition)) {
|
|
throw new Error(
|
|
'Expected the trigger to be defined at this point. Ensure the trigger has been set with a default value before trying to edit it.',
|
|
);
|
|
}
|
|
|
|
switch (stepDefinition.definition.type) {
|
|
case 'DATABASE_EVENT': {
|
|
return (
|
|
<WorkflowEditTriggerDatabaseEventForm
|
|
trigger={stepDefinition.definition}
|
|
// eslint-disable-next-line react/jsx-props-no-spreading
|
|
{...props}
|
|
/>
|
|
);
|
|
}
|
|
case 'MANUAL': {
|
|
return (
|
|
<WorkflowEditTriggerManualForm
|
|
trigger={stepDefinition.definition}
|
|
// eslint-disable-next-line react/jsx-props-no-spreading
|
|
{...props}
|
|
/>
|
|
);
|
|
}
|
|
}
|
|
|
|
return assertUnreachable(
|
|
stepDefinition.definition,
|
|
`Expected the step to have an handler; ${JSON.stringify(stepDefinition)}`,
|
|
);
|
|
}
|
|
case 'action': {
|
|
switch (stepDefinition.definition.type) {
|
|
case 'CODE': {
|
|
return (
|
|
<WorkflowEditActionFormServerlessFunction
|
|
action={stepDefinition.definition}
|
|
// eslint-disable-next-line react/jsx-props-no-spreading
|
|
{...props}
|
|
/>
|
|
);
|
|
}
|
|
case 'SEND_EMAIL': {
|
|
return (
|
|
<WorkflowEditActionFormSendEmail
|
|
action={stepDefinition.definition}
|
|
// eslint-disable-next-line react/jsx-props-no-spreading
|
|
{...props}
|
|
/>
|
|
);
|
|
}
|
|
}
|
|
|
|
return assertUnreachable(
|
|
stepDefinition.definition,
|
|
`Expected the step to have an handler; ${JSON.stringify(stepDefinition)}`,
|
|
);
|
|
}
|
|
}
|
|
|
|
return assertUnreachable(
|
|
stepDefinition,
|
|
`Expected the step to have an handler; ${JSON.stringify(stepDefinition)}`,
|
|
);
|
|
};
|