import { CalendarClock, CheckCircle2, CirclePlay, CircleX, ClipboardCheck, GitFork, PlugZap, Radio, Split, SquareCheckBig, Timer, Waypoints, type LucideIcon } from "lucide-react"; import { Handle, Position, type Node, type NodeProps } from "@xyflow/react"; import type { WorkflowNodeType } from "../../api/workflow"; export type WorkflowFlowNodeData = { label: string; workflowType: string; definition: WorkflowNodeType; hasError: boolean; }; export type WorkflowFlowNode = Node; const iconByName: Record = { "calendar-clock": CalendarClock, "circle-check-big": CheckCircle2, "circle-play": CirclePlay, "circle-x": CircleX, "clipboard-check": ClipboardCheck, "plug-zap": PlugZap, radio: Radio, split: Split, "square-check-big": SquareCheckBig, timer: Timer, waypoints: Waypoints }; export default function WorkflowNode({ data, selected, isConnectable }: NodeProps) { const Icon = iconByName[data.definition.icon] ?? GitFork; const inputPorts = data.definition.input_ports; const outputPorts = data.definition.output_ports; return (
{inputPorts.map((port, index) => ( ))} {data.label} {data.definition.label} {outputPorts.map((port, index) => ( ))}
); } function portPosition(index: number, count: number): string { return `${((index + 1) / (count + 1)) * 100}%`; }