import { useState } from 'react' import type { IntakeFormField } from '@/types' import { PasswordInput } from '@/components/common/PasswordInput' import { cn } from '@/lib/utils' import { Button } from '@/components/ui/Button' interface IntakeFormModalProps { isOpen: boolean fields: IntakeFormField[] treeName: string onSubmit: (variables: Record) => void onCancel: () => void } export function IntakeFormModal({ isOpen, fields, treeName, onSubmit, onCancel }: IntakeFormModalProps) { const [values, setValues] = useState>(() => { const initial: Record = {} for (const field of fields) { initial[field.variable_name] = field.default_value || '' } return initial }) const [errors, setErrors] = useState>({}) if (!isOpen) return null const setValue = (variableName: string, value: string) => { setValues((prev) => ({ ...prev, [variableName]: value })) if (errors[variableName]) { setErrors((prev) => { const next = { ...prev } delete next[variableName] return next }) } } const validate = (): boolean => { const newErrors: Record = {} for (const field of fields) { const val = values[field.variable_name]?.trim() if (field.required && !val) { newErrors[field.variable_name] = `${field.label} is required` } } setErrors(newErrors) return Object.keys(newErrors).length === 0 } const handleSubmit = (e: React.FormEvent) => { e.preventDefault() if (validate()) { // Only include non-empty values const cleanValues: Record = {} for (const [key, val] of Object.entries(values)) { if (val.trim()) cleanValues[key] = val.trim() } onSubmit(cleanValues) } } // Group fields by group_name const groups = new Map() for (const field of fields) { const group = field.group_name || '' if (!groups.has(group)) groups.set(group, []) groups.get(group)!.push(field) } const renderField = (field: IntakeFormField) => { const value = values[field.variable_name] || '' const error = errors[field.variable_name] const baseInputClass = cn( 'w-full rounded-lg border bg-card px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-hidden focus:ring-1', error ? 'border-red-400/50 focus:border-red-400 focus:ring-red-400/20' : 'border-border focus:border-primary focus:ring-primary/20' ) let input: React.ReactNode switch (field.field_type) { case 'textarea': input = (