Skip to content

Commit 9ebc05b

Browse files
authored
Merge pull request Expensify#67109 from mkzie2/mkzie2-issue/67107
fix: copilot with limited access is able to pay IOU via QAB
2 parents edda9c6 + 6312eea commit 9ebc05b

2 files changed

Lines changed: 18 additions & 2 deletions

File tree

src/components/MoneyRequestConfirmationList.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {useFocusEffect, useIsFocused} from '@react-navigation/native';
22
import {deepEqual} from 'fast-equals';
3-
import React, {memo, useCallback, useEffect, useMemo, useRef, useState} from 'react';
3+
import React, {memo, useCallback, useContext, useEffect, useMemo, useRef, useState} from 'react';
44
import {InteractionManager, View} from 'react-native';
55
import type {OnyxEntry} from 'react-native-onyx';
66
import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails';
@@ -63,6 +63,7 @@ import type {SplitShares} from '@src/types/onyx/Transaction';
6363
import Button from './Button';
6464
import ButtonWithDropdownMenu from './ButtonWithDropdownMenu';
6565
import type {DropdownOption} from './ButtonWithDropdownMenu/types';
66+
import {DelegateNoAccessContext} from './DelegateNoAccessModalProvider';
6667
import FormHelpMessage from './FormHelpMessage';
6768
import MoneyRequestAmountInput from './MoneyRequestAmountInput';
6869
import MoneyRequestConfirmationListFooter from './MoneyRequestConfirmationListFooter';
@@ -237,6 +238,7 @@ function MoneyRequestConfirmationList({
237238
const [lastSelectedDistanceRates] = useOnyx(ONYXKEYS.NVP_LAST_SELECTED_DISTANCE_RATES, {canBeMissing: true});
238239
const [currencyList] = useOnyx(ONYXKEYS.CURRENCY_LIST, {canBeMissing: false});
239240
const {isBetaEnabled} = usePermissions();
241+
const {isDelegateAccessRestricted, showDelegateNoAccessModal} = useContext(DelegateNoAccessContext);
240242

241243
const isTestReceipt = useMemo(() => {
242244
return transaction?.receipt?.isTestReceipt ?? false;
@@ -923,6 +925,10 @@ function MoneyRequestConfirmationList({
923925
if (!paymentMethod) {
924926
return;
925927
}
928+
if (isDelegateAccessRestricted) {
929+
showDelegateNoAccessModal();
930+
return;
931+
}
926932
if (formError) {
927933
return;
928934
}
@@ -952,6 +958,8 @@ function MoneyRequestConfirmationList({
952958
reportID,
953959
policy,
954960
routeError,
961+
isDelegateAccessRestricted,
962+
showDelegateNoAccessModal,
955963
],
956964
);
957965

src/pages/home/sidebar/FloatingActionButtonAndPopover.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ import {useIsFocused} from '@react-navigation/native';
22
import {Str} from 'expensify-common';
33
import type {ImageContentFit} from 'expo-image';
44
import type {ForwardedRef} from 'react';
5-
import React, {forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState} from 'react';
5+
import React, {forwardRef, useCallback, useContext, useEffect, useImperativeHandle, useMemo, useRef, useState} from 'react';
66
import {InteractionManager, View} from 'react-native';
77
import type {OnyxCollection, OnyxEntry} from 'react-native-onyx';
88
import ConfirmModal from '@components/ConfirmModal';
9+
import {DelegateNoAccessContext} from '@components/DelegateNoAccessModalProvider';
910
import FloatingActionButton from '@components/FloatingActionButton';
1011
import * as Expensicons from '@components/Icon/Expensicons';
1112
import type {PopoverMenuItem} from '@components/PopoverMenu';
@@ -110,6 +111,7 @@ function FloatingActionButtonAndPopover({onHideCreateMenu, onShowCreateMenu, isT
110111
const [quickActionPolicy] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY}${quickActionReport?.policyID}`, {canBeMissing: true});
111112
const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {selector: (c) => mapOnyxCollectionItems(c, policySelector), canBeMissing: true});
112113
const currentUserPersonalDetails = useCurrentUserPersonalDetails();
114+
const {isDelegateAccessRestricted, showDelegateNoAccessModal} = useContext(DelegateNoAccessContext);
113115

114116
const [isCreateMenuActive, setIsCreateMenuActive] = useState(false);
115117
const [modalVisible, setModalVisible] = useState(false);
@@ -330,6 +332,10 @@ function FloatingActionButtonAndPopover({onHideCreateMenu, onShowCreateMenu, isT
330332
}
331333
const onSelected = () => {
332334
interceptAnonymousUser(() => {
335+
if (quickAction?.action === CONST.QUICK_ACTIONS.SEND_MONEY && isDelegateAccessRestricted) {
336+
showDelegateNoAccessModal();
337+
return;
338+
}
333339
navigateToQuickAction(isValidReport, quickAction, currentUserPersonalDetails, quickActionPolicy?.id, selectOption);
334340
});
335341
};
@@ -387,6 +393,8 @@ function FloatingActionButtonAndPopover({onHideCreateMenu, onShowCreateMenu, isT
387393
isValidReport,
388394
selectOption,
389395
shouldUseNarrowLayout,
396+
isDelegateAccessRestricted,
397+
showDelegateNoAccessModal,
390398
]);
391399

392400
const isTravelEnabled = useMemo(() => {

0 commit comments

Comments
 (0)