Skip to content

Commit 2f3f413

Browse files
authored
Merge pull request Expensify#66255 from s77rt/createTypeMenuSections-performance
Performance: Create type menu sections
2 parents 71b382a + ddc35ee commit 2f3f413

3 files changed

Lines changed: 197 additions & 145 deletions

File tree

src/hooks/useSearchTypeMenuSections.ts

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,38 @@
11
import {useMemo} from 'react';
2+
import type {OnyxEntry} from 'react-native-onyx';
23
import {createTypeMenuSections} from '@libs/SearchUIUtils';
34
import ONYXKEYS from '@src/ONYXKEYS';
5+
import type {Policy} from '@src/types/onyx';
6+
import mapOnyxCollectionItems from '@src/utils/mapOnyxCollectionItems';
47
import useCardFeedsForDisplay from './useCardFeedsForDisplay';
58
import useOnyx from './useOnyx';
69

10+
const policySelector = (policy: OnyxEntry<Policy>): OnyxEntry<Policy> =>
11+
policy && {
12+
id: policy.id,
13+
name: policy.name,
14+
type: policy.type,
15+
role: policy.role,
16+
owner: policy.owner,
17+
outputCurrency: policy.outputCurrency,
18+
isPolicyExpenseChatEnabled: policy.isPolicyExpenseChatEnabled,
19+
reimburser: policy.reimburser,
20+
exporter: policy.exporter,
21+
approver: policy.approver,
22+
approvalMode: policy.approvalMode,
23+
employeeList: policy.employeeList,
24+
reimbursementChoice: policy.reimbursementChoice,
25+
areCompanyCardsEnabled: policy.areCompanyCardsEnabled,
26+
};
27+
728
/**
829
* Get a list of all search groupings, along with their search items. Also returns the
930
* currently focused search, based on the hash
1031
*/
1132
const useSearchTypeMenuSections = () => {
1233
const {defaultCardFeed, cardFeedsByPolicy} = useCardFeedsForDisplay();
1334

14-
const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {canBeMissing: true});
35+
const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY, {selector: (policies) => mapOnyxCollectionItems(policies, policySelector), canBeMissing: true});
1536
const [currentUserLoginAndAccountID] = useOnyx(ONYXKEYS.SESSION, {selector: (session) => ({email: session?.email, accountID: session?.accountID}), canBeMissing: false});
1637

1738
const typeMenuSections = useMemo(

src/libs/PolicyUtils.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,25 @@ function isPolicyMember(currentUserLogin: string | undefined, policyID: string |
285285
return !!currentUserLogin && !!policyID && !!allPolicies?.[`${ONYXKEYS.COLLECTION.POLICY}${policyID}`]?.employeeList?.[currentUserLogin];
286286
}
287287

288+
function isPolicyPayer(policy: OnyxEntry<Policy>, currentUserLogin: string | undefined): boolean {
289+
if (!policy) {
290+
return false;
291+
}
292+
293+
const isAdmin = policy.role === CONST.POLICY.ROLE.ADMIN;
294+
const isReimburser = policy.reimburser === currentUserLogin;
295+
296+
if (policy.reimbursementChoice === CONST.POLICY.REIMBURSEMENT_CHOICES.REIMBURSEMENT_YES) {
297+
return policy.reimburser ? isReimburser : isAdmin;
298+
}
299+
300+
if (policy.reimbursementChoice === CONST.POLICY.REIMBURSEMENT_CHOICES.REIMBURSEMENT_MANUAL) {
301+
return isAdmin;
302+
}
303+
304+
return false;
305+
}
306+
288307
function isExpensifyTeam(email: string | undefined): boolean {
289308
const emailDomain = Str.extractEmailDomain(email ?? '');
290309
return emailDomain === CONST.EXPENSIFY_PARTNER_NAME || emailDomain === CONST.EMAIL.GUIDES_DOMAIN;
@@ -1515,6 +1534,7 @@ export {
15151534
isPolicyFeatureEnabled,
15161535
isPolicyOwner,
15171536
isPolicyMember,
1537+
isPolicyPayer,
15181538
arePaymentsEnabled,
15191539
isSubmitAndClose,
15201540
isTaxTrackingEnabled,

0 commit comments

Comments
 (0)