import { createSignal, Show, For } from 'solid-js'; import { WorkflowTreeView, type WorkflowNode } from './WorkflowTreeView'; type DataTransformerProps = { jsonData: string; class?: string; }; export const DataTransformer = (props: DataTransformerProps) => { const [parsedData, setParsedData] = createSignal([]); const [error, setError] = createSignal(null); const [indentation, setIndentation] = createSignal(24); const transformData = () => { try { // Parse the JSON string into an object const rawData = JSON.parse(props.jsonData); // Check if it's an array if (!Array.isArray(rawData)) { setError('Input must be a JSON array'); return; } // Transform the data into the format needed by WorkflowTreeView const transformedData: WorkflowNode[] = rawData.map((node) => ({ nodeId: node.nodeId, nodeLabel: node.nodeLabel, data: node.data, previousNodeIds: node.previousNodeIds || [], // Map the status, defaulting to PENDING if not valid status: ['FINISHED', 'PENDING', 'RUNNING', 'ERROR'].includes(node.status) ? (node.status as 'FINISHED' | 'PENDING' | 'RUNNING' | 'ERROR') : 'PENDING', })); setParsedData(transformedData); setError(null); } catch (e) { setError(`Error parsing JSON: ${e instanceof Error ? e.message : String(e)}`); setParsedData([]); } }; const handleIndentationChange = (e: Event) => { const target = e.target as HTMLInputElement; setIndentation(parseInt(target.value)); }; // Transform the data on component load if (props.jsonData && !parsedData().length && !error()) { transformData(); } return (

Workflow Visualization

Error: {error()}
0}>
No workflow data found or data is empty.
); };