Skip to content

Commit 4b0bfd6

Browse files
authored
Merge pull request Expensify#67241 from ZhenjaHorbach/splits-show-for-non-admin-approver-splits-expense
Splits show error after non-admin approver splits the expense
2 parents 2927406 + 46c3e9a commit 4b0bfd6

3 files changed

Lines changed: 20 additions & 7 deletions

File tree

src/libs/ReportSecondaryActionUtils.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,11 @@ function isSplitAction(report: Report, reportTransactions: Transaction[], policy
9898
const isSubmitter = isCurrentUserSubmitter(report);
9999
const isAdmin = policy?.role === CONST.POLICY.ROLE.ADMIN;
100100
const isManager = (report.managerID ?? CONST.DEFAULT_NUMBER_ID) === getCurrentUserAccountID();
101+
const isOpenReport = isOpenReportUtils(report);
102+
103+
if (isOpenReport) {
104+
return isSubmitter || isAdmin;
105+
}
101106

102107
return isSubmitter || isAdmin || isManager;
103108
}
@@ -642,4 +647,4 @@ function getSecondaryTransactionThreadActions(
642647

643648
return options;
644649
}
645-
export {getSecondaryReportActions, getSecondaryTransactionThreadActions, isDeleteAction, getSecondaryExportReportActions};
650+
export {getSecondaryReportActions, getSecondaryTransactionThreadActions, isDeleteAction, getSecondaryExportReportActions, isSplitAction};

src/pages/iou/SplitExpenseEditPage.tsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import ScreenWrapper from '@components/ScreenWrapper';
99
import ScrollView from '@components/ScrollView';
1010
import useLocalize from '@hooks/useLocalize';
1111
import useOnyx from '@hooks/useOnyx';
12+
import usePolicy from '@hooks/usePolicy';
1213
import useThemeStyles from '@hooks/useThemeStyles';
1314
import {removeSplitExpenseField, updateSplitExpenseField} from '@libs/actions/IOU';
1415
import {convertToDisplayString} from '@libs/CurrencyUtils';
@@ -17,7 +18,8 @@ import Navigation from '@libs/Navigation/Navigation';
1718
import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types';
1819
import type {SplitExpenseParamList} from '@libs/Navigation/types';
1920
import Parser from '@libs/Parser';
20-
import {getPolicy, getTagLists} from '@libs/PolicyUtils';
21+
import {getTagLists} from '@libs/PolicyUtils';
22+
import {isSplitAction} from '@libs/ReportSecondaryActionUtils';
2123
import type {TransactionDetails} from '@libs/ReportUtils';
2224
import {getParsedComment, getReportOrDraftReport, getTransactionDetails} from '@libs/ReportUtils';
2325
import {hasEnabledTags} from '@libs/TagsOptionsListUtils';
@@ -39,9 +41,8 @@ function SplitExpenseEditPage({route}: SplitExpensePageProps) {
3941

4042
const [splitExpenseDraftTransaction] = useOnyx(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${CONST.IOU.OPTIMISTIC_TRANSACTION_ID}`, {canBeMissing: false});
4143
const splitExpenseDraftTransactionDetails = useMemo<Partial<TransactionDetails>>(() => getTransactionDetails(splitExpenseDraftTransaction) ?? {}, [splitExpenseDraftTransaction]);
42-
// This will be fixed as part of https://github.com/Expensify/Expensify/issues/507850
43-
// eslint-disable-next-line deprecation/deprecation
44-
const policy = getPolicy(report?.policyID);
44+
45+
const policy = usePolicy(report?.policyID);
4546
const [policyCategories] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_CATEGORIES}${report?.policyID}`, {canBeMissing: false});
4647
const [policyTags] = useOnyx(`${ONYXKEYS.COLLECTION.POLICY_TAGS}${report?.policyID}`, {canBeMissing: false});
4748

@@ -60,10 +61,11 @@ function SplitExpenseEditPage({route}: SplitExpensePageProps) {
6061

6162
const shouldShowTag = !!policy?.areTagsEnabled && !!(transactionTag || hasEnabledTags(policyTagLists));
6263
const shouldShowCategory = !!policy?.areCategoriesEnabled && !!policyCategories;
64+
const isSplitAvailable = report && transaction && isSplitAction(report, [transaction], policy);
6365

6466
return (
6567
<ScreenWrapper testID={SplitExpenseEditPage.displayName}>
66-
<FullPageNotFoundView shouldShow={!reportID || isEmptyObject(splitExpenseDraftTransaction)}>
68+
<FullPageNotFoundView shouldShow={!reportID || isEmptyObject(splitExpenseDraftTransaction) || !isSplitAvailable}>
6769
<View style={[styles.flex1]}>
6870
<HeaderWithBackButton
6971
title={translate('iou.splitExpenseEditTitle', {

src/pages/iou/SplitExpensePage.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import SplitListItem from '@components/SelectionList/SplitListItem';
1212
import type {SectionListDataType, SplitListItemType} from '@components/SelectionList/types';
1313
import useLocalize from '@hooks/useLocalize';
1414
import useOnyx from '@hooks/useOnyx';
15+
import usePolicy from '@hooks/usePolicy';
1516
import useResponsiveLayout from '@hooks/useResponsiveLayout';
1617
import useThemeStyles from '@hooks/useThemeStyles';
1718
import {addSplitExpenseField, initDraftSplitExpenseDataForEdit, saveSplitTransactions, updateSplitExpenseAmountField} from '@libs/actions/IOU';
@@ -22,6 +23,7 @@ import getNonEmptyStringOnyxID from '@libs/getNonEmptyStringOnyxID';
2223
import Navigation from '@libs/Navigation/Navigation';
2324
import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types';
2425
import type {SplitExpenseParamList} from '@libs/Navigation/types';
26+
import {isSplitAction} from '@libs/ReportSecondaryActionUtils';
2527
import type {TransactionDetails} from '@libs/ReportUtils';
2628
import {getTransactionDetails} from '@libs/ReportUtils';
2729
import type {TranslationPathOrText} from '@libs/TransactionPreviewUtils';
@@ -47,6 +49,10 @@ function SplitExpensePage({route}: SplitExpensePageProps) {
4749
const [draftTransaction] = useOnyx(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transactionID}`, {canBeMissing: false});
4850
const [transaction] = useOnyx(`${ONYXKEYS.COLLECTION.TRANSACTION}${getNonEmptyStringOnyxID(transactionID)}`, {canBeMissing: false});
4951
const [currencyList] = useOnyx(ONYXKEYS.CURRENCY_LIST, {canBeMissing: true});
52+
const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${getNonEmptyStringOnyxID(reportID)}`, {canBeMissing: true});
53+
54+
const policy = usePolicy(report?.policyID);
55+
const isSplitAvailable = report && transaction && isSplitAction(report, [transaction], policy);
5056

5157
const transactionDetails = useMemo<Partial<TransactionDetails>>(() => getTransactionDetails(transaction) ?? {}, [transaction]);
5258
const transactionDetailsAmount = transactionDetails?.amount ?? 0;
@@ -187,7 +193,7 @@ function SplitExpensePage({route}: SplitExpensePageProps) {
187193
keyboardAvoidingViewBehavior="height"
188194
shouldDismissKeyboardBeforeClose={false}
189195
>
190-
<FullPageNotFoundView shouldShow={!reportID || isEmptyObject(draftTransaction)}>
196+
<FullPageNotFoundView shouldShow={!reportID || isEmptyObject(draftTransaction) || !isSplitAvailable}>
191197
<View style={[styles.flex1]}>
192198
<HeaderWithBackButton
193199
title={translate('iou.split')}

0 commit comments

Comments
 (0)