mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-24 07:15:44 +00:00
refactor(FE-208): streamline supplier change handling and reset purchase items in PurchaseRequestForm
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { useCallback, useMemo, useState } from 'react';
|
import { useCallback, useEffect, useMemo, useState } from 'react';
|
||||||
import { useFormik } from 'formik';
|
import { useFormik } from 'formik';
|
||||||
import useSWR from 'swr';
|
import useSWR from 'swr';
|
||||||
import { useRouter } from 'next/navigation';
|
import { useRouter } from 'next/navigation';
|
||||||
@@ -330,17 +330,9 @@ const PurchaseRequestForm = ({
|
|||||||
setSelectedPurchaseItems([]);
|
setSelectedPurchaseItems([]);
|
||||||
};
|
};
|
||||||
|
|
||||||
// ===== FORM HANDLERS =====
|
// ===== UTILITY FUNCTIONS =====
|
||||||
const handleSupplierChange = useCallback(
|
const updateCreditTermBasedOnSupplier = useCallback(
|
||||||
(val: OptionType | OptionType[] | null) => {
|
(supplierId: number) => {
|
||||||
const supplier = val as OptionType | null;
|
|
||||||
const supplierId = Number(supplier?.value);
|
|
||||||
|
|
||||||
formik.setFieldTouched('supplier', true);
|
|
||||||
formik.setFieldValue('supplier', supplier);
|
|
||||||
formik.setFieldTouched('supplier_id', true);
|
|
||||||
formik.setFieldValue('supplier_id', supplierId);
|
|
||||||
|
|
||||||
if (supplierId > 0 && isResponseSuccess(supplierRawData)) {
|
if (supplierId > 0 && isResponseSuccess(supplierRawData)) {
|
||||||
const supplierData = supplierRawData.data.find(
|
const supplierData = supplierRawData.data.find(
|
||||||
(s: Supplier) => s.id === supplierId
|
(s: Supplier) => s.id === supplierId
|
||||||
@@ -356,16 +348,40 @@ const PurchaseRequestForm = ({
|
|||||||
formik.setFieldTouched('credit_term', false);
|
formik.setFieldTouched('credit_term', false);
|
||||||
formik.setFieldValue('credit_term', '');
|
formik.setFieldValue('credit_term', '');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (formik.values.items) {
|
|
||||||
formik.values.items.forEach((_, idx) => {
|
|
||||||
formik.setFieldValue(`items.${idx}.product`, null);
|
|
||||||
formik.setFieldValue(`items.${idx}.product_id`, 0);
|
|
||||||
formik.setFieldValue(`items.${idx}.qty`, 0);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
[, supplierRawData]
|
[supplierRawData]
|
||||||
|
);
|
||||||
|
|
||||||
|
const resetPurchaseItems = useCallback(() => {
|
||||||
|
if (formik.values.items) {
|
||||||
|
formik.values.items.forEach((_, idx) => {
|
||||||
|
formik.setFieldValue(`items.${idx}.product`, null);
|
||||||
|
formik.setFieldValue(`items.${idx}.product_id`, 0);
|
||||||
|
formik.setFieldValue(`items.${idx}.qty`, 0);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
// ===== SIDE EFFECTS =====
|
||||||
|
useEffect(() => {
|
||||||
|
if (formik.values.supplier_id) {
|
||||||
|
updateCreditTermBasedOnSupplier(Number(formik.values.supplier_id));
|
||||||
|
resetPurchaseItems();
|
||||||
|
}
|
||||||
|
}, [formik.values.supplier_id]);
|
||||||
|
|
||||||
|
// ===== FORM HANDLERS =====
|
||||||
|
const handleSupplierChange = useCallback(
|
||||||
|
(val: OptionType | OptionType[] | null) => {
|
||||||
|
const supplier = val as OptionType | null;
|
||||||
|
const supplierId = Number(supplier?.value);
|
||||||
|
|
||||||
|
formik.setFieldTouched('supplier', true);
|
||||||
|
formik.setFieldValue('supplier', supplier);
|
||||||
|
formik.setFieldTouched('supplier_id', true);
|
||||||
|
formik.setFieldValue('supplier_id', supplierId);
|
||||||
|
},
|
||||||
|
[]
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleAreaChange = useCallback(
|
const handleAreaChange = useCallback(
|
||||||
|
|||||||
Reference in New Issue
Block a user