Skip to content

Commit 3157d7d

Browse files
committed
fix: selector
1 parent d410151 commit 3157d7d

4 files changed

Lines changed: 27 additions & 49 deletions

File tree

src/components/ReportActionItem/MoneyRequestReceiptView.tsx

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {hasSeenTourSelector} from '@selectors/Onboarding';
2+
import {conciergePersonalDetailSelector, personalDetailByAccountIDSelector} from '@selectors/PersonalDetails';
23
import mapValues from 'lodash/mapValues';
3-
import React, {useCallback, useEffect, useMemo, useRef, useState} from 'react';
4+
import React, {useEffect, useMemo, useRef, useState} from 'react';
45
import {View} from 'react-native';
56
import type {StyleProp, ViewStyle} from 'react-native';
67
import type {OnyxEntry} from 'react-native-onyx';
@@ -70,7 +71,6 @@ import CONST from '@src/CONST';
7071
import ONYXKEYS from '@src/ONYXKEYS';
7172
import ROUTES from '@src/ROUTES';
7273
import type * as OnyxTypes from '@src/types/onyx';
73-
import type PersonalDetails from '@src/types/onyx/PersonalDetails';
7474
import type {TransactionPendingFieldsKey} from '@src/types/onyx/Transaction';
7575
import type {FileObject} from '@src/types/utils/Attachment';
7676
import {isEmptyObject} from '@src/types/utils/EmptyObject';
@@ -112,13 +112,6 @@ const receiptImageViolationNames = new Set<OnyxTypes.ViolationName>([
112112

113113
const receiptFieldViolationNames = new Set<OnyxTypes.ViolationName>([CONST.VIOLATIONS.MODIFIED_AMOUNT, CONST.VIOLATIONS.MODIFIED_DATE]);
114114

115-
const findConciergePersonalDetail = (list: OnyxEntry<OnyxTypes.PersonalDetailsList>): OnyxEntry<PersonalDetails> => {
116-
if (!list) {
117-
return undefined;
118-
}
119-
return Object.values(list).find((detail): detail is PersonalDetails => detail?.login === CONST.EMAIL.CONCIERGE);
120-
};
121-
122115
function MoneyRequestReceiptView({
123116
report,
124117
readonly = false,
@@ -141,16 +134,10 @@ function MoneyRequestReceiptView({
141134
const [introSelected] = useOnyx(ONYXKEYS.NVP_INTRO_SELECTED);
142135
const [isSelfTourViewed] = useOnyx(ONYXKEYS.NVP_ONBOARDING, {selector: hasSeenTourSelector});
143136
const [betas] = useOnyx(ONYXKEYS.BETAS);
144-
const [conciergePersonalDetail] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, {selector: findConciergePersonalDetail});
145-
const reportOwnerSelector = useCallback(
146-
(list: OnyxEntry<OnyxTypes.PersonalDetailsList>): OnyxEntry<PersonalDetails> => (report?.ownerAccountID ? (list?.[report.ownerAccountID] ?? undefined) : undefined),
147-
[report?.ownerAccountID],
148-
);
137+
const [conciergePersonalDetail] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, {selector: conciergePersonalDetailSelector});
138+
const reportOwnerSelector = useMemo(() => personalDetailByAccountIDSelector(report?.ownerAccountID), [report?.ownerAccountID]);
149139
const [reportOwnerPersonalDetail] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, {selector: reportOwnerSelector}, [reportOwnerSelector]);
150-
const chatReportOwnerSelector = useCallback(
151-
(list: OnyxEntry<OnyxTypes.PersonalDetailsList>): OnyxEntry<PersonalDetails> => (chatReport?.ownerAccountID ? (list?.[chatReport.ownerAccountID] ?? undefined) : undefined),
152-
[chatReport?.ownerAccountID],
153-
);
140+
const chatReportOwnerSelector = useMemo(() => personalDetailByAccountIDSelector(chatReport?.ownerAccountID), [chatReport?.ownerAccountID]);
154141
const [chatReportOwnerPersonalDetail] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, {selector: chatReportOwnerSelector}, [chatReportOwnerSelector]);
155142
const delegateAccountID = useDelegateAccountID();
156143

src/pages/Debug/Report/DebugReportPage.tsx

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import {hasSeenTourSelector} from '@selectors/Onboarding';
2+
import {conciergePersonalDetailSelector, personalDetailByAccountIDSelector} from '@selectors/PersonalDetails';
23
import React, {useCallback, useMemo} from 'react';
34
import {View} from 'react-native';
45
import type {OnyxEntry} from 'react-native-onyx';
@@ -32,17 +33,9 @@ import CONST from '@src/CONST';
3233
import ONYXKEYS from '@src/ONYXKEYS';
3334
import ROUTES from '@src/ROUTES';
3435
import type SCREENS from '@src/SCREENS';
35-
import type {PersonalDetailsList, ReportAttributesDerivedValue} from '@src/types/onyx';
36-
import type PersonalDetails from '@src/types/onyx/PersonalDetails';
36+
import type {ReportAttributesDerivedValue} from '@src/types/onyx';
3737
import DebugReportActions from './DebugReportActions';
3838

39-
const findConciergePersonalDetail = (list: OnyxEntry<PersonalDetailsList>): OnyxEntry<PersonalDetails> => {
40-
if (!list) {
41-
return undefined;
42-
}
43-
return Object.values(list).find((detail): detail is PersonalDetails => detail?.login === CONST.EMAIL.CONCIERGE);
44-
};
45-
4639
type DebugReportPageProps = PlatformStackScreenProps<DebugParamList, typeof SCREENS.DEBUG.REPORT>;
4740

4841
type Metadata = {
@@ -86,11 +79,8 @@ function DebugReportPage({
8679
const [isSelfTourViewed] = useOnyx(ONYXKEYS.NVP_ONBOARDING, {selector: hasSeenTourSelector});
8780
const currentUserPersonalDetail = useCurrentUserPersonalDetails();
8881
const {accountID: currentUserAccountID, login: currentUserLogin} = currentUserPersonalDetail;
89-
const [conciergePersonalDetail] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, {selector: findConciergePersonalDetail});
90-
const reportOwnerSelector = useCallback(
91-
(list: OnyxEntry<PersonalDetailsList>): OnyxEntry<PersonalDetails> => (report?.ownerAccountID ? (list?.[report.ownerAccountID] ?? undefined) : undefined),
92-
[report?.ownerAccountID],
93-
);
82+
const [conciergePersonalDetail] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, {selector: conciergePersonalDetailSelector});
83+
const reportOwnerSelector = useMemo(() => personalDetailByAccountIDSelector(report?.ownerAccountID), [report?.ownerAccountID]);
9484
const [reportOwnerPersonalDetail] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, {selector: reportOwnerSelector}, [reportOwnerSelector]);
9585
const transactionID = DebugUtils.getTransactionID(report, reportActions);
9686
const isReportArchived = useReportIsArchived(reportID);

src/pages/inbox/report/ReportActionItemCreated.tsx

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {hasSeenTourSelector} from '@selectors/Onboarding';
2-
import React, {memo, useCallback} from 'react';
2+
import {conciergePersonalDetailSelector, personalDetailByAccountIDSelector} from '@selectors/PersonalDetails';
3+
import React, {memo, useMemo} from 'react';
34
import {View} from 'react-native';
4-
import type {OnyxEntry} from 'react-native-onyx';
55
import OfflineWithFeedback from '@components/OfflineWithFeedback';
66
import PressableWithoutFeedback from '@components/Pressable/PressableWithoutFeedback';
77
import ReportActionAvatars from '@components/ReportActionAvatars';
@@ -16,17 +16,8 @@ import {isChatReport, isCurrentUserInvoiceReceiver, isInvoiceRoom, navigateToDet
1616
import {clearCreateChatError} from '@userActions/Report';
1717
import CONST from '@src/CONST';
1818
import ONYXKEYS from '@src/ONYXKEYS';
19-
import type {PersonalDetailsList} from '@src/types/onyx';
20-
import type PersonalDetails from '@src/types/onyx/PersonalDetails';
2119
import AnimatedEmptyStateBackground from './AnimatedEmptyStateBackground';
2220

23-
const findConciergePersonalDetail = (list: OnyxEntry<PersonalDetailsList>): OnyxEntry<PersonalDetails> => {
24-
if (!list) {
25-
return undefined;
26-
}
27-
return Object.values(list).find((detail): detail is PersonalDetails => detail?.login === CONST.EMAIL.CONCIERGE);
28-
};
29-
3021
type ReportActionItemCreatedProps = {
3122
/** The id of the report */
3223
reportID: string | undefined;
@@ -48,11 +39,8 @@ function ReportActionItemCreated({reportID, policyID}: ReportActionItemCreatedPr
4839
const [isSelfTourViewed] = useOnyx(ONYXKEYS.NVP_ONBOARDING, {selector: hasSeenTourSelector});
4940
const currentUserPersonalDetail = useCurrentUserPersonalDetails();
5041
const {accountID: currentUserAccountID} = currentUserPersonalDetail;
51-
const [conciergePersonalDetail] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, {selector: findConciergePersonalDetail});
52-
const reportOwnerSelector = useCallback(
53-
(list: OnyxEntry<PersonalDetailsList>): OnyxEntry<PersonalDetails> => (report?.ownerAccountID ? (list?.[report.ownerAccountID] ?? undefined) : undefined),
54-
[report?.ownerAccountID],
55-
);
42+
const [conciergePersonalDetail] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, {selector: conciergePersonalDetailSelector});
43+
const reportOwnerSelector = useMemo(() => personalDetailByAccountIDSelector(report?.ownerAccountID), [report?.ownerAccountID]);
5644
const [reportOwnerPersonalDetail] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST, {selector: reportOwnerSelector}, [reportOwnerSelector]);
5745

5846
if (!isChatReport(report)) {

src/selectors/PersonalDetails.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,24 @@
11
import type {OnyxEntry} from 'react-native-onyx';
22
import CONST from '@src/CONST';
33
import type {PersonalDetailsList, Report} from '@src/types/onyx';
4+
import type PersonalDetails from '@src/types/onyx/PersonalDetails';
45

56
const personalDetailsSelector = (accountID: number) => (personalDetailsList: OnyxEntry<PersonalDetailsList>) => personalDetailsList?.[accountID];
67

78
const personalDetailsLoginSelector = (accountID: number) => (personalDetailsList: OnyxEntry<PersonalDetailsList>) => personalDetailsList?.[accountID]?.login;
89

10+
const personalDetailByAccountIDSelector =
11+
(accountID: number | undefined) =>
12+
(personalDetailsList: OnyxEntry<PersonalDetailsList>): OnyxEntry<PersonalDetails> =>
13+
accountID ? (personalDetailsList?.[accountID] ?? undefined) : undefined;
14+
15+
const conciergePersonalDetailSelector = (personalDetailsList: OnyxEntry<PersonalDetailsList>): OnyxEntry<PersonalDetails> => {
16+
if (!personalDetailsList) {
17+
return undefined;
18+
}
19+
return Object.values(personalDetailsList).find((detail): detail is PersonalDetails => detail?.login === CONST.EMAIL.CONCIERGE);
20+
};
21+
922
const accountIDToLoginSelector = (reportsToArchive: Report[]) => (personalDetailsList: OnyxEntry<PersonalDetailsList>) => {
1023
const map: Record<number, string> = {};
1124
for (const report of reportsToArchive) {
@@ -17,4 +30,4 @@ const accountIDToLoginSelector = (reportsToArchive: Report[]) => (personalDetail
1730
return map;
1831
};
1932

20-
export {personalDetailsSelector, personalDetailsLoginSelector, accountIDToLoginSelector};
33+
export {personalDetailsSelector, personalDetailsLoginSelector, personalDetailByAccountIDSelector, conciergePersonalDetailSelector, accountIDToLoginSelector};

0 commit comments

Comments
 (0)