diff --git a/src/components/learner-credit-management/ApprovedRequestActionsTableCell.jsx b/src/components/learner-credit-management/ApprovedRequestActionsTableCell.jsx index 2787ce52e2..8301d87c55 100644 --- a/src/components/learner-credit-management/ApprovedRequestActionsTableCell.jsx +++ b/src/components/learner-credit-management/ApprovedRequestActionsTableCell.jsx @@ -10,7 +10,7 @@ const ApprovedRequestActionsTableCell = ({ row }) => { // Check if the cancel and remind button should be shown for this row const shouldShowShowActionButtons = ( - (original.lastActionStatus === 'waiting_for_learner' || original.requestStatus === 'approved') + (original.lastActionStatus === 'reminded' || original.requestStatus === 'approved') ); // Don't render dropdown if no actions are available diff --git a/src/components/learner-credit-management/BudgetDetailApprovedRequestTable.jsx b/src/components/learner-credit-management/BudgetDetailApprovedRequestTable.jsx index ed07d43e52..3585dac5ba 100644 --- a/src/components/learner-credit-management/BudgetDetailApprovedRequestTable.jsx +++ b/src/components/learner-credit-management/BudgetDetailApprovedRequestTable.jsx @@ -17,7 +17,7 @@ const FilterStatus = (rest) => ( ); const getRequestStatusDisplayName = (status) => { - if (status === 'waiting_for_learner') { + if (status === 'appoved' || status === 'reminded') { return 'Waiting for learner'; } @@ -29,8 +29,7 @@ const getRequestStatusDisplayName = (status) => { return 'Failed cancellation'; } - return status - .split('_') + return status.split('_') .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) .join(' '); }; diff --git a/src/components/learner-credit-management/CancelApprovedRequestModal.jsx b/src/components/learner-credit-management/CancelApprovedRequestModal.jsx index f95a300a4f..a76b8cdd15 100644 --- a/src/components/learner-credit-management/CancelApprovedRequestModal.jsx +++ b/src/components/learner-credit-management/CancelApprovedRequestModal.jsx @@ -62,7 +62,7 @@ const CancelApprovedRequestModal = ({

diff --git a/src/components/learner-credit-management/RequestStatusTableCell.jsx b/src/components/learner-credit-management/RequestStatusTableCell.jsx index a821cd401b..829bdda224 100644 --- a/src/components/learner-credit-management/RequestStatusTableCell.jsx +++ b/src/components/learner-credit-management/RequestStatusTableCell.jsx @@ -40,7 +40,7 @@ const RequestStatusTableCell = ({ enterpriseId, row }) => { // Currently we check both `lastActionErrorReason` and `lastActionStatus` which creates // confusion since status information comes from two different sources. The API should // be updated to return a single, unified status field to simplify this logic. - if (lastActionErrorReason === 'Failed: Cancellation') { + if (lastActionErrorReason === 'failed_cancellation') { return ( { ); } - if (lastActionStatus === 'waiting_for_learner' || requestStatus === 'approved') { + if (lastActionStatus === 'reminded' || requestStatus === 'approved') { return ( { } }; -const getLastActionStatus = (latestAction) => latestAction?.status?.toLowerCase().replace(/\s+/g, '_'); - // Transform API response data to match DataTable the requirements const transformApiDataToTableData = (apiResults) => apiResults.map((item) => { const requestDate = new Date(item.created).toLocaleDateString('en-US', { @@ -85,7 +83,7 @@ const transformApiDataToTableData = (apiResults) => apiResults.map((item) => { amount: item?.coursePrice || 0, requestDate, requestStatus: item?.state, - lastActionStatus: getLastActionStatus(item?.latestAction), + lastActionStatus: item?.latestAction?.status, // Direct assignment, no transformation lastActionErrorReason: item?.latestAction?.errorReason, lastActionDate, latestAction: item?.latestAction, diff --git a/src/components/learner-credit-management/requests-tab/BnrRequestStatusCell.jsx b/src/components/learner-credit-management/requests-tab/BnrRequestStatusCell.jsx index 1e18afc367..81c1c8a37b 100644 --- a/src/components/learner-credit-management/requests-tab/BnrRequestStatusCell.jsx +++ b/src/components/learner-credit-management/requests-tab/BnrRequestStatusCell.jsx @@ -11,6 +11,24 @@ const BnrRequestStatusCell = ({ row }) => { const recentAction = latestAction?.recentAction; const [target, setTarget] = useState(null); const [isModalOpen, setIsModalOpen] = useState(false); + + // Format error reasons for display + const formatErrorReason = (reason) => { + if (!reason) { + return null; + } + + const errorReasonMap = { + failed_approval: 'Failed: Approval', + failed_cancellation: 'Failed: Cancellation', + failed_system: 'Failed: System Error', + failed_payment: 'Failed: Payment', + failed_enrollment: 'Failed: Enrollment', + }; + + return errorReasonMap[reason] + || reason.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(': '); + }; const getStatusConfig = useMemo(() => { const statusConfigs = { requested: { @@ -44,7 +62,8 @@ const BnrRequestStatusCell = ({ row }) => { }; // Determine what to display in the chip - const displayText = errorReason || getStatusConfig.label; + const formattedErrorReason = formatErrorReason(errorReason); + const displayText = formattedErrorReason || getStatusConfig.label; const displayIcon = errorReason ? Error : getStatusConfig.icon; const displayVariant = errorReason ? 'dark' : ''; const isClickable = !!errorReason; @@ -66,7 +85,7 @@ const BnrRequestStatusCell = ({ row }) => { {errorReason && ( ', () => { const mockFailedCancellationRequest = { ...mockApprovedRequest, - lastActionErrorReason: 'Failed: Cancellation', + lastActionErrorReason: 'failed_cancellation', + latestAction: { + ...mockApprovedRequest.latestAction, + errorReason: 'failed_cancellation', + }, }; useBnrSubsidyRequests.mockReturnValue({ isLoading: false, @@ -1895,12 +1899,12 @@ describe('', () => { const mockRequestsWithDifferentStatuses = [ { ...mockApprovedRequest, - lastActionStatus: 'waiting_for_learner', + lastActionStatus: 'reminded', }, { ...createMockApprovedRequest(), lastActionStatus: 'refunded', - lastActionErrorReason: 'Failed: Cancellation', + lastActionErrorReason: 'failed_cancellation', }, { ...createMockApprovedRequest(),