import { useEffect } from 'react'; import { useForm } from 'react-hook-form'; import { X } from 'lucide-react'; import { useModuleApi } from '../hooks/useModuleApi'; import type { Module, ModuleCreate, ModuleUpdate, ModuleStatus } from '../AdminModuleTypes'; import CustomInput from '../../../../components/custom/CustomInput'; import CustomButton from '../../../../components/custom/CustomButton'; interface ModuleFormProps { module: Module | null; onClose: (saved: boolean) => void; } interface ModuleFormData { module_id: string; module_name: string; description: string; icon_url: string; status: ModuleStatus; display_order: number; } const ModuleForm = ({ module, onClose }: ModuleFormProps) => { const { createModule, updateModule, loading } = useModuleApi(); const { register, handleSubmit, formState: { errors }, reset } = useForm({ defaultValues: { module_id: '', module_name: '', description: '', icon_url: '', status: 'active', display_order: 0, } }); useEffect(() => { if (module) { reset({ module_id: module.module_id, module_name: module.module_name, description: module.description || '', icon_url: module.icon_url || '', status: module.status, display_order: module.display_order, }); } }, [module, reset]); const onSubmit = async (data: ModuleFormData) => { let success; if (module) { const updateData: ModuleUpdate = { module_name: data.module_name, description: data.description || undefined, icon_url: data.icon_url || undefined, status: data.status, display_order: data.display_order, }; success = await updateModule(module.id, updateData); } else { const createData: ModuleCreate = { module_id: data.module_id, module_name: data.module_name, description: data.description || undefined, icon_url: data.icon_url || undefined, status: data.status, display_order: data.display_order, }; success = await createModule(createData); } if (success) { onClose(true); } }; return (

{module ? 'Edit Module' : 'Create Module'}

Unique identifier (lowercase, alphanumeric, hyphens)