/** * Form node config - draggable fields, types, required toggle */ import React from 'react'; import { FaGripVertical, FaTimes } from 'react-icons/fa'; import type { FormField, NodeConfigRendererProps } from './types'; import styles from '../Automation2FlowEditor.module.css'; export const FormNodeConfig: React.FC = ({ params, updateParam }) => { const fields = (params.fields as FormField[]) ?? []; const moveField = (fromIndex: number, toIndex: number) => { if (fromIndex < 0 || toIndex < 0 || fromIndex >= fields.length || toIndex >= fields.length) return; const next = [...fields]; const [removed] = next.splice(fromIndex, 1); next.splice(toIndex, 0, removed); updateParam('fields', next); }; const removeField = (index: number) => { const next = fields.filter((_, i) => i !== index); updateParam('fields', next); }; return (
{fields.map((f, i) => (
{ e.preventDefault(); e.dataTransfer.dropEffect = 'move'; }} onDrop={(e) => { e.preventDefault(); const from = parseInt(e.dataTransfer.getData('text/plain'), 10); if (!Number.isNaN(from) && from !== i) moveField(from, i); }} >
{ e.dataTransfer.setData('text/plain', String(i)); e.dataTransfer.effectAllowed = 'move'; }} >
{ const next = [...fields]; next[i] = { ...next[i], name: e.target.value }; updateParam('fields', next); }} /> { const next = [...fields]; next[i] = { ...next[i], label: e.target.value }; updateParam('fields', next); }} />
))}
); };