refactor(FE-212): update PurchaseOrderDetail component to use initialValues prop instead of data

This commit is contained in:
rstubryan
2025-11-18 14:32:24 +07:00
parent e8dd4f3759
commit d93f0c26b6
@@ -68,15 +68,12 @@ const PenerimaanBarangDropdown = ({ onEdit }: { onEdit: () => void }) => {
interface PurchaseOrderDetailProps { interface PurchaseOrderDetailProps {
type?: 'detail' | 'edit'; type?: 'detail' | 'edit';
data?: Purchase; initialValues?: Purchase;
} }
const PurchaseOrderDetail = ({ const PurchaseOrderDetail = ({
type = 'detail', type = 'detail',
data, initialValues,
}: PurchaseOrderDetailProps) => { }: PurchaseOrderDetailProps) => {
// ===== MODAL HOOKS ===== // ===== MODAL HOOKS =====
const searchParams = useSearchParams(); const searchParams = useSearchParams();
@@ -99,33 +96,38 @@ const PurchaseOrderDetail = ({
// ===== COMPUTED VALUES ===== // ===== COMPUTED VALUES =====
const purchaseOrderItems = useMemo( const purchaseOrderItems = useMemo(
() => data?.items || [], () => initialValues?.items || [],
[data?.items] [initialValues?.items]
); );
// Create goods receipt items from received items
const goodsReceiptItems = useMemo(() => { const goodsReceiptItems = useMemo(() => {
return purchaseOrderItems.filter(item => item.received_date); return purchaseOrderItems.filter((item) => item.received_date);
}, [purchaseOrderItems]); }, [purchaseOrderItems]);
// Create simple approval steps from single approval data
const approvalSteps = useMemo(() => { const approvalSteps = useMemo(() => {
if (!data?.approval) return []; if (!initialValues?.approval) return [];
// Create a simple approval step based on the single approval data const status =
const status = data.approval.action === 'APPROVED' ? 'APPROVED' : initialValues.approval.action === 'APPROVED'
data.approval.action === 'REJECTED' ? 'REJECTED' : 'WAITING'; ? 'APPROVED'
: initialValues.approval.action === 'REJECTED'
? 'REJECTED'
: 'WAITING';
return [{ return [
name: data.approval.step_name, {
name: initialValues.approval.step_name,
status: status as ApprovalStepStatus, status: status as ApprovalStepStatus,
logs: [{ logs: [
action_by: data.approval.action_by?.name, {
date: data.approval.action_at, action_by: initialValues.approval.action_by?.name,
notes: data.approval.notes, date: initialValues.approval.action_at,
}], notes: initialValues.approval.notes,
}]; },
}, [data?.approval]); ],
},
];
}, [initialValues?.approval]);
const totalBeforeTax = useMemo(() => { const totalBeforeTax = useMemo(() => {
return purchaseOrderItems.reduce( return purchaseOrderItems.reduce(
@@ -139,7 +141,7 @@ const PurchaseOrderDetail = ({
async (payload: CreateManagerApprovalRequestPayload) => { async (payload: CreateManagerApprovalRequestPayload) => {
const purchaseRequestId = searchParams.get('purchaseId') const purchaseRequestId = searchParams.get('purchaseId')
? parseInt(searchParams.get('purchaseId')!) ? parseInt(searchParams.get('purchaseId')!)
: data?.id || 1; : initialValues?.id || 1;
if (!purchaseRequestId) { if (!purchaseRequestId) {
toast.error('Purchase Request ID is required'); toast.error('Purchase Request ID is required');
@@ -157,14 +159,14 @@ const PurchaseOrderDetail = ({
} }
toast.success(res?.message as string); toast.success(res?.message as string);
}, },
[data?.id, searchParams] [initialValues?.id, searchParams]
); );
// ===== DELETE HANDLER ===== // ===== DELETE HANDLER =====
const deleteItemsHandler = useCallback(async () => { const deleteItemsHandler = useCallback(async () => {
const purchaseRequestId = searchParams.get('purchaseId') const purchaseRequestId = searchParams.get('purchaseId')
? parseInt(searchParams.get('purchaseId')!) ? parseInt(searchParams.get('purchaseId')!)
: data?.id || 1; : initialValues?.id || 1;
if (!purchaseRequestId) { if (!purchaseRequestId) {
toast.error('Purchase Request ID is required'); toast.error('Purchase Request ID is required');
@@ -204,14 +206,13 @@ const PurchaseOrderDetail = ({
} finally { } finally {
setIsDeleteLoading(false); setIsDeleteLoading(false);
} }
}, [data?.id, searchParams, selectedItem, selectedRowIds]); }, [initialValues?.id, searchParams, selectedItem, selectedRowIds]);
// Return null if no data provided if (!initialValues) {
if (!data) {
return null; return null;
} }
const purchaseData = data; const purchaseData = initialValues;
const purchaseOrderColumns: ColumnDef<PurchaseItem>[] = [ const purchaseOrderColumns: ColumnDef<PurchaseItem>[] = [
{ {
@@ -517,7 +518,11 @@ const PurchaseOrderDetail = ({
Lokasi Lokasi
</span> </span>
<span className='text-gray-900 ml-3 break-all'> <span className='text-gray-900 ml-3 break-all'>
: {purchaseData.items?.[0]?.warehouse?.type !== 'AREA' && purchaseData.items?.[0]?.warehouse?.location?.name ? purchaseData.items[0].warehouse.location.name : '-'} :{' '}
{purchaseData.items?.[0]?.warehouse?.type !== 'AREA' &&
purchaseData.items?.[0]?.warehouse?.location?.name
? purchaseData.items[0].warehouse.location.name
: '-'}
</span> </span>
</div> </div>
</div> </div>