'use client' import { useModal } from '@/components/Modal'; import { FlockApi } from '@/services/api/master-data'; import { Flock } from '@/types/api/master-data/flock'; import { useRouter } from 'next/navigation'; import { useEffect, useMemo, useState } from 'react'; import { FlockFormSchema, FlockFormValues, UpdateFlockFormSchema } from '@/components/pages/master-data/flock/form/FlockForm.schema'; import { useFormik } from 'formik'; import Button from '@/components/Button'; import { Icon } from '@iconify/react'; import TextInput from '@/components/input/TextInput'; import { cn } from '@/lib/helper'; import ConfirmationModal from '@/components/modal/ConfirmationModal'; interface FlockCustomProps { formType?: 'add' | 'edit' | 'detail'; initialValues?: Flock; } const FlockForm = ({ formType = 'add', initialValues }: FlockCustomProps) => { const router = useRouter(); const deleteModal = useModal(); // State const [flockFormErrorMessage, setFlockFormErrorMessage] = useState(''); const [isDeleteLoading, setIsDeleteLoading] = useState(false); // Handler const confirmationModalDeleteClickHandler = async () => { setIsDeleteLoading(true); await FlockApi.delete(initialValues?.id as number); deleteModal.closeModal(); setIsDeleteLoading(false); router.push('/master-data/flock'); }; // Initital Value const formikInitialValue = useMemo(() => { return { name: initialValues?.name ?? '', }; }, [initialValues]); // Formik const formik = useFormik({ initialValues: formikInitialValue, enableReinitialize: true, validationSchema: formType === 'edit' ? UpdateFlockFormSchema : FlockFormSchema, onSubmit: async (values) => { // reset error message setFlockFormErrorMessage(''); // create payload const payload = { name: values.name, }; // cek type form yang disubmit switch (formType) { case 'add': await FlockApi.create(payload); break; case 'edit': await FlockApi.update(initialValues?.id as number, payload); break; default: break; } router.push('/master-data/flock'); }, }); // Initialize Formik const { setValues: formikSetValues } = formik; useEffect(() => { formikSetValues(formikInitialValue); }, [formikSetValues, formikInitialValue]); // Render return ( <>

{formType === 'add' && 'Tambah Flock'} {formType === 'edit' && 'Ubah Flock'} {formType === 'detail' && 'Detail Flock'}

{/* Fields Form */}
{/* Action Button */}
{formType !== 'add' && (
{formType !== 'edit' && ( )}
)} {formType !== 'detail' && (
)}
{flockFormErrorMessage && (
{flockFormErrorMessage}
)}
{formType !== 'add' && ( )} ); }; export default FlockForm;