+60
@@ -0,0 +1,60 @@
|
||||
import { useAtomFamilyStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomFamilyStateValue';
|
||||
import { useSetAtomFamilyState } from '@/ui/utilities/state/jotai/hooks/useSetAtomFamilyState';
|
||||
import { logicFunctionTestDataFamilyState } from '@/workflow/workflow-steps/workflow-actions/code-action/states/logicFunctionTestDataFamilyState';
|
||||
import { useEffect } from 'react';
|
||||
import { type InputJsonSchema } from 'twenty-shared/logic-function';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
import { getFunctionInputFromInputSchema } from 'twenty-shared/workflow';
|
||||
import { useLogicFunctionForm } from '@/logic-functions/hooks/useLogicFunctionForm';
|
||||
|
||||
export const LogicFunctionTestInputInitEffect = ({
|
||||
logicFunctionId,
|
||||
}: {
|
||||
logicFunctionId: string;
|
||||
}) => {
|
||||
const { logicFunction } = useLogicFunctionForm({ logicFunctionId });
|
||||
|
||||
const toolInputSchema = logicFunction?.toolInputSchema;
|
||||
|
||||
const logicFunctionTestData = useAtomFamilyStateValue(
|
||||
logicFunctionTestDataFamilyState,
|
||||
logicFunctionId,
|
||||
);
|
||||
|
||||
const setLogicFunctionTestData = useSetAtomFamilyState(
|
||||
logicFunctionTestDataFamilyState,
|
||||
logicFunctionId,
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
if (!logicFunctionTestData.shouldInitInput) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isDefined(toolInputSchema)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const schemaArray: InputJsonSchema[] = Array.isArray(toolInputSchema)
|
||||
? toolInputSchema
|
||||
: [toolInputSchema];
|
||||
|
||||
const defaultInput = getFunctionInputFromInputSchema(schemaArray)[0];
|
||||
|
||||
if (!isDefined(defaultInput)) {
|
||||
return;
|
||||
}
|
||||
|
||||
setLogicFunctionTestData((prev) => ({
|
||||
...prev,
|
||||
input: defaultInput as { [field: string]: any },
|
||||
shouldInitInput: false,
|
||||
}));
|
||||
}, [
|
||||
toolInputSchema,
|
||||
logicFunctionTestData.shouldInitInput,
|
||||
setLogicFunctionTestData,
|
||||
]);
|
||||
|
||||
return null;
|
||||
};
|
||||
@@ -42,11 +42,19 @@ export const useExecuteLogicFunction = ({
|
||||
logicFunctionTestDataFamilyState,
|
||||
logicFunctionId,
|
||||
);
|
||||
|
||||
const setLogicFunctionTestData = useSetAtomFamilyState(
|
||||
logicFunctionTestDataFamilyState,
|
||||
logicFunctionId,
|
||||
);
|
||||
|
||||
const updateLogicFunctionInput = (input: object) => {
|
||||
setLogicFunctionTestData((prev) => ({
|
||||
...prev,
|
||||
input,
|
||||
}));
|
||||
};
|
||||
|
||||
const executeLogicFunction = async () => {
|
||||
if (isExecuting) {
|
||||
return;
|
||||
@@ -94,5 +102,10 @@ export const useExecuteLogicFunction = ({
|
||||
}
|
||||
};
|
||||
|
||||
return { executeLogicFunction, isExecuting };
|
||||
return {
|
||||
executeLogicFunction,
|
||||
updateLogicFunctionInput,
|
||||
logicFunctionTestData,
|
||||
isExecuting,
|
||||
};
|
||||
};
|
||||
|
||||
+1
-11
@@ -1,4 +1,3 @@
|
||||
import { useExecuteLogicFunction } from '@/logic-functions/hooks/useExecuteLogicFunction';
|
||||
import {
|
||||
type LogicFunctionFormValues,
|
||||
useLogicFunctionUpdateFormState,
|
||||
@@ -10,23 +9,16 @@ import {
|
||||
} from 'twenty-shared/logic-function';
|
||||
import { useDebouncedCallback } from 'use-debounce';
|
||||
|
||||
export const useLogicFunctionEditor = ({
|
||||
export const useLogicFunctionForm = ({
|
||||
logicFunctionId,
|
||||
executeCallback,
|
||||
}: {
|
||||
logicFunctionId: string;
|
||||
executeCallback?: (result: object) => void;
|
||||
}) => {
|
||||
const { updateLogicFunction } = usePersistLogicFunction();
|
||||
|
||||
const { formValues, setFormValues, logicFunction, loading } =
|
||||
useLogicFunctionUpdateFormState({ logicFunctionId });
|
||||
|
||||
const { executeLogicFunction, isExecuting } = useExecuteLogicFunction({
|
||||
logicFunctionId,
|
||||
callback: executeCallback,
|
||||
});
|
||||
|
||||
const handleSave = useDebouncedCallback(async () => {
|
||||
await updateLogicFunction({
|
||||
input: {
|
||||
@@ -74,7 +66,5 @@ export const useLogicFunctionEditor = ({
|
||||
loading,
|
||||
handleSave,
|
||||
onChange,
|
||||
executeLogicFunction,
|
||||
isExecuting,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user