From 39afd7ba62b13323fe4f091f7ed309cb8428c82a Mon Sep 17 00:00:00 2001 From: Jack Nam Date: Thu, 19 Oct 2023 14:36:31 -0700 Subject: [PATCH] Clean up the utility method --- src/libs/OptionsListUtils.js | 61 +++++++++---------- src/pages/NewChatPage.js | 6 +- .../MoneyRequestParticipantsSelector.js | 6 +- 3 files changed, 35 insertions(+), 38 deletions(-) diff --git a/src/libs/OptionsListUtils.js b/src/libs/OptionsListUtils.js index 2a7e03293cc8..00e00e3b4a17 100644 --- a/src/libs/OptionsListUtils.js +++ b/src/libs/OptionsListUtils.js @@ -1600,33 +1600,35 @@ function formatSectionsFromSearchTerm(searchTerm, selectedOptions, filteredRecen // We show the selected participants at the top of the list when there is no search term // However, if there is a search term we remove the selected participants from the top of the list unless they are part of the search results // This clears up space on mobile views, where if you create a group with 4+ people you can't see the selected participants and the search results at the same time - let newIndexOffset = indexOffset; - const sections = []; if (searchTerm === '') { - sections.push({ - title: undefined, - data: shouldGetOptionDetails - ? _.map(selectedOptions, (participant) => { - const isPolicyExpenseChat = lodashGet(participant, 'isPolicyExpenseChat', false); - return isPolicyExpenseChat ? getPolicyExpenseReportOption(participant) : getParticipantsOption(participant, personalDetails); - }) - : selectedOptions, - shouldShow: !_.isEmpty(selectedOptions), - indexOffset, - }); - newIndexOffset += selectedOptions.length; - } else { - // If you select a new user you don't have a contact for, they won't get returned as part of a recent report or personal details - // This will add them to the list of options, deduping them if they already exist in the other lists - const selectedParticipantsWithoutDetails = _.filter(selectedOptions, (participant) => { - const accountID = lodashGet(participant, 'accountID', null); - const isPartOfSearchTerm = participant.searchText.toLowerCase().includes(searchTerm.trim().toLowerCase()); - const isReportInRecentReports = _.some(filteredRecentReports, (report) => report.accountID === accountID); - const isReportInPersonalDetails = _.some(filteredPersonalDetails, (personalDetail) => personalDetail.accountID === accountID); - return isPartOfSearchTerm && !isReportInRecentReports && !isReportInPersonalDetails; - }); + return { + section: { + title: undefined, + data: shouldGetOptionDetails + ? _.map(selectedOptions, (participant) => { + const isPolicyExpenseChat = lodashGet(participant, 'isPolicyExpenseChat', false); + return isPolicyExpenseChat ? getPolicyExpenseReportOption(participant) : getParticipantsOption(participant, personalDetails); + }) + : selectedOptions, + shouldShow: !_.isEmpty(selectedOptions), + indexOffset, + }, + newIndexOffset: indexOffset + selectedOptions.length, + }; + } - sections.push({ + // If you select a new user you don't have a contact for, they won't get returned as part of a recent report or personal details + // This will add them to the list of options, deduping them if they already exist in the other lists + const selectedParticipantsWithoutDetails = _.filter(selectedOptions, (participant) => { + const accountID = lodashGet(participant, 'accountID', null); + const isPartOfSearchTerm = participant.searchText.toLowerCase().includes(searchTerm.trim().toLowerCase()); + const isReportInRecentReports = _.some(filteredRecentReports, (report) => report.accountID === accountID); + const isReportInPersonalDetails = _.some(filteredPersonalDetails, (personalDetail) => personalDetail.accountID === accountID); + return isPartOfSearchTerm && !isReportInRecentReports && !isReportInPersonalDetails; + }); + + return { + section: { title: undefined, data: shouldGetOptionDetails ? _.map(selectedParticipantsWithoutDetails, (participant) => { @@ -1636,13 +1638,8 @@ function formatSectionsFromSearchTerm(searchTerm, selectedOptions, filteredRecen : selectedParticipantsWithoutDetails, shouldShow: !_.isEmpty(selectedParticipantsWithoutDetails), indexOffset, - }); - newIndexOffset += selectedParticipantsWithoutDetails.length; - } - - return { - sectionList: sections, - newIndexOffset, + }, + newIndexOffset: indexOffset + selectedParticipantsWithoutDetails.length, }; } diff --git a/src/pages/NewChatPage.js b/src/pages/NewChatPage.js index fdff49558fc5..9ee5f838aafd 100755 --- a/src/pages/NewChatPage.js +++ b/src/pages/NewChatPage.js @@ -68,12 +68,12 @@ function NewChatPage({betas, isGroupChat, personalDetails, reports, translate, i const isOptionsDataReady = ReportUtils.isReportDataReady() && OptionsListUtils.isPersonalDetailsReady(personalDetails); const sections = useMemo(() => { - let sectionsList = []; + const sectionsList = []; let indexOffset = 0; const formatResults = OptionsListUtils.formatSectionsFromSearchTerm(searchTerm, selectedOptions, filteredRecentReports, filteredPersonalDetails, {}, false, indexOffset); - sectionsList = sectionsList.concat(formatResults.sectionList); - indexOffset = formatResults.indexOffset; + sectionsList.push(formatResults.section); + indexOffset = formatResults.newIndexOffset; if (maxParticipantsReached) { return sectionsList; diff --git a/src/pages/iou/steps/MoneyRequstParticipantsPage/MoneyRequestParticipantsSelector.js b/src/pages/iou/steps/MoneyRequstParticipantsPage/MoneyRequestParticipantsSelector.js index 353911abf1b1..9f1e5a416995 100755 --- a/src/pages/iou/steps/MoneyRequstParticipantsPage/MoneyRequestParticipantsSelector.js +++ b/src/pages/iou/steps/MoneyRequstParticipantsPage/MoneyRequestParticipantsSelector.js @@ -101,7 +101,7 @@ function MoneyRequestParticipantsSelector({ * @returns {Array} */ const sections = useMemo(() => { - let newSections = []; + const newSections = []; let indexOffset = 0; const formatResults = OptionsListUtils.formatSectionsFromSearchTerm( @@ -113,8 +113,8 @@ function MoneyRequestParticipantsSelector({ true, indexOffset, ); - indexOffset = formatResults.indexOffset; - newSections = newSections.concat(formatResults.sectionList); + newSections.push(formatResults.section); + indexOffset = formatResults.newIndexOffset; if (maxParticipantsReached) { return newSections;