Separate workflow step details and run step details (#11069)
Workflows step details in workflows and versions should be different from the node tab in run. For most cases, it was using the same component. But for forms, it will be a different one. This PR: - renames form action into formBuilder. formFiller is coming - put code into a separated folder - creates a new component for node details
This commit is contained in:
@ -21,8 +21,8 @@ import { activeTabIdComponentState } from '@/ui/layout/tab/states/activeTabIdCom
|
|||||||
import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope';
|
import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope';
|
||||||
import { WORKFLOW_RUN_STEP_SIDE_PANEL_TAB_LIST_COMPONENT_ID } from '@/workflow/workflow-steps/constants/WorkflowRunStepSidePanelTabListComponentId';
|
import { WORKFLOW_RUN_STEP_SIDE_PANEL_TAB_LIST_COMPONENT_ID } from '@/workflow/workflow-steps/constants/WorkflowRunStepSidePanelTabListComponentId';
|
||||||
import { WorkflowRunTabId } from '@/workflow/workflow-steps/types/WorkflowRunTabId';
|
import { WorkflowRunTabId } from '@/workflow/workflow-steps/types/WorkflowRunTabId';
|
||||||
import { WORKFLOW_SERVERLESS_FUNCTION_TAB_LIST_COMPONENT_ID } from '@/workflow/workflow-steps/workflow-actions/constants/WorkflowServerlessFunctionTabListComponentId';
|
import { WORKFLOW_SERVERLESS_FUNCTION_TAB_LIST_COMPONENT_ID } from '@/workflow/workflow-steps/workflow-actions/code-action/constants/WorkflowServerlessFunctionTabListComponentId';
|
||||||
import { WorkflowServerlessFunctionTabId } from '@/workflow/workflow-steps/workflow-actions/types/WorkflowServerlessFunctionTabId';
|
import { WorkflowServerlessFunctionTabId } from '@/workflow/workflow-steps/workflow-actions/code-action/types/WorkflowServerlessFunctionTabId';
|
||||||
import { useRecoilCallback } from 'recoil';
|
import { useRecoilCallback } from 'recoil';
|
||||||
|
|
||||||
export const useCommandMenuCloseAnimationCompleteCleanup = () => {
|
export const useCommandMenuCloseAnimationCompleteCleanup = () => {
|
||||||
|
|||||||
@ -7,8 +7,8 @@ import { useWorkflowRunIdOrThrow } from '@/workflow/hooks/useWorkflowRunIdOrThro
|
|||||||
import { WorkflowStepContextProvider } from '@/workflow/states/context/WorkflowStepContext';
|
import { WorkflowStepContextProvider } from '@/workflow/states/context/WorkflowStepContext';
|
||||||
import { useWorkflowSelectedNodeOrThrow } from '@/workflow/workflow-diagram/hooks/useWorkflowSelectedNodeOrThrow';
|
import { useWorkflowSelectedNodeOrThrow } from '@/workflow/workflow-diagram/hooks/useWorkflowSelectedNodeOrThrow';
|
||||||
import { WorkflowRunStepInputDetail } from '@/workflow/workflow-steps/components/WorkflowRunStepInputDetail';
|
import { WorkflowRunStepInputDetail } from '@/workflow/workflow-steps/components/WorkflowRunStepInputDetail';
|
||||||
|
import { WorkflowRunStepNodeDetail } from '@/workflow/workflow-steps/components/WorkflowRunStepNodeDetail';
|
||||||
import { WorkflowRunStepOutputDetail } from '@/workflow/workflow-steps/components/WorkflowRunStepOutputDetail';
|
import { WorkflowRunStepOutputDetail } from '@/workflow/workflow-steps/components/WorkflowRunStepOutputDetail';
|
||||||
import { WorkflowStepDetail } from '@/workflow/workflow-steps/components/WorkflowStepDetail';
|
|
||||||
import { WORKFLOW_RUN_STEP_SIDE_PANEL_TAB_LIST_COMPONENT_ID } from '@/workflow/workflow-steps/constants/WorkflowRunStepSidePanelTabListComponentId';
|
import { WORKFLOW_RUN_STEP_SIDE_PANEL_TAB_LIST_COMPONENT_ID } from '@/workflow/workflow-steps/constants/WorkflowRunStepSidePanelTabListComponentId';
|
||||||
import {
|
import {
|
||||||
WorkflowRunTabId,
|
WorkflowRunTabId,
|
||||||
@ -82,8 +82,7 @@ export const CommandMenuWorkflowRunViewStep = () => {
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
{activeTabId === WorkflowRunTabId.NODE ? (
|
{activeTabId === WorkflowRunTabId.NODE ? (
|
||||||
<WorkflowStepDetail
|
<WorkflowRunStepNodeDetail
|
||||||
readonly
|
|
||||||
stepId={workflowSelectedNode}
|
stepId={workflowSelectedNode}
|
||||||
trigger={flow.trigger}
|
trigger={flow.trigger}
|
||||||
steps={flow.steps}
|
steps={flow.steps}
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { InputSchema } from '@/workflow/types/InputSchema';
|
import { InputSchema } from '@/workflow/types/InputSchema';
|
||||||
import { FunctionInput } from '@/workflow/workflow-steps/workflow-actions/types/FunctionInput';
|
import { FunctionInput } from '@/workflow/workflow-steps/workflow-actions/code-action/types/FunctionInput';
|
||||||
import { isDefined } from 'twenty-shared';
|
import { isDefined } from 'twenty-shared';
|
||||||
|
|
||||||
export const getDefaultFunctionInputFromInputSchema = (
|
export const getDefaultFunctionInputFromInputSchema = (
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import { getDefaultFunctionInputFromInputSchema } from '@/serverless-functions/utils/getDefaultFunctionInputFromInputSchema';
|
import { getDefaultFunctionInputFromInputSchema } from '@/serverless-functions/utils/getDefaultFunctionInputFromInputSchema';
|
||||||
import { getFunctionInputSchema } from '@/serverless-functions/utils/getFunctionInputSchema';
|
import { getFunctionInputSchema } from '@/serverless-functions/utils/getFunctionInputSchema';
|
||||||
import { FunctionInput } from '@/workflow/workflow-steps/workflow-actions/types/FunctionInput';
|
import { FunctionInput } from '@/workflow/workflow-steps/workflow-actions/code-action/types/FunctionInput';
|
||||||
import { isObject } from '@sniptt/guards';
|
import { isObject } from '@sniptt/guards';
|
||||||
import { isDefined } from 'twenty-shared';
|
import { isDefined } from 'twenty-shared';
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { FunctionInput } from '@/workflow/workflow-steps/workflow-actions/types/FunctionInput';
|
import { FunctionInput } from '@/workflow/workflow-steps/workflow-actions/code-action/types/FunctionInput';
|
||||||
import { isObject } from '@sniptt/guards';
|
import { isObject } from '@sniptt/guards';
|
||||||
|
|
||||||
export const mergeDefaultFunctionInputAndFunctionInput = ({
|
export const mergeDefaultFunctionInputAndFunctionInput = ({
|
||||||
|
|||||||
@ -1,22 +0,0 @@
|
|||||||
import { useFlowOrThrow } from '@/workflow/hooks/useFlowOrThrow';
|
|
||||||
import { WorkflowStepContextProvider } from '@/workflow/states/context/WorkflowStepContext';
|
|
||||||
import { useWorkflowSelectedNodeOrThrow } from '@/workflow/workflow-diagram/hooks/useWorkflowSelectedNodeOrThrow';
|
|
||||||
import { WorkflowStepDetail } from '@/workflow/workflow-steps/components/WorkflowStepDetail';
|
|
||||||
|
|
||||||
export const RightDrawerWorkflowViewStep = () => {
|
|
||||||
const flow = useFlowOrThrow();
|
|
||||||
const workflowSelectedNode = useWorkflowSelectedNodeOrThrow();
|
|
||||||
|
|
||||||
return (
|
|
||||||
<WorkflowStepContextProvider
|
|
||||||
value={{ workflowVersionId: flow.workflowVersionId }}
|
|
||||||
>
|
|
||||||
<WorkflowStepDetail
|
|
||||||
stepId={workflowSelectedNode}
|
|
||||||
trigger={flow.trigger}
|
|
||||||
steps={flow.steps}
|
|
||||||
readonly
|
|
||||||
/>
|
|
||||||
</WorkflowStepContextProvider>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
@ -0,0 +1,175 @@
|
|||||||
|
import { WorkflowAction, WorkflowTrigger } from '@/workflow/types/Workflow';
|
||||||
|
import { assertUnreachable } from '@/workflow/utils/assertUnreachable';
|
||||||
|
import { getStepDefinitionOrThrow } from '@/workflow/utils/getStepDefinitionOrThrow';
|
||||||
|
import { WorkflowActionServerlessFunction } from '@/workflow/workflow-steps/workflow-actions/code-action/components/WorkflowActionServerlessFunction';
|
||||||
|
import { WorkflowEditActionCreateRecord } from '@/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionCreateRecord';
|
||||||
|
import { WorkflowEditActionDeleteRecord } from '@/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionDeleteRecord';
|
||||||
|
import { WorkflowEditActionFindRecords } from '@/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionFindRecords';
|
||||||
|
import { WorkflowEditActionSendEmail } from '@/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionSendEmail';
|
||||||
|
import { WorkflowEditActionUpdateRecord } from '@/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionUpdateRecord';
|
||||||
|
import { WorkflowEditTriggerCronForm } from '@/workflow/workflow-trigger/components/WorkflowEditTriggerCronForm';
|
||||||
|
import { WorkflowEditTriggerDatabaseEventForm } from '@/workflow/workflow-trigger/components/WorkflowEditTriggerDatabaseEventForm';
|
||||||
|
import { WorkflowEditTriggerManualForm } from '@/workflow/workflow-trigger/components/WorkflowEditTriggerManualForm';
|
||||||
|
import { WorkflowEditTriggerWebhookForm } from '@/workflow/workflow-trigger/components/WorkflowEditTriggerWebhookForm';
|
||||||
|
import { isDefined } from 'twenty-shared';
|
||||||
|
|
||||||
|
type WorkflowRunStepNodeDetailProps = {
|
||||||
|
stepId: string;
|
||||||
|
trigger: WorkflowTrigger | null;
|
||||||
|
steps: Array<WorkflowAction> | null;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const WorkflowRunStepNodeDetail = ({
|
||||||
|
stepId,
|
||||||
|
trigger,
|
||||||
|
steps,
|
||||||
|
}: WorkflowRunStepNodeDetailProps) => {
|
||||||
|
const stepDefinition = getStepDefinitionOrThrow({
|
||||||
|
stepId,
|
||||||
|
trigger,
|
||||||
|
steps,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!isDefined(stepDefinition) || !isDefined(stepDefinition.definition)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (stepDefinition.type) {
|
||||||
|
case 'trigger': {
|
||||||
|
switch (stepDefinition.definition.type) {
|
||||||
|
case 'DATABASE_EVENT': {
|
||||||
|
return (
|
||||||
|
<WorkflowEditTriggerDatabaseEventForm
|
||||||
|
key={stepId}
|
||||||
|
trigger={stepDefinition.definition}
|
||||||
|
triggerOptions={{
|
||||||
|
readonly: true,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
case 'MANUAL': {
|
||||||
|
return (
|
||||||
|
<WorkflowEditTriggerManualForm
|
||||||
|
key={stepId}
|
||||||
|
trigger={stepDefinition.definition}
|
||||||
|
triggerOptions={{
|
||||||
|
readonly: true,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
case 'WEBHOOK': {
|
||||||
|
return (
|
||||||
|
<WorkflowEditTriggerWebhookForm
|
||||||
|
key={stepId}
|
||||||
|
trigger={stepDefinition.definition}
|
||||||
|
triggerOptions={{
|
||||||
|
readonly: true,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
case 'CRON': {
|
||||||
|
return (
|
||||||
|
<WorkflowEditTriggerCronForm
|
||||||
|
key={stepId}
|
||||||
|
trigger={stepDefinition.definition}
|
||||||
|
triggerOptions={{
|
||||||
|
readonly: true,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return assertUnreachable(
|
||||||
|
stepDefinition.definition,
|
||||||
|
`Expected the step to have an handler; ${JSON.stringify(stepDefinition)}`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
case 'action': {
|
||||||
|
switch (stepDefinition.definition.type) {
|
||||||
|
case 'CODE': {
|
||||||
|
return (
|
||||||
|
<WorkflowActionServerlessFunction
|
||||||
|
key={stepId}
|
||||||
|
action={stepDefinition.definition}
|
||||||
|
actionOptions={{
|
||||||
|
readonly: true,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
case 'SEND_EMAIL': {
|
||||||
|
return (
|
||||||
|
<WorkflowEditActionSendEmail
|
||||||
|
key={stepId}
|
||||||
|
action={stepDefinition.definition}
|
||||||
|
actionOptions={{
|
||||||
|
readonly: true,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
case 'CREATE_RECORD': {
|
||||||
|
return (
|
||||||
|
<WorkflowEditActionCreateRecord
|
||||||
|
key={stepId}
|
||||||
|
action={stepDefinition.definition}
|
||||||
|
actionOptions={{
|
||||||
|
readonly: true,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'UPDATE_RECORD': {
|
||||||
|
return (
|
||||||
|
<WorkflowEditActionUpdateRecord
|
||||||
|
key={stepId}
|
||||||
|
action={stepDefinition.definition}
|
||||||
|
actionOptions={{
|
||||||
|
readonly: true,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'DELETE_RECORD': {
|
||||||
|
return (
|
||||||
|
<WorkflowEditActionDeleteRecord
|
||||||
|
key={stepId}
|
||||||
|
action={stepDefinition.definition}
|
||||||
|
actionOptions={{
|
||||||
|
readonly: true,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'FIND_RECORDS': {
|
||||||
|
return (
|
||||||
|
<WorkflowEditActionFindRecords
|
||||||
|
key={stepId}
|
||||||
|
action={stepDefinition.definition}
|
||||||
|
actionOptions={{
|
||||||
|
readonly: true,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'FORM': {
|
||||||
|
// TODO: Implement form filler
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return assertUnreachable(
|
||||||
|
stepDefinition,
|
||||||
|
`Expected the step to have an handler; ${JSON.stringify(stepDefinition)}`,
|
||||||
|
);
|
||||||
|
};
|
||||||
@ -1,35 +1,18 @@
|
|||||||
import { WorkflowAction, WorkflowTrigger } from '@/workflow/types/Workflow';
|
import { WorkflowAction, WorkflowTrigger } from '@/workflow/types/Workflow';
|
||||||
import { assertUnreachable } from '@/workflow/utils/assertUnreachable';
|
import { assertUnreachable } from '@/workflow/utils/assertUnreachable';
|
||||||
import { getStepDefinitionOrThrow } from '@/workflow/utils/getStepDefinitionOrThrow';
|
import { getStepDefinitionOrThrow } from '@/workflow/utils/getStepDefinitionOrThrow';
|
||||||
|
import { WorkflowActionServerlessFunction } from '@/workflow/workflow-steps/workflow-actions/code-action/components/WorkflowActionServerlessFunction';
|
||||||
import { WorkflowEditActionCreateRecord } from '@/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionCreateRecord';
|
import { WorkflowEditActionCreateRecord } from '@/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionCreateRecord';
|
||||||
import { WorkflowEditActionDeleteRecord } from '@/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionDeleteRecord';
|
import { WorkflowEditActionDeleteRecord } from '@/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionDeleteRecord';
|
||||||
import { WorkflowEditActionFindRecords } from '@/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionFindRecords';
|
import { WorkflowEditActionFindRecords } from '@/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionFindRecords';
|
||||||
import { WorkflowEditActionSendEmail } from '@/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionSendEmail';
|
import { WorkflowEditActionSendEmail } from '@/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionSendEmail';
|
||||||
import { WorkflowEditActionUpdateRecord } from '@/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionUpdateRecord';
|
import { WorkflowEditActionUpdateRecord } from '@/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionUpdateRecord';
|
||||||
import { WorkflowEditActionForm } from '@/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionForm';
|
import { WorkflowEditActionFormBuilder } from '@/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder';
|
||||||
import { WorkflowEditTriggerCronForm } from '@/workflow/workflow-trigger/components/WorkflowEditTriggerCronForm';
|
import { WorkflowEditTriggerCronForm } from '@/workflow/workflow-trigger/components/WorkflowEditTriggerCronForm';
|
||||||
import { WorkflowEditTriggerDatabaseEventForm } from '@/workflow/workflow-trigger/components/WorkflowEditTriggerDatabaseEventForm';
|
import { WorkflowEditTriggerDatabaseEventForm } from '@/workflow/workflow-trigger/components/WorkflowEditTriggerDatabaseEventForm';
|
||||||
import { WorkflowEditTriggerManualForm } from '@/workflow/workflow-trigger/components/WorkflowEditTriggerManualForm';
|
import { WorkflowEditTriggerManualForm } from '@/workflow/workflow-trigger/components/WorkflowEditTriggerManualForm';
|
||||||
import { Suspense, lazy } from 'react';
|
|
||||||
import { isDefined } from 'twenty-shared';
|
|
||||||
import { RightDrawerSkeletonLoader } from '~/loading/components/RightDrawerSkeletonLoader';
|
|
||||||
import { WorkflowEditTriggerWebhookForm } from '@/workflow/workflow-trigger/components/WorkflowEditTriggerWebhookForm';
|
import { WorkflowEditTriggerWebhookForm } from '@/workflow/workflow-trigger/components/WorkflowEditTriggerWebhookForm';
|
||||||
|
import { isDefined } from 'twenty-shared';
|
||||||
const WorkflowEditActionServerlessFunction = lazy(() =>
|
|
||||||
import(
|
|
||||||
'@/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionServerlessFunction'
|
|
||||||
).then((module) => ({
|
|
||||||
default: module.WorkflowEditActionServerlessFunction,
|
|
||||||
})),
|
|
||||||
);
|
|
||||||
|
|
||||||
const WorkflowReadonlyActionServerlessFunction = lazy(() =>
|
|
||||||
import(
|
|
||||||
'@/workflow/workflow-steps/workflow-actions/components/WorkflowReadonlyActionServerlessFunction'
|
|
||||||
).then((module) => ({
|
|
||||||
default: module.WorkflowReadonlyActionServerlessFunction,
|
|
||||||
})),
|
|
||||||
);
|
|
||||||
|
|
||||||
type WorkflowStepDetailProps = {
|
type WorkflowStepDetailProps = {
|
||||||
stepId: string;
|
stepId: string;
|
||||||
@ -115,20 +98,11 @@ export const WorkflowStepDetail = ({
|
|||||||
switch (stepDefinition.definition.type) {
|
switch (stepDefinition.definition.type) {
|
||||||
case 'CODE': {
|
case 'CODE': {
|
||||||
return (
|
return (
|
||||||
<Suspense fallback={<RightDrawerSkeletonLoader />}>
|
<WorkflowActionServerlessFunction
|
||||||
{props.readonly ? (
|
key={stepId}
|
||||||
<WorkflowReadonlyActionServerlessFunction
|
action={stepDefinition.definition}
|
||||||
key={stepId}
|
actionOptions={props}
|
||||||
action={stepDefinition.definition}
|
/>
|
||||||
/>
|
|
||||||
) : (
|
|
||||||
<WorkflowEditActionServerlessFunction
|
|
||||||
key={stepId}
|
|
||||||
action={stepDefinition.definition}
|
|
||||||
actionOptions={props}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
</Suspense>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
case 'SEND_EMAIL': {
|
case 'SEND_EMAIL': {
|
||||||
@ -182,7 +156,7 @@ export const WorkflowStepDetail = ({
|
|||||||
|
|
||||||
case 'FORM': {
|
case 'FORM': {
|
||||||
return (
|
return (
|
||||||
<WorkflowEditActionForm
|
<WorkflowEditActionFormBuilder
|
||||||
key={stepId}
|
key={stepId}
|
||||||
action={stepDefinition.definition}
|
action={stepDefinition.definition}
|
||||||
actionOptions={props}
|
actionOptions={props}
|
||||||
|
|||||||
@ -0,0 +1,49 @@
|
|||||||
|
import { WorkflowCodeAction } from '@/workflow/types/Workflow';
|
||||||
|
import { lazy, Suspense } from 'react';
|
||||||
|
import { RightDrawerSkeletonLoader } from '~/loading/components/RightDrawerSkeletonLoader';
|
||||||
|
|
||||||
|
type WorkflowActionServerlessFunctionProps = {
|
||||||
|
action: WorkflowCodeAction;
|
||||||
|
actionOptions:
|
||||||
|
| {
|
||||||
|
readonly: true;
|
||||||
|
}
|
||||||
|
| {
|
||||||
|
readonly?: false;
|
||||||
|
onActionUpdate: (action: WorkflowCodeAction) => void;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const WorkflowEditActionServerlessFunction = lazy(() =>
|
||||||
|
import(
|
||||||
|
'@/workflow/workflow-steps/workflow-actions/code-action/components/WorkflowEditActionServerlessFunction'
|
||||||
|
).then((module) => ({
|
||||||
|
default: module.WorkflowEditActionServerlessFunction,
|
||||||
|
})),
|
||||||
|
);
|
||||||
|
|
||||||
|
const WorkflowReadonlyActionServerlessFunction = lazy(() =>
|
||||||
|
import(
|
||||||
|
'@/workflow/workflow-steps/workflow-actions/code-action/components/WorkflowReadonlyActionServerlessFunction'
|
||||||
|
).then((module) => ({
|
||||||
|
default: module.WorkflowReadonlyActionServerlessFunction,
|
||||||
|
})),
|
||||||
|
);
|
||||||
|
|
||||||
|
export const WorkflowActionServerlessFunction = ({
|
||||||
|
action,
|
||||||
|
actionOptions,
|
||||||
|
}: WorkflowActionServerlessFunctionProps) => {
|
||||||
|
return (
|
||||||
|
<Suspense fallback={<RightDrawerSkeletonLoader />}>
|
||||||
|
{actionOptions.readonly ? (
|
||||||
|
<WorkflowReadonlyActionServerlessFunction action={action} />
|
||||||
|
) : (
|
||||||
|
<WorkflowEditActionServerlessFunction
|
||||||
|
action={action}
|
||||||
|
actionOptions={actionOptions}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</Suspense>
|
||||||
|
);
|
||||||
|
};
|
||||||
@ -6,7 +6,7 @@ import { useWorkflowWithCurrentVersion } from '@/workflow/hooks/useWorkflowWithC
|
|||||||
import { workflowIdState } from '@/workflow/states/workflowIdState';
|
import { workflowIdState } from '@/workflow/states/workflowIdState';
|
||||||
import { WorkflowCodeAction } from '@/workflow/types/Workflow';
|
import { WorkflowCodeAction } from '@/workflow/types/Workflow';
|
||||||
import { WorkflowStepHeader } from '@/workflow/workflow-steps/components/WorkflowStepHeader';
|
import { WorkflowStepHeader } from '@/workflow/workflow-steps/components/WorkflowStepHeader';
|
||||||
import { setNestedValue } from '@/workflow/workflow-steps/workflow-actions/utils/setNestedValue';
|
import { setNestedValue } from '@/workflow/workflow-steps/workflow-actions/code-action/utils/setNestedValue';
|
||||||
|
|
||||||
import { CmdEnterActionButton } from '@/action-menu/components/CmdEnterActionButton';
|
import { CmdEnterActionButton } from '@/action-menu/components/CmdEnterActionButton';
|
||||||
import { ServerlessFunctionExecutionResult } from '@/serverless-functions/components/ServerlessFunctionExecutionResult';
|
import { ServerlessFunctionExecutionResult } from '@/serverless-functions/components/ServerlessFunctionExecutionResult';
|
||||||
@ -23,11 +23,11 @@ import { activeTabIdComponentState } from '@/ui/layout/tab/states/activeTabIdCom
|
|||||||
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
|
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
|
||||||
import { serverlessFunctionTestDataFamilyState } from '@/workflow/states/serverlessFunctionTestDataFamilyState';
|
import { serverlessFunctionTestDataFamilyState } from '@/workflow/states/serverlessFunctionTestDataFamilyState';
|
||||||
import { WorkflowStepBody } from '@/workflow/workflow-steps/components/WorkflowStepBody';
|
import { WorkflowStepBody } from '@/workflow/workflow-steps/components/WorkflowStepBody';
|
||||||
import { WorkflowEditActionServerlessFunctionFields } from '@/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionServerlessFunctionFields';
|
import { WorkflowEditActionServerlessFunctionFields } from '@/workflow/workflow-steps/workflow-actions/code-action/components/WorkflowEditActionServerlessFunctionFields';
|
||||||
import { WORKFLOW_SERVERLESS_FUNCTION_TAB_LIST_COMPONENT_ID } from '@/workflow/workflow-steps/workflow-actions/constants/WorkflowServerlessFunctionTabListComponentId';
|
import { WORKFLOW_SERVERLESS_FUNCTION_TAB_LIST_COMPONENT_ID } from '@/workflow/workflow-steps/workflow-actions/code-action/constants/WorkflowServerlessFunctionTabListComponentId';
|
||||||
import { WorkflowServerlessFunctionTabId } from '@/workflow/workflow-steps/workflow-actions/types/WorkflowServerlessFunctionTabId';
|
import { WorkflowServerlessFunctionTabId } from '@/workflow/workflow-steps/workflow-actions/code-action/types/WorkflowServerlessFunctionTabId';
|
||||||
|
import { getWrongExportedFunctionMarkers } from '@/workflow/workflow-steps/workflow-actions/code-action/utils/getWrongExportedFunctionMarkers';
|
||||||
import { getActionIcon } from '@/workflow/workflow-steps/workflow-actions/utils/getActionIcon';
|
import { getActionIcon } from '@/workflow/workflow-steps/workflow-actions/utils/getActionIcon';
|
||||||
import { getWrongExportedFunctionMarkers } from '@/workflow/workflow-steps/workflow-actions/utils/getWrongExportedFunctionMarkers';
|
|
||||||
import { WorkflowVariablePicker } from '@/workflow/workflow-variables/components/WorkflowVariablePicker';
|
import { WorkflowVariablePicker } from '@/workflow/workflow-variables/components/WorkflowVariablePicker';
|
||||||
import { useTheme } from '@emotion/react';
|
import { useTheme } from '@emotion/react';
|
||||||
import styled from '@emotion/styled';
|
import styled from '@emotion/styled';
|
||||||
@ -2,7 +2,7 @@ import { FormNestedFieldInputContainer } from '@/object-record/record-field/form
|
|||||||
import { FormTextFieldInput } from '@/object-record/record-field/form-types/components/FormTextFieldInput';
|
import { FormTextFieldInput } from '@/object-record/record-field/form-types/components/FormTextFieldInput';
|
||||||
import { VariablePickerComponent } from '@/object-record/record-field/form-types/types/VariablePickerComponent';
|
import { VariablePickerComponent } from '@/object-record/record-field/form-types/types/VariablePickerComponent';
|
||||||
import { InputLabel } from '@/ui/input/components/InputLabel';
|
import { InputLabel } from '@/ui/input/components/InputLabel';
|
||||||
import { FunctionInput } from '@/workflow/workflow-steps/workflow-actions/types/FunctionInput';
|
import { FunctionInput } from '@/workflow/workflow-steps/workflow-actions/code-action/types/FunctionInput';
|
||||||
import styled from '@emotion/styled';
|
import styled from '@emotion/styled';
|
||||||
import { isObject } from '@sniptt/guards';
|
import { isObject } from '@sniptt/guards';
|
||||||
|
|
||||||
@ -5,9 +5,9 @@ import { WorkflowStepHeader } from '@/workflow/workflow-steps/components/Workflo
|
|||||||
|
|
||||||
import { INDEX_FILE_PATH } from '@/serverless-functions/constants/IndexFilePath';
|
import { INDEX_FILE_PATH } from '@/serverless-functions/constants/IndexFilePath';
|
||||||
import { WorkflowStepBody } from '@/workflow/workflow-steps/components/WorkflowStepBody';
|
import { WorkflowStepBody } from '@/workflow/workflow-steps/components/WorkflowStepBody';
|
||||||
import { WorkflowEditActionServerlessFunctionFields } from '@/workflow/workflow-steps/workflow-actions/components/WorkflowEditActionServerlessFunctionFields';
|
import { WorkflowEditActionServerlessFunctionFields } from '@/workflow/workflow-steps/workflow-actions/code-action/components/WorkflowEditActionServerlessFunctionFields';
|
||||||
|
import { getWrongExportedFunctionMarkers } from '@/workflow/workflow-steps/workflow-actions/code-action/utils/getWrongExportedFunctionMarkers';
|
||||||
import { getActionIcon } from '@/workflow/workflow-steps/workflow-actions/utils/getActionIcon';
|
import { getActionIcon } from '@/workflow/workflow-steps/workflow-actions/utils/getActionIcon';
|
||||||
import { getWrongExportedFunctionMarkers } from '@/workflow/workflow-steps/workflow-actions/utils/getWrongExportedFunctionMarkers';
|
|
||||||
import { useTheme } from '@emotion/react';
|
import { useTheme } from '@emotion/react';
|
||||||
import styled from '@emotion/styled';
|
import styled from '@emotion/styled';
|
||||||
import { Monaco } from '@monaco-editor/react';
|
import { Monaco } from '@monaco-editor/react';
|
||||||
@ -1,4 +1,4 @@
|
|||||||
import { getWrongExportedFunctionMarkers } from '@/workflow/workflow-steps/workflow-actions/utils/getWrongExportedFunctionMarkers';
|
import { getWrongExportedFunctionMarkers } from '@/workflow/workflow-steps/workflow-actions/code-action/utils/getWrongExportedFunctionMarkers';
|
||||||
|
|
||||||
describe('getWrongExportedFunctionMarkers', () => {
|
describe('getWrongExportedFunctionMarkers', () => {
|
||||||
it('should return marker when no exported function', () => {
|
it('should return marker when no exported function', () => {
|
||||||
@ -1,4 +1,4 @@
|
|||||||
import { setNestedValue } from '@/workflow/workflow-steps/workflow-actions/utils/setNestedValue';
|
import { setNestedValue } from '@/workflow/workflow-steps/workflow-actions/code-action/utils/setNestedValue';
|
||||||
|
|
||||||
describe('setNestedValue', () => {
|
describe('setNestedValue', () => {
|
||||||
it('should set nested value properly', () => {
|
it('should set nested value properly', () => {
|
||||||
@ -24,7 +24,7 @@ import { useDebouncedCallback } from 'use-debounce';
|
|||||||
|
|
||||||
import { v4 } from 'uuid';
|
import { v4 } from 'uuid';
|
||||||
|
|
||||||
export type WorkflowEditActionFormProps = {
|
export type WorkflowEditActionFormBuilderProps = {
|
||||||
action: WorkflowFormAction;
|
action: WorkflowFormAction;
|
||||||
actionOptions:
|
actionOptions:
|
||||||
| {
|
| {
|
||||||
@ -99,10 +99,10 @@ const StyledAddFieldContainer = styled.div`
|
|||||||
gap: ${({ theme }) => theme.spacing(0.5)};
|
gap: ${({ theme }) => theme.spacing(0.5)};
|
||||||
`;
|
`;
|
||||||
|
|
||||||
export const WorkflowEditActionForm = ({
|
export const WorkflowEditActionFormBuilder = ({
|
||||||
action,
|
action,
|
||||||
actionOptions,
|
actionOptions,
|
||||||
}: WorkflowEditActionFormProps) => {
|
}: WorkflowEditActionFormBuilderProps) => {
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { getIcon } = useIcons();
|
const { getIcon } = useIcons();
|
||||||
const { t } = useLingui();
|
const { t } = useLingui();
|
||||||
@ -1,7 +1,7 @@
|
|||||||
import { FormFieldInputContainer } from '@/object-record/record-field/form-types/components/FormFieldInputContainer';
|
import { FormFieldInputContainer } from '@/object-record/record-field/form-types/components/FormFieldInputContainer';
|
||||||
import { FormSelectFieldInput } from '@/object-record/record-field/form-types/components/FormSelectFieldInput';
|
import { FormSelectFieldInput } from '@/object-record/record-field/form-types/components/FormSelectFieldInput';
|
||||||
import { InputLabel } from '@/ui/input/components/InputLabel';
|
import { InputLabel } from '@/ui/input/components/InputLabel';
|
||||||
import { WorkflowFormActionField } from '@/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionForm';
|
import { WorkflowFormActionField } from '@/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder';
|
||||||
import { WorkflowFormFieldSettingsByType } from '@/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowFormFieldSettingsByType';
|
import { WorkflowFormFieldSettingsByType } from '@/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowFormFieldSettingsByType';
|
||||||
import { getDefaultFormFieldSettings } from '@/workflow/workflow-steps/workflow-actions/form-action/utils/getDefaultFormFieldSettings';
|
import { getDefaultFormFieldSettings } from '@/workflow/workflow-steps/workflow-actions/form-action/utils/getDefaultFormFieldSettings';
|
||||||
import { useTheme } from '@emotion/react';
|
import { useTheme } from '@emotion/react';
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { WorkflowFormActionField } from '@/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionForm';
|
import { WorkflowFormActionField } from '@/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder';
|
||||||
import { assertUnreachable, FieldMetadataType } from 'twenty-shared';
|
import { assertUnreachable, FieldMetadataType } from 'twenty-shared';
|
||||||
import { WorkflowFormFieldSettingsNumber } from './WorkflowFormFieldSettingsNumber';
|
import { WorkflowFormFieldSettingsNumber } from './WorkflowFormFieldSettingsNumber';
|
||||||
import { WorkflowFormFieldSettingsText } from './WorkflowFormFieldSettingsText';
|
import { WorkflowFormFieldSettingsText } from './WorkflowFormFieldSettingsText';
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { WorkflowFormAction } from '@/workflow/types/Workflow';
|
import { WorkflowFormAction } from '@/workflow/types/Workflow';
|
||||||
import { WorkflowEditActionForm } from '@/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionForm';
|
import { WorkflowEditActionFormBuilder } from '@/workflow/workflow-steps/workflow-actions/form-action/components/WorkflowEditActionFormBuilder';
|
||||||
import { Meta, StoryObj } from '@storybook/react';
|
import { Meta, StoryObj } from '@storybook/react';
|
||||||
import { expect, fn, within } from '@storybook/test';
|
import { expect, fn, within } from '@storybook/test';
|
||||||
import { FieldMetadataType } from 'twenty-shared';
|
import { FieldMetadataType } from 'twenty-shared';
|
||||||
@ -43,9 +43,9 @@ const DEFAULT_ACTION = {
|
|||||||
},
|
},
|
||||||
} satisfies WorkflowFormAction;
|
} satisfies WorkflowFormAction;
|
||||||
|
|
||||||
const meta: Meta<typeof WorkflowEditActionForm> = {
|
const meta: Meta<typeof WorkflowEditActionFormBuilder> = {
|
||||||
title: 'Modules/Workflow/Actions/Form/WorkflowEditActionForm',
|
title: 'Modules/Workflow/Actions/Form/WorkflowEditActionFormBuilder',
|
||||||
component: WorkflowEditActionForm,
|
component: WorkflowEditActionFormBuilder,
|
||||||
parameters: {
|
parameters: {
|
||||||
msw: graphqlMocks,
|
msw: graphqlMocks,
|
||||||
},
|
},
|
||||||
@ -62,7 +62,7 @@ const meta: Meta<typeof WorkflowEditActionForm> = {
|
|||||||
|
|
||||||
export default meta;
|
export default meta;
|
||||||
|
|
||||||
type Story = StoryObj<typeof WorkflowEditActionForm>;
|
type Story = StoryObj<typeof WorkflowEditActionFormBuilder>;
|
||||||
|
|
||||||
export const Default: Story = {
|
export const Default: Story = {
|
||||||
args: {
|
args: {
|
||||||
Reference in New Issue
Block a user