Skip to content

Commit 595bf40

Browse files
authored
Merge pull request #32533 from Expensify/cmartins-createUpdateMoneyRequestAmount
Create updateMoneyRequestAmountOrCurrency
2 parents 7b836cf + 78dae42 commit 595bf40

File tree

5 files changed

+46
-24
lines changed

5 files changed

+46
-24
lines changed

src/libs/actions/IOU.js

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -837,7 +837,7 @@ function createDistanceRequest(report, participant, comment, created, category,
837837

838838
/**
839839
* @param {String} transactionID
840-
* @param {Number} transactionThreadReportID
840+
* @param {String} transactionThreadReportID
841841
* @param {Object} transactionChanges
842842
* @param {String} [transactionChanges.created] Present when updated the date field
843843
* @param {Boolean} onlyIncludeChangedFields
@@ -1017,7 +1017,7 @@ function getUpdateMoneyRequestParams(transactionID, transactionThreadReportID, t
10171017
* Updates the created date of a money request
10181018
*
10191019
* @param {String} transactionID
1020-
* @param {Number} transactionThreadReportID
1020+
* @param {String} transactionThreadReportID
10211021
* @param {String} val
10221022
*/
10231023
function updateMoneyRequestDate(transactionID, transactionThreadReportID, val) {
@@ -1032,7 +1032,7 @@ function updateMoneyRequestDate(transactionID, transactionThreadReportID, val) {
10321032
* Edits an existing distance request
10331033
*
10341034
* @param {String} transactionID
1035-
* @param {Number} transactionThreadReportID
1035+
* @param {String} transactionThreadReportID
10361036
* @param {Object} transactionChanges
10371037
* @param {String} [transactionChanges.created]
10381038
* @param {Number} [transactionChanges.amount]
@@ -2242,7 +2242,7 @@ function editRegularMoneyRequest(transactionID, transactionThreadReportID, trans
22422242

22432243
/**
22442244
* @param {object} transaction
2245-
* @param {Number} transactionThreadReportID
2245+
* @param {String} transactionThreadReportID
22462246
* @param {Object} transactionChanges
22472247
*/
22482248
function editMoneyRequest(transaction, transactionThreadReportID, transactionChanges) {
@@ -2253,6 +2253,23 @@ function editMoneyRequest(transaction, transactionThreadReportID, transactionCha
22532253
}
22542254
}
22552255

2256+
/**
2257+
* Updates the amount and currency fields of a money request
2258+
*
2259+
* @param {String} transactionID
2260+
* @param {String} transactionThreadReportID
2261+
* @param {String} currency
2262+
* @param {Number} amount
2263+
*/
2264+
function updateMoneyRequestAmountAndCurrency(transactionID, transactionThreadReportID, currency, amount) {
2265+
const transactionChanges = {
2266+
amount,
2267+
currency,
2268+
};
2269+
const {params, onyxData} = getUpdateMoneyRequestParams(transactionID, transactionThreadReportID, transactionChanges, true);
2270+
API.write('UpdateMoneyRequestAmountAndCurrency', params, onyxData);
2271+
}
2272+
22562273
/**
22572274
* @param {String} transactionID
22582275
* @param {Object} reportAction - the money request reportAction we are deleting
@@ -3505,6 +3522,7 @@ export {
35053522
setUpDistanceTransaction,
35063523
navigateToNextPage,
35073524
updateMoneyRequestDate,
3525+
updateMoneyRequestAmountAndCurrency,
35083526
replaceReceipt,
35093527
detachReceipt,
35103528
getIOUReportID,

src/pages/EditRequestPage.js

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,22 @@ function EditRequestPage({report, route, parentReport, policyCategories, policyT
120120
Navigation.dismissModal(report.reportID);
121121
}
122122

123+
const saveAmountAndCurrency = useCallback(
124+
({amount, currency: newCurrency}) => {
125+
const newAmount = CurrencyUtils.convertToBackendAmount(Number.parseFloat(amount));
126+
127+
// If the value hasn't changed, don't request to save changes on the server and just close the modal
128+
if (newAmount === TransactionUtils.getAmount(transaction) && newCurrency === TransactionUtils.getCurrency(transaction)) {
129+
Navigation.dismissModal();
130+
return;
131+
}
132+
133+
IOU.updateMoneyRequestAmountAndCurrency(transaction.transactionID, report.reportID, newCurrency, newAmount);
134+
Navigation.dismissModal();
135+
},
136+
[transaction, report],
137+
);
138+
123139
const saveCreated = useCallback(
124140
({created: newCreated}) => {
125141
// If the value hasn't changed, don't request to save changes on the server and just close the modal
@@ -164,19 +180,7 @@ function EditRequestPage({report, route, parentReport, policyCategories, policyT
164180
defaultAmount={transactionAmount}
165181
defaultCurrency={defaultCurrency}
166182
reportID={report.reportID}
167-
onSubmit={(transactionChanges) => {
168-
const amount = CurrencyUtils.convertToBackendAmount(Number.parseFloat(transactionChanges));
169-
// In case the amount hasn't been changed, do not make the API request.
170-
if (amount === transactionAmount && transactionCurrency === defaultCurrency) {
171-
Navigation.dismissModal();
172-
return;
173-
}
174-
// Temporarily disabling currency editing and it will be enabled as a quick follow up
175-
editMoneyRequest({
176-
amount,
177-
currency: defaultCurrency,
178-
});
179-
}}
183+
onSubmit={saveAmountAndCurrency}
180184
onNavigateToCurrency={() => {
181185
const activeRoute = encodeURIComponent(Navigation.getActiveRouteWithoutParams());
182186
Navigation.navigate(ROUTES.EDIT_CURRENCY_REQUEST.getRoute(report.reportID, defaultCurrency, activeRoute));

src/pages/iou/request/step/IOURequestStepAmount.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,10 @@ function IOURequestStepAmount({
6868
};
6969

7070
/**
71-
* @param {Number} currentAmount
71+
* @param {Number} amount
7272
*/
73-
const navigateToNextPage = (currentAmount) => {
74-
const amountInSmallestCurrencyUnits = CurrencyUtils.convertToBackendAmount(Number.parseFloat(currentAmount));
73+
const navigateToNextPage = ({amount}) => {
74+
const amountInSmallestCurrencyUnits = CurrencyUtils.convertToBackendAmount(Number.parseFloat(amount));
7575
IOU.setMoneyRequestAmount_temporaryForRefactor(transactionID, amountInSmallestCurrencyUnits, currency || CONST.CURRENCY.USD);
7676

7777
if (backTo) {

src/pages/iou/steps/MoneyRequestAmountForm.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -228,8 +228,8 @@ function MoneyRequestAmountForm({amount, currency, isEditing, forwardedRef, onCu
228228
const backendAmount = CurrencyUtils.convertToBackendAmount(Number.parseFloat(currentAmount));
229229
initializeAmount(backendAmount);
230230

231-
onSubmitButtonPress(currentAmount);
232-
}, [onSubmitButtonPress, currentAmount, initializeAmount]);
231+
onSubmitButtonPress({amount: currentAmount, currency});
232+
}, [onSubmitButtonPress, currentAmount, currency, initializeAmount]);
233233

234234
/**
235235
* Input handler to check for a forward-delete key (or keyboard shortcut) press.

src/pages/iou/steps/NewRequestAmountPage.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,8 @@ function NewRequestAmountPage({route, iou, report, selectedTab}) {
128128
Navigation.navigate(ROUTES.MONEY_REQUEST_CURRENCY.getRoute(iouType, reportID, currency, activeRoute));
129129
};
130130

131-
const navigateToNextPage = (currentAmount) => {
132-
const amountInSmallestCurrencyUnits = CurrencyUtils.convertToBackendAmount(Number.parseFloat(currentAmount));
131+
const navigateToNextPage = ({amount}) => {
132+
const amountInSmallestCurrencyUnits = CurrencyUtils.convertToBackendAmount(Number.parseFloat(amount));
133133
IOU.setMoneyRequestAmount(amountInSmallestCurrencyUnits);
134134
IOU.setMoneyRequestCurrency(currency);
135135

0 commit comments

Comments
 (0)