mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-20 13:32:00 +00:00
refactor(FE-212): update PurchaseOrderDetail component to use initialValues prop instead of data
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user