Skip to content

Commit 1d699f9

Browse files
authored
Merge pull request Expensify#82393 from callstack-internal/perf/reports-screen
perf: Improvements to opening reports tab
2 parents 03fd173 + 268f430 commit 1d699f9

File tree

14 files changed

+341
-58
lines changed

14 files changed

+341
-58
lines changed

src/components/Search/SearchPageHeader/SearchFiltersBar.tsx

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,23 +26,21 @@ import type {BankAccountMenuItem, SearchDateFilterKeys, SearchQueryJSON, Singula
2626
import SearchFiltersSkeleton from '@components/Skeletons/SearchFiltersSkeleton';
2727
import useAdvancedSearchFilters from '@hooks/useAdvancedSearchFilters';
2828
import useCurrencyList from '@hooks/useCurrencyList';
29-
import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails';
3029
import useFilterFormValues from '@hooks/useFilterFormValues';
3130
import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
3231
import useLocalize from '@hooks/useLocalize';
3332
import useNetwork from '@hooks/useNetwork';
3433
import useOnyx from '@hooks/useOnyx';
3534
import usePolicy from '@hooks/usePolicy';
3635
import useResponsiveLayout from '@hooks/useResponsiveLayout';
36+
import useSortedActiveAdminPolicies from '@hooks/useSortedActiveAdminPolicies';
3737
import useTheme from '@hooks/useTheme';
3838
import useThemeStyles from '@hooks/useThemeStyles';
39-
import useWorkspaceList from '@hooks/useWorkspaceList';
4039
import {close} from '@libs/actions/Modal';
4140
import {handleBulkPayItemSelected, updateAdvancedFilters} from '@libs/actions/Search';
4241
import DateUtils from '@libs/DateUtils';
4342
import Navigation from '@libs/Navigation/Navigation';
4443
import {getDisplayNameOrDefault} from '@libs/PersonalDetailsUtils';
45-
import {getActiveAdminWorkspaces} from '@libs/PolicyUtils';
4644
import {isExpenseReport} from '@libs/ReportUtils';
4745
import {buildQueryStringFromFilterFormValues, getQueryWithUpdatedValues, isFilterSupported, isSearchDatePreset} from '@libs/SearchQueryUtils';
4846
import {
@@ -106,7 +104,7 @@ function SearchFiltersBar({
106104
const isCurrentSelectedExpenseReport = isExpenseReport(currentSelectedReportID);
107105
const theme = useTheme();
108106
const styles = useThemeStyles();
109-
const {translate, localeCompare} = useLocalize();
107+
const {translate} = useLocalize();
110108
const kycWallRef = useContext(KYCWallContext);
111109

112110
const {isOffline} = useNetwork();
@@ -126,15 +124,7 @@ function SearchFiltersBar({
126124
const expensifyIcons = useMemoizedLazyExpensifyIcons(['Filter', 'Columns']);
127125
const {isDelegateAccessRestricted, showDelegateNoAccessModal} = useContext(DelegateNoAccessContext);
128126

129-
// Get workspace data for the filter
130-
const {sections: workspaces, shouldShowSearchInput: shouldShowWorkspaceSearchInput} = useWorkspaceList({
131-
policies: allPolicies,
132-
currentUserLogin: email,
133-
shouldShowPendingDeletePolicy: false,
134-
selectedPolicyIDs: undefined,
135-
searchTerm: '',
136-
localeCompare,
137-
});
127+
const {typeFiltersKeys, workspaces, shouldShowWorkspaceSearchInput} = useAdvancedSearchFilters();
138128

139129
const shouldDisplayWorkspaceFilter = useMemo(() => workspaces.some((section) => section.data.length > 1), [workspaces]);
140130

@@ -299,8 +289,7 @@ function SearchFiltersBar({
299289
const value = options.find((option) => option.value === searchAdvancedFiltersForm.withdrawalType) ?? null;
300290
return [options, value];
301291
}, [translate, searchAdvancedFiltersForm.withdrawalType]);
302-
const {accountID} = useCurrentUserPersonalDetails();
303-
const activeAdminPolicies = getActiveAdminWorkspaces(allPolicies, accountID.toString()).sort((a, b) => localeCompare(a.name || '', b.name || ''));
292+
const activeAdminPolicies = useSortedActiveAdminPolicies();
304293

305294
const updateFilterForm = useCallback(
306295
(values: Partial<SearchAdvancedFiltersForm>) => {
@@ -566,8 +555,6 @@ function SearchFiltersBar({
566555

567556
const workspaceValue = useMemo(() => selectedWorkspaceOptions.map((option) => option.text), [selectedWorkspaceOptions]);
568557

569-
const {typeFiltersKeys} = useAdvancedSearchFilters();
570-
571558
/**
572559
* Builds the list of all filter chips to be displayed in the
573560
* filter bar

src/components/SettlementButton/index.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import KYCWall from '@components/KYCWall';
1111
import {KYCWallContext} from '@components/KYCWall/KYCWallContext';
1212
import type {ContinueActionParams, PaymentMethod} from '@components/KYCWall/types';
1313
import {LockedAccountContext} from '@components/LockedAccountModalProvider';
14+
import useActiveAdminPolicies from '@hooks/useActiveAdminPolicies';
1415
import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails';
1516
import {useMemoizedLazyExpensifyIcons} from '@hooks/useLazyAsset';
1617
import useLocalize from '@hooks/useLocalize';
@@ -25,7 +26,7 @@ import {getLastPolicyBankAccountID, getLastPolicyPaymentMethod} from '@libs/acti
2526
import {isBankAccountPartiallySetup} from '@libs/BankAccountUtils';
2627
import Navigation from '@libs/Navigation/Navigation';
2728
import {formatPaymentMethods, getActivePaymentType} from '@libs/PaymentUtils';
28-
import {getActiveAdminWorkspaces, getPolicyEmployeeAccountIDs, isPaidGroupPolicy, isPolicyAdmin} from '@libs/PolicyUtils';
29+
import {getPolicyEmployeeAccountIDs, isPaidGroupPolicy, isPolicyAdmin, sortPoliciesByName} from '@libs/PolicyUtils';
2930
import {hasRequestFromCurrentAccount} from '@libs/ReportActionsUtils';
3031
import {
3132
doesReportBelongToWorkspace,
@@ -129,11 +130,10 @@ function SettlementButton({
129130
const lastBankAccountID = getLastPolicyBankAccountID(policyIDKey, lastPaymentMethods, iouReport?.type as keyof LastPaymentMethodType);
130131
const [fundList] = useOnyx(ONYXKEYS.FUND_LIST, {canBeMissing: true});
131132
const [activePolicyID] = useOnyx(ONYXKEYS.NVP_ACTIVE_POLICY_ID, {canBeMissing: true});
132-
const [policies] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {canBeMissing: true});
133133
const invoiceReceiverPolicyID = chatReport?.invoiceReceiver && 'policyID' in chatReport.invoiceReceiver ? chatReport.invoiceReceiver.policyID : undefined;
134134
const invoiceReceiverPolicy = usePolicy(invoiceReceiverPolicyID);
135135
const activePolicy = usePolicy(activePolicyID);
136-
const activeAdminPolicies = getActiveAdminWorkspaces(policies, accountID.toString()).sort((a, b) => localeCompare(a.name || '', b.name || ''));
136+
const activeAdminPolicies = useActiveAdminPolicies();
137137
const reportID = iouReport?.reportID;
138138
const personalPolicy = usePolicy(personalPolicyID);
139139

@@ -319,7 +319,8 @@ function SettlementButton({
319319
}
320320

321321
if ((hasMultiplePolicies || hasSinglePolicy) && canUseWallet && !isPersonalOnlyOption) {
322-
for (const p of activeAdminPolicies) {
322+
const sortedActiveAdminPolicies = sortPoliciesByName(activeAdminPolicies, localeCompare);
323+
for (const p of sortedActiveAdminPolicies) {
323324
const policyName = p.name;
324325
buttonOptions.push({
325326
text: translate('iou.payWithPolicy', truncate(policyName, {length: CONST.ADDITIONAL_ALLOWED_CHARACTERS}), ''),
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import {activeAdminPoliciesSelector} from '@selectors/Policy';
2+
import {useCallback} from 'react';
3+
import type {OnyxCollection} from 'react-native-onyx';
4+
import ONYXKEYS from '@src/ONYXKEYS';
5+
import type {Policy} from '@src/types/onyx';
6+
import getEmptyArray from '@src/types/utils/getEmptyArray';
7+
import useCurrentUserPersonalDetails from './useCurrentUserPersonalDetails';
8+
import useOnyx from './useOnyx';
9+
10+
function useActiveAdminPolicies() {
11+
const {login} = useCurrentUserPersonalDetails();
12+
const selector = useCallback((policies: OnyxCollection<Policy>) => activeAdminPoliciesSelector(policies, login ?? ''), [login]);
13+
const [activeAdminPolicies = getEmptyArray<Policy>()] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {canBeMissing: true, selector}, [login]);
14+
15+
return activeAdminPolicies;
16+
}
17+
18+
export default useActiveAdminPolicies;

src/hooks/useAdvancedSearchFilters.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ function useAdvancedSearchFilters() {
224224

225225
const [currentUserLogin] = useOnyx(ONYXKEYS.SESSION, {canBeMissing: false, selector: emailSelector});
226226

227-
const {sections: workspaces} = useWorkspaceList({
227+
const {sections: workspaces, shouldShowSearchInput: shouldShowWorkspaceSearchInput} = useWorkspaceList({
228228
policies,
229229
currentUserLogin,
230230
shouldShowPendingDeletePolicy: false,
@@ -267,6 +267,8 @@ function useAdvancedSearchFilters() {
267267

268268
return {
269269
currentType,
270+
workspaces,
271+
shouldShowWorkspaceSearchInput,
270272
typeFiltersKeys: typeFiltersKeys[currentType]
271273
.map((section) =>
272274
section

src/hooks/useBulkPayOptions.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {isCurrencySupportedForGlobalReimbursement} from '@libs/actions/Policy/Po
66
import {isBankAccountPartiallySetup} from '@libs/BankAccountUtils';
77
import Navigation from '@libs/Navigation/Navigation';
88
import {formatPaymentMethods} from '@libs/PaymentUtils';
9+
import {sortPoliciesByName} from '@libs/PolicyUtils';
910
import {hasRequestFromCurrentAccount} from '@libs/ReportActionsUtils';
1011
import {
1112
getBankAccountRoute,
@@ -17,7 +18,8 @@ import {
1718
import {useSettlementButtonPaymentMethods} from '@libs/SettlementButtonUtils';
1819
import CONST from '@src/CONST';
1920
import ONYXKEYS from '@src/ONYXKEYS';
20-
import type {AccountData, Policy} from '@src/types/onyx';
21+
import type {AccountData} from '@src/types/onyx';
22+
import useActiveAdminPolicies from './useActiveAdminPolicies';
2123
import useCurrentUserPersonalDetails from './useCurrentUserPersonalDetails';
2224
import {useMemoizedLazyExpensifyIcons} from './useLazyAsset';
2325
import useLocalize from './useLocalize';
@@ -32,7 +34,6 @@ type UseBulkPayOptionProps = {
3234
selectedPolicyID: string | undefined;
3335
selectedReportID: string | undefined;
3436
lastPaymentMethod?: string | undefined;
35-
activeAdminPolicies: Policy[];
3637
isCurrencySupportedWallet?: boolean;
3738
currency: string | undefined;
3839
formattedAmount: string;
@@ -50,14 +51,13 @@ type UseBulkPayOptionReturnType = {
5051
function useBulkPayOptions({
5152
selectedPolicyID,
5253
selectedReportID,
53-
activeAdminPolicies,
5454
isCurrencySupportedWallet,
5555
currency,
5656
formattedAmount,
5757
onlyShowPayElsewhere,
5858
}: UseBulkPayOptionProps): UseBulkPayOptionReturnType {
5959
const icons = useMemoizedLazyExpensifyIcons(['Building', 'User', 'Bank', 'Cash', 'Wallet']);
60-
const {translate} = useLocalize();
60+
const {translate, localeCompare} = useLocalize();
6161
const styles = useThemeStyles();
6262
const {accountID} = useCurrentUserPersonalDetails();
6363
const [userWallet] = useOnyx(ONYXKEYS.USER_WALLET, {canBeMissing: true});
@@ -70,6 +70,7 @@ function useBulkPayOptions({
7070
const [chatReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${iouReport?.chatReportID}`, {canBeMissing: true});
7171
const {isBetaEnabled} = usePermissions();
7272
const isPayInvoiceViaExpensifyBetaEnabled = isBetaEnabled(CONST.BETAS.PAY_INVOICE_VIA_EXPENSIFY);
73+
const activeAdminPolicies = useActiveAdminPolicies();
7374
const isIOUReport = isIOUReportUtil(selectedReportID);
7475
const isExpenseReport = isExpenseReportUtil(selectedReportID);
7576
const isInvoiceReport = isInvoiceReportUtil(selectedReportID);
@@ -159,7 +160,8 @@ function useBulkPayOptions({
159160
}
160161

161162
if ((hasMultiplePolicies || hasSinglePolicy) && canUseWallet && !isPersonalOnlyOption) {
162-
for (const activePolicy of activeAdminPolicies) {
163+
const sortedActiveAdminPolicies = sortPoliciesByName(activeAdminPolicies, localeCompare);
164+
for (const activePolicy of sortedActiveAdminPolicies) {
163165
const policyName = activePolicy.name;
164166
bulkPayButtonOptions.push({
165167
text: translate('iou.payWithPolicy', truncate(policyName, {length: CONST.ADDITIONAL_ALLOWED_CHARACTERS}), ''),
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import {useMemo} from 'react';
2+
import {sortPoliciesByName} from '@libs/PolicyUtils';
3+
import useActiveAdminPolicies from './useActiveAdminPolicies';
4+
import useLocalize from './useLocalize';
5+
6+
function useSortedActiveAdminPolicies() {
7+
const {localeCompare} = useLocalize();
8+
const activeAdminPolicies = useActiveAdminPolicies();
9+
const sortedActiveAdminPolicies = useMemo(() => sortPoliciesByName(activeAdminPolicies, localeCompare), [activeAdminPolicies, localeCompare]);
10+
11+
return sortedActiveAdminPolicies;
12+
}
13+
14+
export default useSortedActiveAdminPolicies;

src/libs/PolicyUtils.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1961,6 +1961,10 @@ function isPolicyTaxEnabled(policy: OnyxEntry<Policy>): boolean {
19611961
return (policy?.tax?.trackingEnabled ?? false) || isSyncTaxEnabled;
19621962
}
19631963

1964+
function sortPoliciesByName(policies: Policy[], localeCompare: (a: string, b: string) => number): Policy[] {
1965+
return policies.sort((a, b) => localeCompare(a.name || '', b.name || ''));
1966+
}
1967+
19641968
export {
19651969
canEditTaxRate,
19661970
escapeTagName,
@@ -2135,6 +2139,7 @@ export {
21352139
getDefaultTimeTrackingRate,
21362140
getActivePoliciesWithExpenseChatAndTimeEnabled,
21372141
isPolicyTaxEnabled,
2142+
sortPoliciesByName,
21382143
};
21392144

21402145
export type {MemberEmailsToAccountIDs};

src/pages/Search/AdvancedSearchFilters.tsx

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import {filterCardsHiddenFromSearch} from '@selectors/Card';
2-
import {emailSelector} from '@selectors/Session';
32
import React, {useMemo} from 'react';
43
import {View} from 'react-native';
54
import type {ValueOf} from 'react-native-gesture-handler/lib/typescript/typeUtils';
@@ -14,22 +13,20 @@ import type {SearchAmountFilterKeys, SearchDateFilterKeys, SearchDatePreset, Sea
1413
import SpacerView from '@components/SpacerView';
1514
import Text from '@components/Text';
1615
import useAdvancedSearchFilters from '@hooks/useAdvancedSearchFilters';
17-
import useCurrentUserPersonalDetails from '@hooks/useCurrentUserPersonalDetails';
1816
import useLocalize from '@hooks/useLocalize';
1917
import useOnyx from '@hooks/useOnyx';
2018
import useSingleExecution from '@hooks/useSingleExecution';
2119
import useThemeStyles from '@hooks/useThemeStyles';
2220
import useWaitForNavigation from '@hooks/useWaitForNavigation';
2321
import type {WorkspaceListItem} from '@hooks/useWorkspaceList';
24-
import useWorkspaceList from '@hooks/useWorkspaceList';
2522
import {saveSearch} from '@libs/actions/Search';
2623
import {createCardFeedKey, getCardFeedKey, getCardFeedNamesWithType, getWorkspaceCardFeedKey} from '@libs/CardFeedUtils';
2724
import {getCardDescription} from '@libs/CardUtils';
2825
import {convertToDisplayStringWithoutCurrency} from '@libs/CurrencyUtils';
2926
import Navigation from '@libs/Navigation/Navigation';
3027
import {createDisplayName} from '@libs/PersonalDetailsUtils';
3128
import {getAllTaxRates, getCleanedTagName} from '@libs/PolicyUtils';
32-
import {computeReportName} from '@libs/ReportNameUtils';
29+
import {getReportName} from '@libs/ReportNameUtils';
3330
import {
3431
buildCannedSearchQuery,
3532
buildQueryStringFromFilterFormValues,
@@ -47,7 +44,7 @@ import ONYXKEYS from '@src/ONYXKEYS';
4744
import ROUTES from '@src/ROUTES';
4845
import type {SearchAdvancedFiltersForm} from '@src/types/form';
4946
import {AMOUNT_FILTER_KEYS, DATE_FILTER_KEYS} from '@src/types/form/SearchAdvancedFiltersForm';
50-
import type {CardList, PersonalDetailsList, Policy, Report, WorkspaceCardsList} from '@src/types/onyx';
47+
import type {CardList, PersonalDetailsList, Policy, Report, ReportAttributesDerivedValue, WorkspaceCardsList} from '@src/types/onyx';
5148
import type {SearchDataTypes} from '@src/types/onyx/SearchResults';
5249
import {getEmptyObject} from '@src/types/utils/EmptyObject';
5350

@@ -554,9 +551,14 @@ function getFilterExpenseDisplayTitle(filters: Partial<SearchAdvancedFiltersForm
554551
: undefined;
555552
}
556553

557-
function getFilterInDisplayTitle(filters: Partial<SearchAdvancedFiltersForm>, _: LocaleContextProps['translate'], reports: OnyxCollection<Report> | undefined, currentUserAccountID: number) {
554+
function getFilterInDisplayTitle(
555+
filters: Partial<SearchAdvancedFiltersForm>,
556+
_: LocaleContextProps['translate'],
557+
reports: OnyxCollection<Report>,
558+
reportAttributes: ReportAttributesDerivedValue['reports'],
559+
) {
558560
return filters.in
559-
?.map((id) => computeReportName(reports?.[`${ONYXKEYS.COLLECTION.REPORT}${id}`], reports, undefined, undefined, undefined, undefined, undefined, currentUserAccountID))
561+
?.map((id) => getReportName(reports?.[`${ONYXKEYS.COLLECTION.REPORT}${id}`], reportAttributes))
560562
?.filter(Boolean)
561563
?.join(', ');
562564
}
@@ -571,23 +573,13 @@ function AdvancedSearchFilters() {
571573
const [searchAdvancedFilters = getEmptyObject<SearchAdvancedFiltersForm>()] = useOnyx(ONYXKEYS.FORMS.SEARCH_ADVANCED_FILTERS_FORM, {canBeMissing: true});
572574
const [searchCards] = useOnyx(ONYXKEYS.DERIVED.NON_PERSONAL_AND_WORKSPACE_CARD_LIST, {canBeMissing: true, selector: filterCardsHiddenFromSearch});
573575
const personalDetails = usePersonalDetails();
576+
const [reportAttributes] = useOnyx(ONYXKEYS.DERIVED.REPORT_ATTRIBUTES, {canBeMissing: true});
574577

575578
const [policies = getEmptyObject<NonNullable<OnyxCollection<Policy>>>()] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {canBeMissing: false});
576-
const [currentUserLogin] = useOnyx(ONYXKEYS.SESSION, {canBeMissing: false, selector: emailSelector});
577-
const {accountID: currentUserAccountID} = useCurrentUserPersonalDetails();
578579

579580
const taxRates = getAllTaxRates(policies);
580581

581-
const {sections: workspaces} = useWorkspaceList({
582-
policies,
583-
currentUserLogin,
584-
shouldShowPendingDeletePolicy: false,
585-
selectedPolicyIDs: undefined,
586-
searchTerm: '',
587-
localeCompare,
588-
});
589-
590-
const {currentType, typeFiltersKeys} = useAdvancedSearchFilters();
582+
const {currentType, typeFiltersKeys, workspaces} = useAdvancedSearchFilters();
591583

592584
const queryString = useMemo(() => {
593585
const currentQueryJSON = getCurrentSearchQueryJSON();
@@ -641,7 +633,7 @@ function AdvancedSearchFilters() {
641633
) {
642634
filterTitle = baseFilterConfig[key].getTitle(searchAdvancedFilters[key] ?? [], personalDetails, formatPhoneNumber);
643635
} else if (key === CONST.SEARCH.SYNTAX_FILTER_KEYS.IN) {
644-
filterTitle = baseFilterConfig[key].getTitle(searchAdvancedFilters, translate, reports, currentUserAccountID);
636+
filterTitle = baseFilterConfig[key].getTitle(searchAdvancedFilters, translate, reports, reportAttributes?.reports ?? {});
645637
} else if (key === CONST.SEARCH.SYNTAX_FILTER_KEYS.POLICY_ID) {
646638
const workspacesData = workspaces.flatMap((value) => value.data);
647639
filterTitle = baseFilterConfig[key].getTitle(searchAdvancedFilters, workspacesData);

src/pages/Search/SearchPage.tsx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ import {getTransactionsAndReportsFromSearch} from '@libs/MergeTransactionUtils';
6767
import Navigation from '@libs/Navigation/Navigation';
6868
import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types';
6969
import type {SearchFullscreenNavigatorParamList} from '@libs/Navigation/types';
70-
import {getActiveAdminWorkspaces, hasDynamicExternalWorkflow, hasOnlyPersonalPolicies as hasOnlyPersonalPoliciesUtil, isPaidGroupPolicy} from '@libs/PolicyUtils';
70+
import {hasDynamicExternalWorkflow, hasOnlyPersonalPolicies as hasOnlyPersonalPoliciesUtil, isPaidGroupPolicy} from '@libs/PolicyUtils';
7171
import {isMergeActionForSelectedTransactions} from '@libs/ReportSecondaryActionUtils';
7272
import {
7373
generateReportID,
@@ -165,7 +165,6 @@ function SearchPage({route}: SearchPageProps) {
165165
const queryJSON = useMemo(() => buildSearchQueryJSON(route.params.q, route.params.rawQuery), [route.params.q, route.params.rawQuery]);
166166
const isExpenseReportType = queryJSON?.type === CONST.SEARCH.DATA_TYPES.EXPENSE_REPORT;
167167
const {saveScrollOffset} = useContext(ScrollOffsetContext);
168-
const activeAdminPolicies = getActiveAdminWorkspaces(policies, currentUserPersonalDetails?.accountID.toString()).sort((a, b) => localeCompare(a.name || '', b.name || ''));
169168
const expensifyIcons = useMemoizedLazyExpensifyIcons([
170169
'Export',
171170
'Table',
@@ -232,7 +231,6 @@ function SearchPage({route}: SearchPageProps) {
232231
const {bulkPayButtonOptions, latestBankItems} = useBulkPayOptions({
233232
selectedPolicyID: selectedPolicyIDs.at(0),
234233
selectedReportID: selectedTransactionReportIDs.at(0) ?? selectedReportIDs.at(0),
235-
activeAdminPolicies,
236234
isCurrencySupportedWallet: isCurrencySupportedBulkWallet,
237235
currency: selectedBulkCurrency,
238236
formattedAmount: totalFormattedAmount,

0 commit comments

Comments
 (0)