Files
twenty/packages/twenty-front/src/modules/settings/logic-functions/components/tabs/SettingsLogicFunctionTestTab.tsx
T
martmull 7293d4c1f8 Fix missing test input values (#18424)
- refactor
- fix issue
2026-03-05 14:36:36 +01:00

93 lines
2.8 KiB
TypeScript

import { LogicFunctionExecutionResult } from '@/logic-functions/components/LogicFunctionExecutionResult';
import { LogicFunctionLogs } from '@/logic-functions/components/LogicFunctionLogs';
import { styled } from '@linaria/react';
import { useLingui } from '@lingui/react/macro';
import { H2Title, IconPlayerPlay } from 'twenty-ui/display';
import { Button, CodeEditor, CoreEditorHeader } from 'twenty-ui/input';
import { Section } from 'twenty-ui/layout';
import { themeCssVariables } from 'twenty-ui/theme-constants';
import { useExecuteLogicFunction } from '@/logic-functions/hooks/useExecuteLogicFunction';
const StyledInputsContainer = styled.div`
display: flex;
flex-direction: column;
gap: ${themeCssVariables.spacing[4]};
`;
const StyledCodeEditorContainer = styled.div`
display: flex;
flex-direction: column;
`;
export const SettingsLogicFunctionTestTab = ({
handleExecute,
logicFunctionId,
isTesting = false,
}: {
handleExecute: () => void;
logicFunctionId: string;
isTesting?: boolean;
}) => {
const { t } = useLingui();
const { updateLogicFunctionInput, logicFunctionTestData } =
useExecuteLogicFunction({
logicFunctionId,
});
const onChange = (value: string) => {
try {
updateLogicFunctionInput(JSON.parse(value));
} catch {
// ignore invalid JSON while user is still typing
}
};
return (
<Section>
<H2Title
title={t`Test your function`}
description={t`Insert a JSON input, then press "Run" to test your function.`}
/>
<StyledInputsContainer>
<StyledCodeEditorContainer>
<CoreEditorHeader
title={t`Input`}
rightNodes={[
<Button
title={t`Run Function`}
variant="primary"
accent="blue"
size="small"
Icon={IconPlayerPlay}
onClick={handleExecute}
disabled={isTesting}
/>,
]}
/>
<CodeEditor
value={JSON.stringify(logicFunctionTestData.input, null, 4)}
language="json"
height={100}
onChange={onChange}
variant="with-header"
resizable
/>
</StyledCodeEditorContainer>
<LogicFunctionExecutionResult
logicFunctionTestData={logicFunctionTestData}
isTesting={isTesting}
/>
{logicFunctionTestData.output.logs.length > 0 && (
<StyledCodeEditorContainer>
<LogicFunctionLogs
componentInstanceId={`settings-logic-function-logs-${logicFunctionId}`}
value={isTesting ? '' : logicFunctionTestData.output.logs}
/>
</StyledCodeEditorContainer>
)}
</StyledInputsContainer>
</Section>
);
};