import { useCallback, useState } from 'react'; import { useRouter } from 'next/navigation'; import { toast } from 'react-hot-toast'; import { useModal } from '@/components/Modal'; import { PurchaseApi } from '@/services/api/purchasing'; import { CreatePurchaseRequestPayload, UpdatePurchaseRequestPayload, } from '@/types/api/purchase/purchasing'; import { isResponseError } from '@/lib/api-helper'; export const usePurchaseRequestFormHandlers = (initialValuesId?: number) => { const router = useRouter(); const deleteModal = useModal(); const [purchaseRequestFormErrorMessage, setPurchaseRequestFormErrorMessage] = useState(''); const [isDeleteLoading, setIsDeleteLoading] = useState(false); const createPurchaseRequestHandler = useCallback( async (payload: CreatePurchaseRequestPayload) => { const res = await PurchaseApi.create(payload); if (isResponseError(res)) { setPurchaseRequestFormErrorMessage(res.message); return; } toast.success(res?.message as string); router.push('/purchase'); }, [router] ); const updatePurchaseRequestHandler = useCallback( async (purchaseRequestId: number, payload: UpdatePurchaseRequestPayload) => { const res = await PurchaseApi.update(purchaseRequestId, payload); if (res?.status === 'error') { setPurchaseRequestFormErrorMessage(res.message); return; } toast.success(res?.message as string); router.refresh(); router.push('/purchase'); }, [router] ); const deletePurchaseRequestClickHandler = useCallback(() => { deleteModal.openModal(); }, [deleteModal]); const confirmationModalDeleteClickHandler = useCallback(async () => { if (!initialValuesId) return; setIsDeleteLoading(true); await PurchaseApi.delete(initialValuesId); deleteModal.closeModal(); toast.success('Successfully delete Purchase Request!'); setIsDeleteLoading(false); router.push('/purchase'); }, [deleteModal, initialValuesId, router]); return { deleteModal, purchaseRequestFormErrorMessage, isDeleteLoading, createPurchaseRequestHandler, updatePurchaseRequestHandler, deletePurchaseRequestClickHandler, confirmationModalDeleteClickHandler, }; };