import { FC, useEffect, useState } from 'react'; import { WorkflowInputs, WorkflowOutputs } from '@flowgram.ai/runtime-interface'; import { useService } from '@flowgram.ai/free-layout-editor'; import { Button, JsonViewer, SideSheet } from '@douyinfe/semi-ui'; import { IconPlay, IconSpin, IconStop } from '@douyinfe/semi-icons'; import { NodeStatusGroup } from '../node-status-bar/group'; import { WorkflowRuntimeService } from '../../../plugins/runtime-plugin/runtime-service'; interface TestRunSideSheetProps { visible: boolean; onCancel: () => void; } export const TestRunSideSheet: FC = ({ visible, onCancel }) => { const runtimeService = useService(WorkflowRuntimeService); const [isRunning, setRunning] = useState(false); const [value, setValue] = useState(`{}`); const [error, setError] = useState(); const [result, setResult] = useState< | { inputs: WorkflowInputs; outputs: WorkflowOutputs; } | undefined >(); const onTestRun = async () => { if (isRunning) { await runtimeService.taskCancel(); return; } setResult(undefined); setError(undefined); setRunning(true); try { await runtimeService.taskRun(value); } catch (e: any) { setError(e.message); } }; const onClose = async () => { await runtimeService.taskCancel(); setValue(`{}`); setRunning(false); onCancel(); }; useEffect(() => { const disposer = runtimeService.onTerminated(({ result }) => { setRunning(false); setResult(result); }); return () => disposer.dispose(); }, []); const renderRunning = (
Running...
); const renderForm = (
Input
{error}
); const renderButton = ( ); return ( {isRunning ? renderRunning : renderForm} ); };