/** * SimpleFormField -- Renders the appropriate input component based on a SimpleFieldDef. * * Supports: text, ip, cidr, number, boolean, select, password field types. * Includes label, required indicator, help text, and error display. */ import { useState } from 'react' import { Eye, EyeOff } from 'lucide-react' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Checkbox } from '@/components/ui/checkbox' import { Button } from '@/components/ui/button' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select' import type { SimpleFieldDef } from '@/lib/simpleConfigSchema' interface SimpleFormFieldProps { field: SimpleFieldDef value: string onChange: (value: string) => void error?: string } export function SimpleFormField({ field, value, onChange, error }: SimpleFormFieldProps) { const [showPassword, setShowPassword] = useState(false) const fieldId = `simple-field-${field.key}` return (
{field.type !== 'boolean' && ( )} {/* Text / IP / CIDR */} {(field.type === 'text' || field.type === 'ip' || field.type === 'cidr') && ( onChange(e.target.value)} placeholder={field.placeholder} className="h-8 text-sm" /> )} {/* Number */} {field.type === 'number' && ( onChange(e.target.value)} placeholder={field.placeholder} className="h-8 text-sm" /> )} {/* Boolean */} {field.type === 'boolean' && (
onChange(checked ? 'true' : 'false') } />
)} {/* Select */} {field.type === 'select' && ( )} {/* Password */} {field.type === 'password' && (
onChange(e.target.value)} placeholder={field.placeholder} className="h-8 text-sm pr-9" />
)} {field.help && (

{field.help}

)} {error &&

{error}

}
) }