Skip to content

Commit fb5c118

Browse files
Merge pull request #28266 from akinwale/task-27255
fix: prevent requesting for amounts larger than the allowed maximum
2 parents 9c50e94 + b7f3311 commit fb5c118

File tree

1 file changed

+35
-5
lines changed

1 file changed

+35
-5
lines changed

src/components/MoneyRequestConfirmationList.js

+35-5
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {format} from 'date-fns';
55
import _ from 'underscore';
66
import {View} from 'react-native';
77
import lodashGet from 'lodash/get';
8+
import {useIsFocused} from '@react-navigation/native';
89
import Text from './Text';
910
import styles from '../styles/styles';
1011
import * as ReportUtils from '../libs/ReportUtils';
@@ -36,9 +37,11 @@ import tagPropTypes from './tagPropTypes';
3637
import ConfirmedRoute from './ConfirmedRoute';
3738
import transactionPropTypes from './transactionPropTypes';
3839
import DistanceRequestUtils from '../libs/DistanceRequestUtils';
40+
import FormHelpMessage from './FormHelpMessage';
3941
import * as IOU from '../libs/actions/IOU';
4042
import * as TransactionUtils from '../libs/TransactionUtils';
4143
import * as PolicyUtils from '../libs/PolicyUtils';
44+
import * as MoneyRequestUtils from '../libs/MoneyRequestUtils';
4245

4346
const propTypes = {
4447
/** Callback to inform parent modal of success */
@@ -216,6 +219,13 @@ function MoneyRequestConfirmationList(props) {
216219
props.isDistanceRequest ? currency : props.iouCurrencyCode,
217220
);
218221

222+
const isFocused = useIsFocused();
223+
const [formError, setFormError] = useState('');
224+
useEffect(() => {
225+
// reset the form error whenever the screen gains or loses focus
226+
setFormError('');
227+
}, [isFocused]);
228+
219229
useEffect(() => {
220230
if (!shouldCalculateDistanceAmount) {
221231
return;
@@ -370,8 +380,6 @@ function MoneyRequestConfirmationList(props) {
370380
*/
371381
const confirm = useCallback(
372382
(paymentMethod) => {
373-
setDidConfirm(true);
374-
375383
if (_.isEmpty(selectedParticipants)) {
376384
return;
377385
}
@@ -381,13 +389,22 @@ function MoneyRequestConfirmationList(props) {
381389
return;
382390
}
383391

392+
setDidConfirm(true);
393+
384394
Log.info(`[IOU] Sending money via: ${paymentMethod}`);
385395
onSendMoney(paymentMethod);
386396
} else {
397+
// validate the amount for distance requests
398+
if (props.isDistanceRequest && !isDistanceRequestWithoutRoute && !MoneyRequestUtils.validateAmount(String(props.iouAmount))) {
399+
setFormError('common.error.invalidAmount');
400+
return;
401+
}
402+
403+
setDidConfirm(true);
387404
onConfirm(selectedParticipants);
388405
}
389406
},
390-
[selectedParticipants, onSendMoney, onConfirm, props.iouType],
407+
[selectedParticipants, onSendMoney, onConfirm, props.iouType, props.isDistanceRequest, isDistanceRequestWithoutRoute, props.iouAmount],
391408
);
392409

393410
const footerContent = useMemo(() => {
@@ -398,7 +415,7 @@ function MoneyRequestConfirmationList(props) {
398415
const shouldShowSettlementButton = props.iouType === CONST.IOU.MONEY_REQUEST_TYPE.SEND;
399416
const shouldDisableButton = selectedParticipants.length === 0;
400417

401-
return shouldShowSettlementButton ? (
418+
const button = shouldShowSettlementButton ? (
402419
<SettlementButton
403420
isDisabled={shouldDisableButton}
404421
onPress={confirm}
@@ -422,7 +439,20 @@ function MoneyRequestConfirmationList(props) {
422439
buttonSize={CONST.DROPDOWN_BUTTON_SIZE.LARGE}
423440
/>
424441
);
425-
}, [confirm, props.bankAccountRoute, props.iouCurrencyCode, props.iouType, props.isReadOnly, props.policyID, selectedParticipants, splitOrRequestOptions]);
442+
443+
return (
444+
<>
445+
{!_.isEmpty(formError) && (
446+
<FormHelpMessage
447+
style={[styles.ph1, styles.mb2]}
448+
isError
449+
message={translate(formError)}
450+
/>
451+
)}
452+
{button}
453+
</>
454+
);
455+
}, [confirm, props.bankAccountRoute, props.iouCurrencyCode, props.iouType, props.isReadOnly, props.policyID, selectedParticipants, splitOrRequestOptions, translate, formError]);
426456

427457
return (
428458
<OptionsSelector

0 commit comments

Comments
 (0)