import React, { useState } from "react"; import { X, Plus, Trash } from "lucide-react"; import { Node } from "reactflow"; import { useFlowStore } from "../store/flowStore"; interface ConfigPanelProps { node: Node | null; onClose: () => void; onUpdateNode: (id: string, data: any) => void; } interface Field { name: string; type: string; validation?: string; } export function ConfigPanel({ node, onClose, onUpdateNode }: ConfigPanelProps) { const { models } = useFlowStore(); const [newField, setNewField] = useState({ name: "", type: "string" }); if (!node) return null; const handleChange = ( e: React.ChangeEvent< HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement > ) => { onUpdateNode(node.id, { ...node.data, [e.target.name]: e.target.value, }); }; const handleArrayChange = ( index: number, field: string, value: string, arrayName: string ) => { const array = [...(node.data[arrayName] || [])]; array[index] = { ...array[index], [field]: value }; onUpdateNode(node.id, { ...node.data, [arrayName]: array, }); }; const addField = (arrayName: string) => { const array = [...(node.data[arrayName] || []), newField]; onUpdateNode(node.id, { ...node.data, [arrayName]: array, }); setNewField({ name: "", type: "string" }); }; const removeField = (index: number, arrayName: string) => { const array = [...(node.data[arrayName] || [])]; array.splice(index, 1); onUpdateNode(node.id, { ...node.data, [arrayName]: array, }); }; const copyQueryFields = () => { const currentFields = node.data.fields || []; navigator.clipboard.writeText(JSON.stringify(currentFields, null, 2)); }; const extractQueryParams = (path: string) => { const params = path.match(/:[a-zA-Z]+/g) || []; return params.map((param) => ({ name: param.substring(1), type: "string", validation: "", })); }; const renderDatabaseFields = () => ( <>