import * as React from 'react'; import { Box, TextField, Button, FormControl, InputLabel, Select, MenuItem, FormControlLabel, Checkbox, Typography, Divider, } from '@mui/material'; import { ResourceConfig, ResourceField } from '../types/config'; interface GenericFormProps { config: ResourceConfig; initialData?: any; onSave: (data: any) => Promise; onCancel: () => void; loading?: boolean; } export default function GenericForm({ config, initialData = {}, onSave, onCancel, loading, }: GenericFormProps) { const [formData, setFormData] = React.useState(initialData); const handleChange = (key: string, value: any) => { setFormData((prev: any) => ({ ...prev, [key]: value })); }; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); onSave(formData); }; return ( {initialData[config.primaryKey] ? `Edit ${config.label}` : `New ${config.label}`} {Object.entries(config.fields).map(([key, field]) => ( handleChange(key, val)} disabled={field.readOnly} /> ))} ); } function FormField({ name, field, value, onChange, disabled }: any) { const label = field.label; if (field.type === 'boolean') { return ( onChange(e.target.checked)} disabled={disabled} /> } label={label} /> ); } if (field.type === 'enum' && field.options) { return ( {label} ); } if (field.type === 'markdown' || field.type === 'string') { return ( onChange(e.target.value)} disabled={disabled} required={field.required} /> ); } if (field.type === 'number') { return ( onChange(Number(e.target.value))} disabled={disabled} required={field.required} /> ); } if (field.type === 'date') { return ( onChange(e.target.value)} disabled={disabled} required={field.required} /> ); } return ( ); }