Skip to content

Commit ecb334f

Browse files
committed
fix: Split action does not trigger paywall in expired workspace
1 parent d629291 commit ecb334f

7 files changed

Lines changed: 32 additions & 11 deletions

File tree

src/components/MoneyRequestHeaderSecondaryActions.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,9 @@ function MoneyRequestHeaderSecondaryActions({reportID, onBackButtonPress}: Money
141141
const [quickAction] = useOnyx(ONYXKEYS.NVP_QUICK_ACTION_GLOBAL_CREATE);
142142
const [isSelfTourViewed = false] = useOnyx(ONYXKEYS.NVP_ONBOARDING, {selector: hasSeenTourSelector});
143143
const [betas] = useOnyx(ONYXKEYS.BETAS);
144+
const [ownerBillingGracePeriodEnd] = useOnyx(ONYXKEYS.NVP_PRIVATE_OWNER_BILLING_GRACE_PERIOD_END);
145+
const [userBillingGracePeriodEnds] = useOnyx(ONYXKEYS.COLLECTION.SHARED_NVP_PRIVATE_USER_BILLING_GRACE_PERIOD_END);
146+
const [amountOwed] = useOnyx(ONYXKEYS.NVP_PRIVATE_AMOUNT_OWED);
144147

145148
// Custom hooks
146149
const defaultExpensePolicy = useDefaultExpensePolicy();
@@ -332,7 +335,7 @@ function MoneyRequestHeaderSecondaryActions({reportID, onBackButtonPress}: Money
332335
icon: expensifyIcons.ArrowSplit,
333336
value: CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.SPLIT,
334337
onSelected: () => {
335-
initSplitExpense(transaction, policy);
338+
initSplitExpense(transaction, policy, ownerBillingGracePeriodEnd, userBillingGracePeriodEnds, amountOwed);
336339
},
337340
},
338341
[CONST.REPORT.TRANSACTION_SECONDARY_ACTIONS.MERGE]: {

src/components/ReportActionItem/MoneyRequestView.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,9 @@ function MoneyRequestView({
181181
const {getReportRHPActiveRoute} = useActiveRoute();
182182
const {showConfirmModal} = useConfirmModal();
183183
const [lastVisitedPath] = useOnyx(ONYXKEYS.LAST_VISITED_PATH);
184+
const [ownerBillingGracePeriodEnd] = useOnyx(ONYXKEYS.NVP_PRIVATE_OWNER_BILLING_GRACE_PERIOD_END);
185+
const [userBillingGracePeriodEnds] = useOnyx(ONYXKEYS.COLLECTION.SHARED_NVP_PRIVATE_USER_BILLING_GRACE_PERIOD_END);
186+
const [amountOwed] = useOnyx(ONYXKEYS.NVP_PRIVATE_AMOUNT_OWED);
184187

185188
const {currentSearchResults} = useSearchStateContext();
186189
const reportAttributes = useReportAttributes();
@@ -928,7 +931,7 @@ function MoneyRequestView({
928931
}
929932

930933
if (shouldShowSplitIndicator && isSplitAvailable) {
931-
initSplitExpense(transaction, policy);
934+
initSplitExpense(transaction, policy, ownerBillingGracePeriodEnd, userBillingGracePeriodEnds, amountOwed);
932935
return;
933936
}
934937

src/hooks/useExpenseActions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ function useExpenseActions({reportID, isReportInSearch = false, backTo, onDuplic
300300
if (transactions.length !== 1) {
301301
return;
302302
}
303-
initSplitExpense(currentTransaction, policy);
303+
initSplitExpense(currentTransaction, policy, ownerBillingGracePeriodEnd, userBillingGracePeriodEnds, amountOwed);
304304
},
305305
},
306306
[CONST.REPORT.SECONDARY_ACTIONS.MERGE]: {

src/hooks/useSearchBulkActions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1389,7 +1389,7 @@ function useSearchBulkActions({queryJSON}: UseSearchBulkActionsParams) {
13891389
icon: expensifyIcons.ArrowSplit,
13901390
value: CONST.SEARCH.BULK_ACTION_TYPES.SPLIT,
13911391
onSelected: () => {
1392-
initSplitExpense(firstTransaction, firstTransactionPolicy);
1392+
initSplitExpense(firstTransaction, firstTransactionPolicy, ownerBillingGracePeriodEnd, userBillingGracePeriodEnds, amountOwed);
13931393
},
13941394
});
13951395
}

src/hooks/useSelectedTransactionsActions.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@ function useSelectedTransactionsActions({
9191
const [allTransactionViolations] = useOnyx(ONYXKEYS.COLLECTION.TRANSACTION_VIOLATIONS);
9292
const [allReportNameValuePairs] = useOnyx(ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS);
9393
const {getCurrencyDecimals} = useCurrencyListActions();
94+
const [ownerBillingGracePeriodEnd] = useOnyx(ONYXKEYS.NVP_PRIVATE_OWNER_BILLING_GRACE_PERIOD_END);
95+
const [userBillingGracePeriodEnds] = useOnyx(ONYXKEYS.COLLECTION.SHARED_NVP_PRIVATE_USER_BILLING_GRACE_PERIOD_END);
96+
const [amountOwed] = useOnyx(ONYXKEYS.NVP_PRIVATE_AMOUNT_OWED);
9497

9598
const expensifyIcons = useMemoizedLazyExpensifyIcons([
9699
'Stopwatch',
@@ -469,7 +472,7 @@ function useSelectedTransactionsActions({
469472
icon: expensifyIcons.ArrowSplit,
470473
value: SPLIT,
471474
onSelected: () => {
472-
initSplitExpense(firstTransaction, policy);
475+
initSplitExpense(firstTransaction, policy, ownerBillingGracePeriodEnd, userBillingGracePeriodEnds, amountOwed);
473476
},
474477
});
475478
}

src/libs/actions/SplitExpenses.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@ import isSearchTopmostFullScreenRoute from '@libs/Navigation/helpers/isSearchTop
66
import Navigation from '@libs/Navigation/Navigation';
77
import {rand64} from '@libs/NumberUtils';
88
import {getTransactionDetails, isOpenReport} from '@libs/ReportUtils';
9+
import {shouldRestrictUserBillableActions} from '@libs/SubscriptionUtils';
910
import {buildOptimisticTransaction, getChildTransactions, getOriginalTransactionWithSplitInfo, isDistanceRequest} from '@libs/TransactionUtils';
1011
import CONST from '@src/CONST';
1112
import ONYXKEYS from '@src/ONYXKEYS';
1213
import ROUTES from '@src/ROUTES';
13-
import type {Policy, Report, Transaction} from '@src/types/onyx';
14+
import type {BillingGraceEndPeriod, Policy, Report, Transaction} from '@src/types/onyx';
1415
import type {Attendee} from '@src/types/onyx/IOU';
1516
import type {TransactionCustomUnit} from '@src/types/onyx/Transaction';
1617
import {initSplitExpenseItemData, updateSplitExpenseDistanceFromAmount} from './IOU/SplitExpenseItems';
@@ -38,11 +39,22 @@ Onyx.connectWithoutView({
3839
/**
3940
* Create a draft transaction to set up split expense details for the split expense flow
4041
*/
41-
function initSplitExpense(transaction: OnyxEntry<Transaction>, policy?: OnyxEntry<Policy>): void {
42+
function initSplitExpense(
43+
transaction: OnyxEntry<Transaction>,
44+
policy: OnyxEntry<Policy>,
45+
ownerBillingGracePeriodEnd: OnyxEntry<number>,
46+
userBillingGracePeriodEnds: OnyxCollection<BillingGraceEndPeriod>,
47+
amountOwed: OnyxEntry<number>,
48+
): void {
4249
if (!transaction) {
4350
return;
4451
}
4552

53+
if (!!policy && shouldRestrictUserBillableActions(policy, ownerBillingGracePeriodEnd, userBillingGracePeriodEnds, amountOwed)) {
54+
Navigation.navigate(ROUTES.RESTRICTED_ACTION.getRoute(policy.id));
55+
return;
56+
}
57+
4658
const reportID = transaction.reportID ?? String(CONST.DEFAULT_NUMBER_ID);
4759
const originalTransactionID = transaction?.comment?.originalTransactionID;
4860
const originalTransaction = allTransactions?.[`${ONYXKEYS.COLLECTION.TRANSACTION}${originalTransactionID}`];

tests/actions/IOUTest/SplitTest.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4580,7 +4580,7 @@ describe('initSplitExpense', () => {
45804580
reportID: '456',
45814581
};
45824582

4583-
initSplitExpense(transaction);
4583+
initSplitExpense(transaction, undefined, undefined, undefined, undefined);
45844584
await waitForBatchedUpdates();
45854585

45864586
const draftTransaction = await getOnyxValue(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transaction.transactionID}`);
@@ -4605,7 +4605,7 @@ describe('initSplitExpense', () => {
46054605
});
46064606
it('should not initialize split expense for null transaction', async () => {
46074607
const transaction: Transaction | undefined = undefined;
4608-
initSplitExpense(transaction);
4608+
initSplitExpense(transaction, undefined, undefined, undefined, undefined);
46094609
await waitForBatchedUpdates();
46104610

46114611
expect(transaction).toBeFalsy();
@@ -4629,7 +4629,7 @@ describe('initSplitExpense', () => {
46294629
reportID: '456',
46304630
};
46314631

4632-
initSplitExpense(transaction);
4632+
initSplitExpense(transaction, undefined, undefined, undefined, undefined);
46334633
await waitForBatchedUpdates();
46344634

46354635
const draftTransaction = await getOnyxValue(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transaction.transactionID}`);
@@ -4698,7 +4698,7 @@ describe('initSplitExpense', () => {
46984698
reportID: '456',
46994699
};
47004700

4701-
initSplitExpense(transaction, policy);
4701+
initSplitExpense(transaction, policy, undefined, undefined, undefined);
47024702
await waitForBatchedUpdates();
47034703

47044704
const draftTransaction = await getOnyxValue(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transaction.transactionID}`);

0 commit comments

Comments
 (0)