From 642f966985006ec078aff9ec887a6390cbe90d79 Mon Sep 17 00:00:00 2001 From: ValdiANS Date: Tue, 25 Nov 2025 10:47:34 +0700 Subject: [PATCH] chore: adjust ApprovalSteps component --- src/components/pages/ApprovalSteps.tsx | 80 ++++++++++++++++++++------ 1 file changed, 61 insertions(+), 19 deletions(-) diff --git a/src/components/pages/ApprovalSteps.tsx b/src/components/pages/ApprovalSteps.tsx index 7185e31b..766c17d2 100644 --- a/src/components/pages/ApprovalSteps.tsx +++ b/src/components/pages/ApprovalSteps.tsx @@ -18,6 +18,7 @@ import { useCallback, useMemo } from 'react'; export type ApprovalStepStatus = 'APPROVED' | 'REJECTED' | 'WAITING' | 'IDLE'; export type ApprovalStepLog = { + action: string; action_by?: string; date?: string; notes?: string | null; @@ -65,28 +66,55 @@ const ApprovalSteps = ({ approvals }: ApprovalStepsProps) => { position='right' className={{ wrapper: 'md:tooltip-bottom', + content: 'p-0 rounded overflow-hidden', }} content={ <> {approval.logs && approval.logs.length > 0 && ( -
- {approval.logs?.map((approvalLog, logIdx) => ( -
- {approvalLog.date && ( - - {formatDate( - approvalLog.date, - 'YYYY-MM-DD, HH:mm:ss' - )} - - )} - Oleh: {approvalLog.action_by ?? '-'} - Catatan: {approvalLog.notes ?? '-'} -
- ))} +
+ {approval.logs?.map((approvalLog, logIdx) => { + const action = + approvalLog.action === 'CREATED' + ? 'Dibuat' + : approvalLog.action === 'UPDATED' + ? 'Diperbarui' + : approvalLog.action === 'APPROVED' + ? 'Disetujui' + : approvalLog.action === 'REJECTED' + ? 'Ditolak' + : '-'; + + return ( +
+ {approvalLog.date && ( + + {formatDate( + approvalLog.date, + 'YYYY-MM-DD, HH:mm:ss' + )} + + )} + Aksi: {action} + Oleh: {approvalLog.action_by ?? '-'} + Catatan: {approvalLog.notes ?? '-'} +
+ ); + })}
)} @@ -130,6 +158,8 @@ export const formatGroupedApprovalsToApprovalSteps = ( const lastStepNumber = groupedApprovals[groupedApprovals.length - 1]?.step_number; + const isLatestApprovalRejected = latestApproval.action === 'REJECTED'; + if (!approvalGroup && currentStepNumber <= lastStepNumber) { throw new Error( `Approval dengan ${approvalLineItem.step_name} tidak ditemukan!` @@ -158,6 +188,7 @@ export const formatGroupedApprovalsToApprovalSteps = ( if (approvalGroup.approvals) { switch (approvalGroup?.approvals[0]?.action) { case 'CREATED': + case 'UPDATED': case 'APPROVED': approvalStatus = 'APPROVED'; break; @@ -171,7 +202,10 @@ export const formatGroupedApprovalsToApprovalSteps = ( break; } } - } else if (approvalGroup.step_number === latestApproval.step_number + 1) { + } else if ( + approvalGroup.step_number === latestApproval.step_number + 1 && + !isLatestApprovalRejected + ) { approvalStatus = 'WAITING'; } else { approvalStatus = 'IDLE'; @@ -182,6 +216,7 @@ export const formatGroupedApprovalsToApprovalSteps = ( action_by: approval.action_by.name, date: approval.action_at, notes: approval.notes, + action: approval.action, })) : []; @@ -192,6 +227,13 @@ export const formatGroupedApprovalsToApprovalSteps = ( }; }); + console.log({ + approvalLine, + groupedApprovals, + latestApproval, + formattedApprovalSteps, + }); + return formattedApprovalSteps; };