Skip to content

Commit 7552a50

Browse files
authored
Merge pull request Expensify#84704 from dukenv0307/fix/66415-part-2
refactor createOption to use policy from useOnyx
2 parents 0c95aa6 + eda35d8 commit 7552a50

17 files changed

Lines changed: 304 additions & 75 deletions

src/components/OptionListContextProvider.tsx

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ function OptionsListContextProvider({children}: OptionsListProviderProps) {
6262
const [reports, {sourceValue: changedReports}] = useOnyx(ONYXKEYS.COLLECTION.REPORT);
6363
const prevReports = usePrevious(reports);
6464
const [, {sourceValue: changedReportActions}] = useOnyx(ONYXKEYS.COLLECTION.REPORT_ACTIONS);
65+
const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY);
6566
const personalDetails = usePersonalDetails();
6667
const prevPersonalDetails = usePrevious(personalDetails);
6768
const privateIsArchivedMap = usePrivateIsArchivedMap();
@@ -70,12 +71,12 @@ function OptionsListContextProvider({children}: OptionsListProviderProps) {
7071
const hasInitialData = useMemo(() => Object.keys(personalDetails ?? {}).length > 0, [personalDetails]);
7172

7273
const loadOptions = useCallback(() => {
73-
const optionLists = createOptionList(personalDetails, currentUserAccountID, privateIsArchivedMap, reports, reportAttributes?.reports);
74+
const optionLists = createOptionList(personalDetails, currentUserAccountID, privateIsArchivedMap, reports, allPolicies, reportAttributes?.reports);
7475
setOptions({
7576
reports: optionLists.reports,
7677
personalDetails: optionLists.personalDetails,
7778
});
78-
}, [personalDetails, currentUserAccountID, privateIsArchivedMap, reports, reportAttributes?.reports]);
79+
}, [personalDetails, currentUserAccountID, privateIsArchivedMap, reports, allPolicies, reportAttributes?.reports]);
7980

8081
/**
8182
* This effect is responsible for generating the options list when their data is not yet initialized
@@ -132,7 +133,8 @@ function OptionsListContextProvider({children}: OptionsListProviderProps) {
132133
const report = changedReportsEntries[reportKey];
133134
const reportID = reportKey.replace(ONYXKEYS.COLLECTION.REPORT, '');
134135
const privateIsArchived = privateIsArchivedMap[`${ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS}${reportID}`];
135-
const {reportOption} = processReport(report, personalDetails, privateIsArchived, currentUserAccountID, reportAttributes?.reports);
136+
const policy = allPolicies?.[`${ONYXKEYS.COLLECTION.POLICY}${report?.policyID}`];
137+
const {reportOption} = processReport(report, personalDetails, privateIsArchived, currentUserAccountID, policy, reportAttributes?.reports);
136138

137139
if (reportOption) {
138140
updatedReportsMap.set(reportID, reportOption);
@@ -146,7 +148,7 @@ function OptionsListContextProvider({children}: OptionsListProviderProps) {
146148
reports: Array.from(updatedReportsMap.values()),
147149
};
148150
});
149-
}, [changedReportsEntries, personalDetails, currentUserAccountID, reports, reportAttributes?.reports, privateIsArchivedMap]);
151+
}, [changedReportsEntries, personalDetails, currentUserAccountID, reports, allPolicies, reportAttributes?.reports, privateIsArchivedMap]);
150152

151153
useEffect(() => {
152154
if (!changedReportActions || !areOptionsInitialized.current) {
@@ -168,7 +170,8 @@ function OptionsListContextProvider({children}: OptionsListProviderProps) {
168170
const reportID = key.replace(ONYXKEYS.COLLECTION.REPORT_ACTIONS, '');
169171
const reportItem = updatedReportsMap.get(reportID)?.item;
170172
const privateIsArchived = privateIsArchivedMap[`${ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS}${reportID}`];
171-
const {reportOption} = processReport(reportItem, personalDetails, privateIsArchived, currentUserAccountID, reportAttributes?.reports);
173+
const policy = allPolicies?.[`${ONYXKEYS.COLLECTION.POLICY}${reportItem?.policyID}`];
174+
const {reportOption} = processReport(reportItem, personalDetails, privateIsArchived, currentUserAccountID, policy, reportAttributes?.reports);
172175

173176
if (reportOption) {
174177
updatedReportsMap.set(reportID, reportOption);
@@ -180,7 +183,7 @@ function OptionsListContextProvider({children}: OptionsListProviderProps) {
180183
reports: Array.from(updatedReportsMap.values()),
181184
};
182185
});
183-
}, [changedReportActions, personalDetails, currentUserAccountID, reports, reportAttributes?.reports, privateIsArchivedMap]);
186+
}, [changedReportActions, personalDetails, currentUserAccountID, reports, allPolicies, reportAttributes?.reports, privateIsArchivedMap]);
184187

185188
/**
186189
* This effect is used to update the options list when personal details change.
@@ -203,6 +206,7 @@ function OptionsListContextProvider({children}: OptionsListProviderProps) {
203206
currentUserAccountID,
204207
privateIsArchivedMap,
205208
reports,
209+
allPolicies,
206210
reportAttributes?.reports,
207211
);
208212
setOptions((prevOptions) => ({
@@ -238,7 +242,8 @@ function OptionsListContextProvider({children}: OptionsListProviderProps) {
238242
}
239243

240244
const privateIsArchived = privateIsArchivedMap[`${ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS}${report.reportID}`];
241-
const newReportOption = createOptionFromReport(report, personalDetails, currentUserAccountID, privateIsArchived, reportAttributes?.reports, {
245+
const policy = allPolicies?.[`${ONYXKEYS.COLLECTION.POLICY}${report.policyID}`];
246+
const newReportOption = createOptionFromReport(report, personalDetails, currentUserAccountID, privateIsArchived, policy, reportAttributes?.reports, {
242247
showPersonalDetails: true,
243248
});
244249
const replaceIndex = options.reports.findIndex((option) => option.reportID === report.reportID);
@@ -250,7 +255,7 @@ function OptionsListContextProvider({children}: OptionsListProviderProps) {
250255
}
251256

252257
// since personal details are not a collection, we need to recreate the whole list from scratch
253-
const newPersonalDetailsOptions = createOptionList(personalDetails, currentUserAccountID, privateIsArchivedMap, reports, reportAttributes?.reports).personalDetails;
258+
const newPersonalDetailsOptions = createOptionList(personalDetails, currentUserAccountID, privateIsArchivedMap, reports, allPolicies, reportAttributes?.reports).personalDetails;
254259

255260
setOptions((prevOptions) => {
256261
const newOptions = {...prevOptions};

src/components/Search/SearchFiltersChatsSelector.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,10 @@ function SearchFiltersChatsSelector({initialReportIDs, onFiltersUpdate, isScreen
7070
const selectedOptions: OptionData[] = selectedReportIDs.map((id) => {
7171
const privateIsArchived = privateIsArchivedMap[`${ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS}${id}`];
7272
const reportData = reports?.[`${ONYXKEYS.COLLECTION.REPORT}${id}`];
73-
const report = getSelectedOptionData(createOptionFromReport({...reportData, reportID: id}, personalDetails, currentUserAccountID, privateIsArchived, reportAttributesDerived));
73+
const reportPolicy = allPolicies?.[`${ONYXKEYS.COLLECTION.POLICY}${reportData?.policyID}`];
74+
const report = getSelectedOptionData(
75+
createOptionFromReport({...reportData, reportID: id}, personalDetails, currentUserAccountID, privateIsArchived, reportPolicy, reportAttributesDerived),
76+
);
7477
const isReportArchived = !!privateIsArchived;
7578
const policy = allPolicies?.[`${ONYXKEYS.COLLECTION.POLICY}${reportData?.policyID}`];
7679
const reportPolicyTags = policyTags?.[`${ONYXKEYS.COLLECTION.POLICY_TAGS}${getNonEmptyStringOnyxID(report?.policyID)}`];
@@ -110,6 +113,7 @@ function SearchFiltersChatsSelector({initialReportIDs, onFiltersUpdate, isScreen
110113
chatOptions.personalDetails,
111114
privateIsArchivedMap,
112115
currentUserAccountID,
116+
allPolicies,
113117
personalDetails,
114118
false,
115119
undefined,

src/components/Search/SearchFiltersParticipantsSelector.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ function SearchFiltersParticipantsSelector({initialAccountIDs, onFiltersUpdate,
6868
const currentUserAccountID = currentUserPersonalDetails.accountID;
6969
const currentUserEmail = currentUserPersonalDetails.email ?? '';
7070
const [recentAttendees] = useOnyx(ONYXKEYS.NVP_RECENT_ATTENDEES);
71+
const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY);
7172

7273
// Transform raw recentAttendees into Option[] format for use with getValidOptions (only for attendee filter)
7374
const recentAttendeeLists = useMemo(
@@ -109,6 +110,7 @@ function SearchFiltersParticipantsSelector({initialAccountIDs, onFiltersUpdate,
109110
chatOptions.personalDetails,
110111
privateIsArchivedMap,
111112
currentUserAccountID,
113+
allPolicies,
112114
personalDetails,
113115
true,
114116
undefined,
@@ -178,6 +180,7 @@ function SearchFiltersParticipantsSelector({initialAccountIDs, onFiltersUpdate,
178180
privateIsArchivedMap,
179181
currentUserAccountID,
180182
personalDetails,
183+
allPolicies,
181184
reportAttributesDerived,
182185
translate,
183186
formatPhoneNumber,

src/components/Search/SearchRouter/SearchRouter.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,8 @@ function SearchRouter({onRouterClose, shouldHideInputCaret, isSearchRouterDispla
112112
}
113113

114114
const privateIsArchived = privateIsArchivedMap[`${ONYXKEYS.COLLECTION.REPORT_NAME_VALUE_PAIRS}${contextualReportID}`];
115-
const option = createOptionFromReport(report, personalDetails, currentUserAccountID, privateIsArchived, undefined, {showPersonalDetails: true});
115+
const reportPolicy = policies?.[`${ONYXKEYS.COLLECTION.POLICY}${report.policyID}`];
116+
const option = createOptionFromReport(report, personalDetails, currentUserAccountID, privateIsArchived, reportPolicy, undefined, {showPersonalDetails: true});
116117
reportForContextualSearch = option;
117118
}
118119

@@ -176,6 +177,7 @@ function SearchRouter({onRouterClose, shouldHideInputCaret, isSearchRouterDispla
176177
personalDetails,
177178
currentUserAccountID,
178179
privateIsArchivedMap,
180+
policies,
179181
],
180182
);
181183

src/hooks/useFilteredOptions.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ function useFilteredOptions(config: UseFilteredOptionsConfig = {}): UseFilteredO
7373

7474
const [allReports] = useOnyx(ONYXKEYS.COLLECTION.REPORT);
7575
const [allPersonalDetails] = useOnyx(ONYXKEYS.PERSONAL_DETAILS_LIST);
76+
const [allPolicies] = useOnyx(ONYXKEYS.COLLECTION.POLICY);
7677
const reportAttributesDerived = useReportAttributes();
7778

7879
const privateIsArchivedMap = usePrivateIsArchivedMap();
@@ -84,14 +85,26 @@ function useFilteredOptions(config: UseFilteredOptionsConfig = {}): UseFilteredO
8485
const options: OptionList | null = useMemo(
8586
() =>
8687
enabled && allReports && allPersonalDetails
87-
? createFilteredOptionList(allPersonalDetails, allReports, currentUserPersonalDetails.accountID, reportAttributesDerived, privateIsArchivedMap, {
88+
? createFilteredOptionList(allPersonalDetails, allReports, currentUserPersonalDetails.accountID, reportAttributesDerived, privateIsArchivedMap, allPolicies, {
8889
maxRecentReports: reportsLimit,
8990
includeP2P,
9091
searchTerm,
9192
betas,
9293
})
9394
: null,
94-
[enabled, allReports, allPersonalDetails, currentUserPersonalDetails.accountID, reportAttributesDerived, privateIsArchivedMap, reportsLimit, includeP2P, searchTerm, betas],
95+
[
96+
enabled,
97+
allReports,
98+
allPersonalDetails,
99+
currentUserPersonalDetails.accountID,
100+
reportAttributesDerived,
101+
privateIsArchivedMap,
102+
allPolicies,
103+
reportsLimit,
104+
includeP2P,
105+
searchTerm,
106+
betas,
107+
],
95108
);
96109

97110
const hasMore = options ? reportsLimit < totalReports : false;

0 commit comments

Comments
 (0)