mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-20 13:32:00 +00:00
refactor(FE): Refactor delivery order value initialization logic
This commit is contained in:
@@ -111,16 +111,34 @@ const DeliveryOrderFormModal = ({}: { initialValues?: Marketing }) => {
|
||||
useState<DeliveryOrderProductFormValues | null>(null);
|
||||
const [deliveryOrderValues, setDeliveryOrderValues] = useState<
|
||||
DeliveryOrderProductFormValues[]
|
||||
>(
|
||||
isResponseSuccess(marketing)
|
||||
? mergeSOwithDO(
|
||||
marketing?.data.sales_order?.map(SalesProductToFieldValues) ?? [],
|
||||
marketing?.data.delivery_order?.flatMap((delivery) =>
|
||||
DeliveryProductToFieldValues(marketing.data.sales_order, delivery)
|
||||
) ?? [],
|
||||
true
|
||||
)
|
||||
: []
|
||||
>([]);
|
||||
|
||||
const getDeliveryOrderValues = useCallback(
|
||||
(marketingData: Marketing): DeliveryOrderProductFormValues[] => {
|
||||
const hasDeliveryOrder =
|
||||
marketingData.delivery_order &&
|
||||
marketingData.delivery_order.length > 0 &&
|
||||
marketingData.delivery_order.some(
|
||||
(doItem) => doItem.deliveries && doItem.deliveries.length > 0
|
||||
);
|
||||
|
||||
if (hasDeliveryOrder) {
|
||||
return (
|
||||
marketingData.delivery_order?.flatMap((delivery) =>
|
||||
DeliveryProductToFieldValues(marketingData.sales_order, delivery)
|
||||
) ?? []
|
||||
);
|
||||
}
|
||||
|
||||
return mergeSOwithDO(
|
||||
marketingData.sales_order?.map(SalesProductToFieldValues) ?? [],
|
||||
marketingData.delivery_order?.flatMap((delivery) =>
|
||||
DeliveryProductToFieldValues(marketingData.sales_order, delivery)
|
||||
) ?? [],
|
||||
true
|
||||
);
|
||||
},
|
||||
[]
|
||||
);
|
||||
|
||||
// ================== SETUP FORMIK ==================
|
||||
@@ -129,14 +147,8 @@ const DeliveryOrderFormModal = ({}: { initialValues?: Marketing }) => {
|
||||
>(() => {
|
||||
if (!isResponseSuccess(marketing))
|
||||
return {} as SalesOrderFormValues & DeliveryOrderFormValues;
|
||||
const deliveryValues = mergeSOwithDO(
|
||||
marketing?.data.sales_order?.map(SalesProductToFieldValues) ?? [],
|
||||
marketing?.data.delivery_order?.flatMap((delivery) =>
|
||||
DeliveryProductToFieldValues(marketing.data.sales_order, delivery)
|
||||
) ?? [],
|
||||
true
|
||||
);
|
||||
|
||||
const deliveryValues = getDeliveryOrderValues(marketing.data);
|
||||
setDeliveryOrderValues(deliveryValues);
|
||||
|
||||
return {
|
||||
@@ -162,7 +174,7 @@ const DeliveryOrderFormModal = ({}: { initialValues?: Marketing }) => {
|
||||
) ?? [],
|
||||
delivery_order: deliveryValues,
|
||||
};
|
||||
}, [marketing]);
|
||||
}, [marketing, getDeliveryOrderValues]);
|
||||
|
||||
const formik = useFormik<SalesOrderFormValues & DeliveryOrderFormValues>({
|
||||
enableReinitialize: true,
|
||||
@@ -647,9 +659,8 @@ const DeliveryOrderFormModal = ({}: { initialValues?: Marketing }) => {
|
||||
<tr>
|
||||
<td className='text-sm px-4 py-3'>No. Order</td>
|
||||
<td className='text-sm px-4 py-3'>
|
||||
{marketing.data.do_number
|
||||
? marketing.data.do_number
|
||||
: marketing.data.so_number}
|
||||
{marketing.data.do_number ||
|
||||
marketing.data.so_number}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -764,6 +775,7 @@ const DeliveryOrderFormModal = ({}: { initialValues?: Marketing }) => {
|
||||
<MemoizedDeliveryOrderProductForm
|
||||
formState={'edit'}
|
||||
salesOrders={marketing?.data?.sales_order ?? []}
|
||||
deliveryOrders={marketing?.data?.delivery_order ?? []}
|
||||
exisitingValues={deliveryOrderValues}
|
||||
onSubmitForm={handleAddSubmitDO}
|
||||
initialValues={selectedDeliveryProduct ?? undefined}
|
||||
|
||||
+53
-8
@@ -10,7 +10,10 @@ import NumberInput from '@/components/input/NumberInput';
|
||||
import PatternInput from '@/components/input/PatternInput';
|
||||
import { formatTitleCase, formatVechicleNumber } from '@/lib/helper';
|
||||
import DateInput from '@/components/input/DateInput';
|
||||
import { BaseSalesOrder } from '@/types/api/marketing/marketing';
|
||||
import {
|
||||
BaseSalesOrder,
|
||||
BaseDeliveryOrder,
|
||||
} from '@/types/api/marketing/marketing';
|
||||
import { SalesProductToFieldValues } from '@/components/pages/marketing/form/MarketingForm.schema';
|
||||
import * as Yup from 'yup';
|
||||
import { isResponseSuccess } from '@/lib/api-helper';
|
||||
@@ -32,6 +35,7 @@ import { handleMarketingCalculation } from '@/lib/marketing-calculation';
|
||||
const DeliveryOrderProductForm = ({
|
||||
formState,
|
||||
salesOrders,
|
||||
deliveryOrders,
|
||||
initialValues,
|
||||
exisitingValues,
|
||||
onUpdateForm,
|
||||
@@ -39,6 +43,7 @@ const DeliveryOrderProductForm = ({
|
||||
}: {
|
||||
formState: 'add' | 'edit';
|
||||
salesOrders: BaseSalesOrder[];
|
||||
deliveryOrders?: BaseDeliveryOrder[];
|
||||
initialValues?: DeliveryOrderProductFormValues;
|
||||
exisitingValues?: DeliveryOrderProductFormValues[];
|
||||
onSubmitForm?: (value: DeliveryOrderProductFormValues) => Promise<void>;
|
||||
@@ -115,6 +120,36 @@ const DeliveryOrderProductForm = ({
|
||||
})
|
||||
?.filter((item) => item != null) as OptionType[];
|
||||
|
||||
const hasDeliveryOrder = useMemo(() => {
|
||||
return (
|
||||
deliveryOrders &&
|
||||
deliveryOrders.length > 0 &&
|
||||
deliveryOrders.some(
|
||||
(doItem) => doItem.deliveries && doItem.deliveries.length > 0
|
||||
)
|
||||
);
|
||||
}, [deliveryOrders]);
|
||||
|
||||
const deliveryOrder = useMemo(() => {
|
||||
if (!hasDeliveryOrder || !deliveryOrders) return null;
|
||||
|
||||
for (const doItem of deliveryOrders) {
|
||||
const found = doItem.deliveries.find(
|
||||
(d) =>
|
||||
d.product_warehouse.id ===
|
||||
initialValues?.marketing_product?.product_warehouse_id
|
||||
);
|
||||
if (found) {
|
||||
return {
|
||||
...found,
|
||||
delivery_date: doItem.delivery_date,
|
||||
do_number: doItem.do_number,
|
||||
};
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}, [deliveryOrders, hasDeliveryOrder, initialValues]);
|
||||
|
||||
const salesOrder = salesOrders.find(
|
||||
(item) => item.id === initialValues?.marketing_product_id
|
||||
);
|
||||
@@ -122,15 +157,25 @@ const DeliveryOrderProductForm = ({
|
||||
const formik = useFormik<DeliveryOrderProductFormValues>({
|
||||
enableReinitialize: true,
|
||||
initialValues: {
|
||||
delivery_date: initialValues?.delivery_date || undefined,
|
||||
vehicle_number: initialValues?.vehicle_number || undefined,
|
||||
delivery_date:
|
||||
deliveryOrder?.delivery_date ||
|
||||
initialValues?.delivery_date ||
|
||||
undefined,
|
||||
vehicle_number:
|
||||
deliveryOrder?.vehicle_number ||
|
||||
initialValues?.vehicle_number ||
|
||||
undefined,
|
||||
marketing_product_id:
|
||||
salesOrder?.id || initialValues?.marketing_product_id || undefined,
|
||||
unit_price: initialValues?.unit_price || undefined,
|
||||
total_weight: initialValues?.total_weight || undefined,
|
||||
qty: initialValues?.qty || undefined,
|
||||
avg_weight: initialValues?.avg_weight || undefined,
|
||||
total_price: initialValues?.total_price || undefined,
|
||||
unit_price:
|
||||
deliveryOrder?.unit_price ?? initialValues?.unit_price ?? undefined,
|
||||
total_weight:
|
||||
deliveryOrder?.total_weight ?? initialValues?.total_weight ?? undefined,
|
||||
qty: deliveryOrder?.qty ?? initialValues?.qty ?? undefined,
|
||||
avg_weight:
|
||||
deliveryOrder?.avg_weight ?? initialValues?.avg_weight ?? undefined,
|
||||
total_price:
|
||||
deliveryOrder?.total_price ?? initialValues?.total_price ?? undefined,
|
||||
marketing_product: initialValues?.marketing_product || undefined,
|
||||
uom: initialValues?.uom || '',
|
||||
weight_per_convertion:
|
||||
|
||||
Reference in New Issue
Block a user