'use client' import ReactFlow, { Node, Controls, Background, MiniMap, BackgroundVariant, Panel, OnNodesChange, OnEdgesChange, Node as RFNode, Edge as RFEdge, } from 'reactflow' import { SDK_FLOW_STEPS, FLOW_PACKAGES, type SDKFlowStep } from '../flow-data' import { DetailPanel } from './DetailPanel' import { PACKAGE_ORDER, type PackageFilter } from './helpers' export function FlowCanvas({ nodes, edges, onNodesChange, onEdgesChange, onNodeClick, onPaneClick, packageFilter, selectedStep, setSelectedStep, }: { nodes: RFNode[] edges: RFEdge[] onNodesChange: OnNodesChange onEdgesChange: OnEdgesChange onNodeClick: (e: React.MouseEvent, node: Node) => void onPaneClick: () => void packageFilter: PackageFilter selectedStep: SDKFlowStep | null setSelectedStep: (s: SDKFlowStep | null) => void }) { return (
{/* Canvas */}
{ if (node.id.startsWith('db-')) return '#94a3b8' if (node.id.startsWith('rag-')) return '#22c55e' const step = SDK_FLOW_STEPS.find(s => s.id === node.id) return step ? FLOW_PACKAGES[step.package].color.border : '#94a3b8' }} maskColor="rgba(0,0,0,0.08)" /> {/* Legende */}
Legende
{PACKAGE_ORDER.map(pkgId => { const pkg = FLOW_PACKAGES[pkgId] return (
{pkg.name}
) })}
DB-Tabelle
RAG-Collection
* = REQUIRED
~ = RECOMMENDED
--- = gestrichelte Border: Optional
{/* Package Headers */} {packageFilter === 'alle' && ( {PACKAGE_ORDER.map((pkgId) => { const pkg = FLOW_PACKAGES[pkgId] return (
{pkg.icon} {pkg.name}
) })}
)}
{/* Detail Panel */} {selectedStep && ( setSelectedStep(null)} /> )}
) }