Skip to content

Commit

Permalink
added failure handling of update distance request
Browse files Browse the repository at this point in the history
  • Loading branch information
FitseTLT committed Nov 29, 2024
1 parent 64eaf2f commit 10a75ac
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 4 deletions.
2 changes: 1 addition & 1 deletion src/components/ReportActionItem/MoneyRequestView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -390,7 +390,7 @@ function MoneyRequestView({report, shouldShowAnimatedBackground, readonly = fals
const shouldShowReceiptAudit = isReceiptAllowed && (shouldShowReceiptEmptyState || hasReceipt);

const errors = {
...(transaction?.errorFields?.route ?? transaction?.errors),
...(transaction?.errorFields?.route ?? transaction?.errorFields?.waypoints ?? transaction?.errors),
...parentReportAction?.errors,
};

Expand Down
2 changes: 1 addition & 1 deletion src/components/ReportActionItem/ReportActionItemImage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ function ReportActionItemImage({
const {translate} = useLocalize();
const isDistanceRequest = !!transaction && TransactionUtils.isDistanceRequest(transaction);
const hasPendingWaypoints = transaction && TransactionUtils.isFetchingWaypointsFromServer(transaction);
const hasErrors = !isEmptyObject(transaction?.errors) || !isEmptyObject(transaction?.errorFields);
const hasErrors = !isEmptyObject(transaction?.errors) || !isEmptyObject(transaction?.errorFields?.route) || !isEmptyObject(transaction?.errorFields?.waypoints);
const showMapAsImage = isDistanceRequest && (hasErrors || hasPendingWaypoints);

if (showMapAsImage) {
Expand Down
31 changes: 31 additions & 0 deletions src/libs/actions/IOU.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3161,6 +3161,7 @@ type UpdateMoneyRequestDistanceParams = {
policy?: OnyxEntry<OnyxTypes.Policy>;
policyTagList?: OnyxEntry<OnyxTypes.PolicyTagLists>;
policyCategories?: OnyxEntry<OnyxTypes.PolicyCategories>;
transactionBackup: OnyxEntry<OnyxTypes.Transaction>;
};

/** Updates the waypoints of a distance expense */
Expand All @@ -3172,6 +3173,7 @@ function updateMoneyRequestDistance({
policy = {} as OnyxTypes.Policy,
policyTagList = {},
policyCategories = {},
transactionBackup,
}: UpdateMoneyRequestDistanceParams) {
const transactionChanges: TransactionChanges = {
waypoints: sanitizeRecentWaypoints(waypoints),
Expand All @@ -3195,6 +3197,35 @@ function updateMoneyRequestDistance({
value: recentServerValidatedWaypoints,
});

if (transactionBackup) {
const transaction = allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`];
// We need to have all the keys of the original waypoint in the failure data for onyx merge to properly reset
// waypoints keys that do not exist in the waypoint of the reverting failure data.
const allWaypointKeys = [...new Set([...Object.keys(transactionBackup.comment?.waypoints ?? {}), ...Object.keys(transaction?.comment?.waypoints ?? {})])];
const onyxWaypoints = allWaypointKeys.reduce((acc: NullishDeep<WaypointCollection>, key) => {
acc[key] = transactionBackup.comment?.waypoints?.[key] ? {...transactionBackup.comment?.waypoints?.[key]} : null;
return acc;
}, {});
const allModifiedWaypointsKeys = [...new Set([...Object.keys(waypoints ?? {}), ...Object.keys(transaction?.modifiedWaypoints ?? {})])];
const onyxModifiedWaypoints = allModifiedWaypointsKeys.reduce((acc: NullishDeep<WaypointCollection>, key) => {
acc[key] = transactionBackup.modifiedWaypoints?.[key] ? {...transactionBackup.modifiedWaypoints?.[key]} : null;
return acc;
}, {});
onyxData?.failureData?.push({
onyxMethod: Onyx.METHOD.MERGE,
key: `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`,
value: {
comment: {
waypoints: onyxWaypoints,
customUnit: {
quantity: transactionBackup?.comment?.customUnit?.quantity,
},
},
modifiedWaypoints: onyxModifiedWaypoints,
},
});
}

API.write(WRITE_COMMANDS.UPDATE_MONEY_REQUEST_DISTANCE, params, onyxData);
}

Expand Down
2 changes: 1 addition & 1 deletion src/libs/actions/Transaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -458,7 +458,7 @@ function abandonReviewDuplicateTransactions() {
}

function clearError(transactionID: string) {
Onyx.merge(`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, {errors: null, errorFields: {route: null}});
Onyx.merge(`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, {errors: null, errorFields: {route: null, waypoints: null, routes: null}});
}

function markAsCash(transactionID: string, transactionThreadReportID: string) {
Expand Down
1 change: 1 addition & 0 deletions src/pages/iou/request/step/IOURequestStepDistance.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -465,6 +465,7 @@ function IOURequestStepDistance({
waypoints,
...(hasRouteChanged ? {routes: transaction?.routes} : {}),
policy,
transactionBackup,
});
navigateBack();
return;
Expand Down
2 changes: 1 addition & 1 deletion src/types/onyx/Transaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,7 @@ type Transaction = OnyxCommon.OnyxValueWithOfflineFeedback<
errors?: OnyxCommon.Errors | ReceiptErrors;

/** Server side errors keyed by microtime */
errorFields?: OnyxCommon.ErrorFields<'route'>;
errorFields?: OnyxCommon.ErrorFields<'route'> & OnyxCommon.ErrorFields<'routes'> & OnyxCommon.ErrorFields<'waypoints'>;

/** The name of the file used for a receipt (formerly receiptFilename) */
filename?: string;
Expand Down

0 comments on commit 10a75ac

Please sign in to comment.