From cd9cd57e23af82b4af73915c4d7d53e659376576 Mon Sep 17 00:00:00 2001 From: Pavlo Tsimura Date: Thu, 19 Oct 2023 09:46:34 +0200 Subject: [PATCH] Remove empty waypoints before request --- src/libs/actions/IOU.js | 2 +- src/libs/actions/Transaction.ts | 22 +++++++++++++- .../iou/steps/MoneyRequestConfirmPage.js | 29 ++++++++++--------- 3 files changed, 38 insertions(+), 15 deletions(-) diff --git a/src/libs/actions/IOU.js b/src/libs/actions/IOU.js index 553344842c33..9c5711fd13d5 100644 --- a/src/libs/actions/IOU.js +++ b/src/libs/actions/IOU.js @@ -646,7 +646,7 @@ function createDistanceRequest(report, participant, comment, created, transactio createdChatReportActionID, createdIOUReportActionID, reportPreviewReportActionID: reportPreviewAction.reportActionID, - waypoints: JSON.stringify(TransactionUtils.getValidWaypoints(transaction.comment.waypoints, true)), + waypoints: JSON.stringify(transaction.comment.waypoints), created, category, tag, diff --git a/src/libs/actions/Transaction.ts b/src/libs/actions/Transaction.ts index 8a7f0f7bd533..5d7bc97b5d87 100644 --- a/src/libs/actions/Transaction.ts +++ b/src/libs/actions/Transaction.ts @@ -1,6 +1,8 @@ import Onyx from 'react-native-onyx'; import lodashHas from 'lodash/has'; import lodashClone from 'lodash/clone'; +import lodashGet from 'lodash/get'; +import lodashReduce from 'lodash/reduce'; import {isEqual} from 'lodash'; import ONYXKEYS from '../../ONYXKEYS'; import * as CollectionUtils from '../CollectionUtils'; @@ -238,4 +240,22 @@ function updateWaypoints(transactionID: string, waypoints: WaypointCollection): }); } -export {addStop, createInitialWaypoints, saveWaypoint, removeWaypoint, getRoute, updateWaypoints}; +function cleanupWaypoints(transactionID: string): Promise { + const transaction = allTransactions[transactionID]; + const existingWaypoints = lodashGet(transaction, 'comment.waypoints', {}); + const validWaypoints = TransactionUtils.getValidWaypoints(existingWaypoints, true); + + const updatedWaypoints: WaypointCollection = lodashReduce(existingWaypoints, (result, value, key) => ({ + ...result, + // Explicitly set the non-existing waypoints to null so that Onyx can remove them + [key]: validWaypoints[key] ?? null, + }), {}); + + return Onyx.merge(`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, { + comment: { + waypoints: updatedWaypoints, + }, + }); +} + +export {addStop, createInitialWaypoints, saveWaypoint, removeWaypoint, getRoute, updateWaypoints, cleanupWaypoints}; diff --git a/src/pages/iou/steps/MoneyRequestConfirmPage.js b/src/pages/iou/steps/MoneyRequestConfirmPage.js index df10c5b4d609..f0a85072d469 100644 --- a/src/pages/iou/steps/MoneyRequestConfirmPage.js +++ b/src/pages/iou/steps/MoneyRequestConfirmPage.js @@ -11,6 +11,7 @@ import styles from '../../../styles/styles'; import Navigation from '../../../libs/Navigation/Navigation'; import ROUTES from '../../../ROUTES'; import * as IOU from '../../../libs/actions/IOU'; +import * as Transaction from '../../../libs/actions/Transaction'; import compose from '../../../libs/compose'; import * as ReportUtils from '../../../libs/ReportUtils'; import * as OptionsListUtils from '../../../libs/OptionsListUtils'; @@ -189,19 +190,21 @@ function MoneyRequestConfirmPage(props) { */ const createDistanceRequest = useCallback( (selectedParticipants, trimmedComment) => { - IOU.createDistanceRequest( - props.report, - selectedParticipants[0], - trimmedComment, - props.iou.created, - props.iou.transactionID, - props.iou.category, - props.iou.tag, - props.iou.amount, - props.iou.currency, - props.iou.merchant, - props.iou.billable, - ); + Transaction.cleanupWaypoints(props.iou.transactionID).then(() => { + IOU.createDistanceRequest( + props.report, + selectedParticipants[0], + trimmedComment, + props.iou.created, + props.iou.transactionID, + props.iou.category, + props.iou.tag, + props.iou.amount, + props.iou.currency, + props.iou.merchant, + props.iou.billable, + ); + }); }, [props.report, props.iou.created, props.iou.transactionID, props.iou.category, props.iou.tag, props.iou.amount, props.iou.currency, props.iou.merchant, props.iou.billable], );