mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-20 13:32:00 +00:00
feat(FE-208): add refetchData prop to PurchaseOrderDetail and related forms for improved data synchronization
This commit is contained in:
@@ -12,7 +12,7 @@ const PurchaseDetail = () => {
|
|||||||
|
|
||||||
const purchaseId = searchParams.get('purchaseId');
|
const purchaseId = searchParams.get('purchaseId');
|
||||||
|
|
||||||
const { data: purchase, isLoading: isLoadingPurchase } = useSWR(
|
const { data: purchase, isLoading: isLoadingPurchase, mutate: mutatePurchase } = useSWR(
|
||||||
purchaseId,
|
purchaseId,
|
||||||
(id: number) => PurchaseApi.getSingle(id)
|
(id: number) => PurchaseApi.getSingle(id)
|
||||||
);
|
);
|
||||||
@@ -40,7 +40,11 @@ const PurchaseDetail = () => {
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
{!isLoadingPurchase && isResponseSuccess(purchase) && (
|
{!isLoadingPurchase && isResponseSuccess(purchase) && (
|
||||||
<PurchaseOrderDetail type='detail' initialValues={purchase.data} />
|
<PurchaseOrderDetail
|
||||||
|
type='detail'
|
||||||
|
initialValues={purchase.data}
|
||||||
|
refetchData={mutatePurchase}
|
||||||
|
/>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import Button from '@/components/Button';
|
|||||||
import TextInput from '@/components/input/TextInput';
|
import TextInput from '@/components/input/TextInput';
|
||||||
import NumberInput from '@/components/input/NumberInput';
|
import NumberInput from '@/components/input/NumberInput';
|
||||||
import SelectInput, { OptionType } from '@/components/input/SelectInput';
|
import SelectInput, { OptionType } from '@/components/input/SelectInput';
|
||||||
|
import { useRouter } from 'next/navigation';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
PurchaseRequestAcceptApprovalFormDefaultValues,
|
PurchaseRequestAcceptApprovalFormDefaultValues,
|
||||||
@@ -30,6 +31,7 @@ interface PurchaseOrderAcceptApprovalFormProps {
|
|||||||
onCancel?: () => void;
|
onCancel?: () => void;
|
||||||
refreshApprovals?: () => void;
|
refreshApprovals?: () => void;
|
||||||
onModalClose?: () => void;
|
onModalClose?: () => void;
|
||||||
|
onRefetchData?: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
const PurchaseOrderAcceptApprovalForm = ({
|
const PurchaseOrderAcceptApprovalForm = ({
|
||||||
@@ -38,7 +40,9 @@ const PurchaseOrderAcceptApprovalForm = ({
|
|||||||
onCancel,
|
onCancel,
|
||||||
refreshApprovals,
|
refreshApprovals,
|
||||||
onModalClose,
|
onModalClose,
|
||||||
|
onRefetchData,
|
||||||
}: PurchaseOrderAcceptApprovalFormProps) => {
|
}: PurchaseOrderAcceptApprovalFormProps) => {
|
||||||
|
const router = useRouter();
|
||||||
const searchParams = useSearchParams();
|
const searchParams = useSearchParams();
|
||||||
const [purchaseOrderFormErrorMessage, setPurchaseOrderFormErrorMessage] =
|
const [purchaseOrderFormErrorMessage, setPurchaseOrderFormErrorMessage] =
|
||||||
useState('');
|
useState('');
|
||||||
@@ -105,11 +109,13 @@ const PurchaseOrderAcceptApprovalForm = ({
|
|||||||
}
|
}
|
||||||
toast.success(res?.message as string);
|
toast.success(res?.message as string);
|
||||||
refreshApprovals?.();
|
refreshApprovals?.();
|
||||||
|
onRefetchData?.();
|
||||||
formik.resetForm();
|
formik.resetForm();
|
||||||
onCancel?.();
|
onCancel?.();
|
||||||
onModalClose?.();
|
onModalClose?.();
|
||||||
|
router.refresh();
|
||||||
},
|
},
|
||||||
[initialValues?.id, searchParams, refreshApprovals, onModalClose]
|
[initialValues?.id, searchParams, refreshApprovals, onModalClose, onRefetchData]
|
||||||
);
|
);
|
||||||
|
|
||||||
const updateAcceptApprovalHandler = useCallback(
|
const updateAcceptApprovalHandler = useCallback(
|
||||||
@@ -121,12 +127,13 @@ const PurchaseOrderAcceptApprovalForm = ({
|
|||||||
}
|
}
|
||||||
toast.success(res?.message as string);
|
toast.success(res?.message as string);
|
||||||
refreshApprovals?.();
|
refreshApprovals?.();
|
||||||
|
onRefetchData?.();
|
||||||
formik.resetForm();
|
formik.resetForm();
|
||||||
onCancel?.();
|
onCancel?.();
|
||||||
onModalClose?.();
|
onModalClose?.();
|
||||||
window.location.href = '/purchase';
|
router.refresh();
|
||||||
},
|
},
|
||||||
[refreshApprovals, onModalClose]
|
[refreshApprovals, onModalClose, onRefetchData]
|
||||||
);
|
);
|
||||||
|
|
||||||
// ===== FORM CONFIGURATION =====
|
// ===== FORM CONFIGURATION =====
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import { useSearchParams } from 'next/navigation';
|
|||||||
import Button from '@/components/Button';
|
import Button from '@/components/Button';
|
||||||
import TextInput from '@/components/input/TextInput';
|
import TextInput from '@/components/input/TextInput';
|
||||||
import NumberInput from '@/components/input/NumberInput';
|
import NumberInput from '@/components/input/NumberInput';
|
||||||
import SelectInput, { OptionType } from '@/components/input/SelectInput';
|
import SelectInput from '@/components/input/SelectInput';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
PurchaseRequestStaffApprovalFormDefaultValues,
|
PurchaseRequestStaffApprovalFormDefaultValues,
|
||||||
@@ -22,7 +22,7 @@ import {
|
|||||||
UpdateStaffApprovalRequestPayload,
|
UpdateStaffApprovalRequestPayload,
|
||||||
Purchase,
|
Purchase,
|
||||||
} from '@/types/api/purchase/purchase';
|
} from '@/types/api/purchase/purchase';
|
||||||
import { router } from 'next/client';
|
import { useRouter } from 'next/navigation';
|
||||||
|
|
||||||
interface PurchaseOrderStaffApprovalFormProps {
|
interface PurchaseOrderStaffApprovalFormProps {
|
||||||
type?: 'add' | 'edit';
|
type?: 'add' | 'edit';
|
||||||
@@ -30,6 +30,7 @@ interface PurchaseOrderStaffApprovalFormProps {
|
|||||||
onCancel?: () => void;
|
onCancel?: () => void;
|
||||||
refreshApprovals?: () => void;
|
refreshApprovals?: () => void;
|
||||||
onModalClose?: () => void;
|
onModalClose?: () => void;
|
||||||
|
onRefetchData?: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
const PurchaseOrderStaffApprovalForm = ({
|
const PurchaseOrderStaffApprovalForm = ({
|
||||||
@@ -38,7 +39,9 @@ const PurchaseOrderStaffApprovalForm = ({
|
|||||||
onCancel,
|
onCancel,
|
||||||
refreshApprovals,
|
refreshApprovals,
|
||||||
onModalClose,
|
onModalClose,
|
||||||
|
onRefetchData,
|
||||||
}: PurchaseOrderStaffApprovalFormProps) => {
|
}: PurchaseOrderStaffApprovalFormProps) => {
|
||||||
|
const router = useRouter();
|
||||||
const searchParams = useSearchParams();
|
const searchParams = useSearchParams();
|
||||||
const [purchaseOrderFormErrorMessage, setPurchaseOrderFormErrorMessage] =
|
const [purchaseOrderFormErrorMessage, setPurchaseOrderFormErrorMessage] =
|
||||||
useState('');
|
useState('');
|
||||||
@@ -104,11 +107,13 @@ const PurchaseOrderStaffApprovalForm = ({
|
|||||||
}
|
}
|
||||||
toast.success(res?.message as string);
|
toast.success(res?.message as string);
|
||||||
refreshApprovals?.();
|
refreshApprovals?.();
|
||||||
|
onRefetchData?.();
|
||||||
formik.resetForm();
|
formik.resetForm();
|
||||||
onCancel?.();
|
onCancel?.();
|
||||||
onModalClose?.();
|
onModalClose?.();
|
||||||
|
router.refresh();
|
||||||
},
|
},
|
||||||
[initialValues?.id, searchParams, refreshApprovals, onModalClose]
|
[initialValues?.id, searchParams, refreshApprovals, onModalClose, onRefetchData]
|
||||||
);
|
);
|
||||||
|
|
||||||
const updateStaffApprovalHandler = useCallback(
|
const updateStaffApprovalHandler = useCallback(
|
||||||
@@ -120,12 +125,13 @@ const PurchaseOrderStaffApprovalForm = ({
|
|||||||
}
|
}
|
||||||
toast.success(res?.message as string);
|
toast.success(res?.message as string);
|
||||||
refreshApprovals?.();
|
refreshApprovals?.();
|
||||||
|
onRefetchData?.();
|
||||||
formik.resetForm();
|
formik.resetForm();
|
||||||
onCancel?.();
|
onCancel?.();
|
||||||
onModalClose?.();
|
onModalClose?.();
|
||||||
await router.push(`/purchase/detail?purchaseId=${purchaseId}`);
|
router.refresh();
|
||||||
},
|
},
|
||||||
[refreshApprovals, onModalClose]
|
[refreshApprovals, onModalClose, onRefetchData]
|
||||||
);
|
);
|
||||||
|
|
||||||
// ===== FORM CONFIGURATION =====
|
// ===== FORM CONFIGURATION =====
|
||||||
|
|||||||
@@ -69,11 +69,13 @@ const PenerimaanBarangDropdown = ({ onEdit }: { onEdit: () => void }) => {
|
|||||||
interface PurchaseOrderDetailProps {
|
interface PurchaseOrderDetailProps {
|
||||||
type?: 'detail' | 'edit';
|
type?: 'detail' | 'edit';
|
||||||
initialValues?: Purchase;
|
initialValues?: Purchase;
|
||||||
|
refetchData?: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
const PurchaseOrderDetail = ({
|
const PurchaseOrderDetail = ({
|
||||||
type = 'detail',
|
type = 'detail',
|
||||||
initialValues,
|
initialValues,
|
||||||
|
refetchData,
|
||||||
}: PurchaseOrderDetailProps) => {
|
}: PurchaseOrderDetailProps) => {
|
||||||
// ===== MODAL HOOKS =====
|
// ===== MODAL HOOKS =====
|
||||||
const searchParams = useSearchParams();
|
const searchParams = useSearchParams();
|
||||||
@@ -251,8 +253,9 @@ const PurchaseOrderDetail = ({
|
|||||||
}
|
}
|
||||||
toast.success(res?.message as string);
|
toast.success(res?.message as string);
|
||||||
refreshApprovals();
|
refreshApprovals();
|
||||||
|
refetchData?.();
|
||||||
},
|
},
|
||||||
[initialValues?.id, searchParams, refreshApprovals]
|
[initialValues?.id, searchParams, refreshApprovals, refetchData]
|
||||||
);
|
);
|
||||||
|
|
||||||
const createManagerApprovalHandler = useCallback(
|
const createManagerApprovalHandler = useCallback(
|
||||||
@@ -276,20 +279,23 @@ const PurchaseOrderDetail = ({
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
toast.success(res?.message as string);
|
toast.success(res?.message as string);
|
||||||
|
refetchData?.();
|
||||||
},
|
},
|
||||||
[initialValues?.id, searchParams]
|
[initialValues?.id, searchParams, refetchData]
|
||||||
);
|
);
|
||||||
|
|
||||||
// ===== MODAL HANDLERS =====
|
// ===== MODAL HANDLERS =====
|
||||||
const handleStaffApprovalModalClose = useCallback(() => {
|
const handleStaffApprovalModalClose = useCallback(() => {
|
||||||
refreshApprovals();
|
refreshApprovals();
|
||||||
|
refetchData?.();
|
||||||
staffApprovalModal.closeModal();
|
staffApprovalModal.closeModal();
|
||||||
}, [refreshApprovals]);
|
}, [refreshApprovals, refetchData]);
|
||||||
|
|
||||||
const handleEditModalClose = useCallback(() => {
|
const handleEditModalClose = useCallback(() => {
|
||||||
refreshApprovals();
|
refreshApprovals();
|
||||||
|
refetchData?.();
|
||||||
editModal.closeModal();
|
editModal.closeModal();
|
||||||
}, [refreshApprovals]);
|
}, [refreshApprovals, refetchData]);
|
||||||
|
|
||||||
// ===== DELETE HANDLER =====
|
// ===== DELETE HANDLER =====
|
||||||
const deleteItemsHandler = useCallback(async () => {
|
const deleteItemsHandler = useCallback(async () => {
|
||||||
@@ -327,6 +333,7 @@ const PurchaseOrderDetail = ({
|
|||||||
|
|
||||||
toast.success(successMessage);
|
toast.success(successMessage);
|
||||||
refreshApprovals();
|
refreshApprovals();
|
||||||
|
refetchData?.();
|
||||||
deleteModal.closeModal();
|
deleteModal.closeModal();
|
||||||
setSelectedItem(null);
|
setSelectedItem(null);
|
||||||
setRowSelection({});
|
setRowSelection({});
|
||||||
@@ -335,7 +342,7 @@ const PurchaseOrderDetail = ({
|
|||||||
} finally {
|
} finally {
|
||||||
setIsDeleteLoading(false);
|
setIsDeleteLoading(false);
|
||||||
}
|
}
|
||||||
}, [initialValues?.id, searchParams, selectedItem, selectedRowIds]);
|
}, [initialValues?.id, searchParams, selectedItem, selectedRowIds, refetchData]);
|
||||||
|
|
||||||
if (!initialValues) {
|
if (!initialValues) {
|
||||||
return null;
|
return null;
|
||||||
@@ -901,6 +908,7 @@ const PurchaseOrderDetail = ({
|
|||||||
|
|
||||||
await createManagerApprovalHandler(payload);
|
await createManagerApprovalHandler(payload);
|
||||||
await refreshApprovals();
|
await refreshApprovals();
|
||||||
|
await refetchData?.();
|
||||||
confirmationModalWithNotes.closeModal();
|
confirmationModalWithNotes.closeModal();
|
||||||
},
|
},
|
||||||
}}
|
}}
|
||||||
@@ -923,6 +931,7 @@ const PurchaseOrderDetail = ({
|
|||||||
onCancel={handleStaffApprovalModalClose}
|
onCancel={handleStaffApprovalModalClose}
|
||||||
refreshApprovals={refreshApprovals}
|
refreshApprovals={refreshApprovals}
|
||||||
onModalClose={staffApprovalModal.closeModal}
|
onModalClose={staffApprovalModal.closeModal}
|
||||||
|
onRefetchData={refetchData}
|
||||||
/>
|
/>
|
||||||
</Modal>
|
</Modal>
|
||||||
|
|
||||||
@@ -940,6 +949,7 @@ const PurchaseOrderDetail = ({
|
|||||||
onCancel={acceptApprovalModal.closeModal}
|
onCancel={acceptApprovalModal.closeModal}
|
||||||
refreshApprovals={refreshApprovals}
|
refreshApprovals={refreshApprovals}
|
||||||
onModalClose={acceptApprovalModal.closeModal}
|
onModalClose={acceptApprovalModal.closeModal}
|
||||||
|
onRefetchData={refetchData}
|
||||||
/>
|
/>
|
||||||
</Modal>
|
</Modal>
|
||||||
|
|
||||||
@@ -957,6 +967,7 @@ const PurchaseOrderDetail = ({
|
|||||||
onCancel={handleEditModalClose}
|
onCancel={handleEditModalClose}
|
||||||
refreshApprovals={refreshApprovals}
|
refreshApprovals={refreshApprovals}
|
||||||
onModalClose={editModal.closeModal}
|
onModalClose={editModal.closeModal}
|
||||||
|
onRefetchData={refetchData}
|
||||||
/>
|
/>
|
||||||
</Modal>
|
</Modal>
|
||||||
|
|
||||||
@@ -974,6 +985,7 @@ const PurchaseOrderDetail = ({
|
|||||||
onCancel={penerimaanBarangModal.closeModal}
|
onCancel={penerimaanBarangModal.closeModal}
|
||||||
refreshApprovals={refreshApprovals}
|
refreshApprovals={refreshApprovals}
|
||||||
onModalClose={penerimaanBarangModal.closeModal}
|
onModalClose={penerimaanBarangModal.closeModal}
|
||||||
|
onRefetchData={refetchData}
|
||||||
/>
|
/>
|
||||||
</Modal>
|
</Modal>
|
||||||
|
|
||||||
@@ -996,6 +1008,7 @@ const PurchaseOrderDetail = ({
|
|||||||
};
|
};
|
||||||
|
|
||||||
await createStaffApprovalHandler(payload);
|
await createStaffApprovalHandler(payload);
|
||||||
|
await refetchData?.();
|
||||||
staffRejectionModal.closeModal();
|
staffRejectionModal.closeModal();
|
||||||
},
|
},
|
||||||
}}
|
}}
|
||||||
|
|||||||
Reference in New Issue
Block a user