From f3b6ae7576cba8febee8f04e3bedd7f7c763bf40 Mon Sep 17 00:00:00 2001 From: Tomasz Misiukiewicz Date: Wed, 17 Apr 2024 09:48:52 +0200 Subject: [PATCH 1/3] implement filtering in task assignee modal --- src/libs/OptionsListUtils.ts | 2 +- src/pages/tasks/TaskAssigneeSelectorModal.tsx | 32 ++++++++++++++----- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/libs/OptionsListUtils.ts b/src/libs/OptionsListUtils.ts index c0260fc62026..f42efc64ac3c 100644 --- a/src/libs/OptionsListUtils.ts +++ b/src/libs/OptionsListUtils.ts @@ -2313,7 +2313,7 @@ function filterOptions(options: Options, searchInputValue: string, config?: Filt recentReports: recentReports ?? [], personalDetails: personalDetails ?? [], userToInvite: null, - currentUserOption: null, + currentUserOption: options.currentUserOption, categoryOptions: [], tagOptions: [], taxRatesOptions: [], diff --git a/src/pages/tasks/TaskAssigneeSelectorModal.tsx b/src/pages/tasks/TaskAssigneeSelectorModal.tsx index 4ebabbce350e..9518cf16c3ee 100644 --- a/src/pages/tasks/TaskAssigneeSelectorModal.tsx +++ b/src/pages/tasks/TaskAssigneeSelectorModal.tsx @@ -48,12 +48,12 @@ function useOptions() { const [searchValue, debouncedSearchValue, setSearchValue] = useDebouncedState(''); const {options: optionsList, areOptionsInitialized} = useOptionsList(); - const options = useMemo(() => { + const defaultOptions = useMemo(() => { const {recentReports, personalDetails, userToInvite, currentUserOption} = OptionsListUtils.getFilteredOptions( optionsList.reports, optionsList.personalDetails, betas, - debouncedSearchValue.trim(), + '', [], CONST.EXPENSIFY_EMAILS, false, @@ -67,11 +67,7 @@ function useOptions() { true, ); - const headerMessage = OptionsListUtils.getHeaderMessage( - (recentReports?.length || 0) + (personalDetails?.length || 0) !== 0 || Boolean(currentUserOption), - Boolean(userToInvite), - debouncedSearchValue, - ); + const headerMessage = OptionsListUtils.getHeaderMessage((recentReports?.length || 0) + (personalDetails?.length || 0) !== 0 || Boolean(currentUserOption), Boolean(userToInvite), ''); if (isLoading) { setIsLoading(false); @@ -83,8 +79,28 @@ function useOptions() { personalDetails, currentUserOption, headerMessage, + categoryOptions: [], + tagOptions: [], + taxRatesOptions: [], + }; + }, [optionsList.reports, optionsList.personalDetails, betas, isLoading]); + + const options = useMemo(() => { + if (debouncedSearchValue.trim() === '') { + return defaultOptions; + } + const filteredOptions = OptionsListUtils.filterOptions(defaultOptions, debouncedSearchValue.trim(), {excludeLogins: CONST.EXPENSIFY_EMAILS}); + const headerMessage = OptionsListUtils.getHeaderMessage( + (filteredOptions.recentReports?.length || 0) + (filteredOptions.personalDetails?.length || 0) !== 0 || Boolean(filteredOptions.currentUserOption), + Boolean(filteredOptions.userToInvite), + debouncedSearchValue, + ); + + return { + ...filteredOptions, + headerMessage, }; - }, [optionsList.reports, optionsList.personalDetails, betas, debouncedSearchValue, isLoading]); + }, [debouncedSearchValue, defaultOptions]); return {...options, searchValue, debouncedSearchValue, setSearchValue, areOptionsInitialized}; } From bc86868de8c0a3f8c2c05b3ec5fcb27a78700c0b Mon Sep 17 00:00:00 2001 From: Tomasz Misiukiewicz Date: Wed, 26 Jun 2024 10:32:36 +0200 Subject: [PATCH 2/3] update recents to display correctly --- src/pages/tasks/TaskAssigneeSelectorModal.tsx | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/pages/tasks/TaskAssigneeSelectorModal.tsx b/src/pages/tasks/TaskAssigneeSelectorModal.tsx index 559784c225c0..11e430780c53 100644 --- a/src/pages/tasks/TaskAssigneeSelectorModal.tsx +++ b/src/pages/tasks/TaskAssigneeSelectorModal.tsx @@ -68,6 +68,9 @@ function useOptions() { {}, [], true, + false, + false, + 0, ); const headerMessage = OptionsListUtils.getHeaderMessage((recentReports?.length || 0) + (personalDetails?.length || 0) !== 0 || !!currentUserOption, !!userToInvite, ''); @@ -89,10 +92,10 @@ function useOptions() { }, [optionsList.reports, optionsList.personalDetails, betas, isLoading]); const options = useMemo(() => { - if (debouncedSearchValue.trim() === '') { - return defaultOptions; - } - const filteredOptions = OptionsListUtils.filterOptions(defaultOptions, debouncedSearchValue.trim(), {excludeLogins: CONST.EXPENSIFY_EMAILS}); + const filteredOptions = OptionsListUtils.filterOptions(defaultOptions, debouncedSearchValue.trim(), { + excludeLogins: CONST.EXPENSIFY_EMAILS, + maxRecentReportsToShow: CONST.IOU.MAX_RECENT_REPORTS_TO_SHOW, + }); const headerMessage = OptionsListUtils.getHeaderMessage( (filteredOptions.recentReports?.length || 0) + (filteredOptions.personalDetails?.length || 0) !== 0 || !!filteredOptions.currentUserOption, !!filteredOptions.userToInvite, From 3971c453ad9aa4f7876857af4648daf0fa50fbdf Mon Sep 17 00:00:00 2001 From: Tomasz Misiukiewicz Date: Wed, 26 Jun 2024 11:45:40 +0200 Subject: [PATCH 3/3] filter current user option --- src/libs/OptionsListUtils.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/libs/OptionsListUtils.ts b/src/libs/OptionsListUtils.ts index dfc96b06712c..2a5f8921d5af 100644 --- a/src/libs/OptionsListUtils.ts +++ b/src/libs/OptionsListUtils.ts @@ -2497,11 +2497,19 @@ function filterOptions(options: Options, searchInputValue: string, config?: Filt uniqFast([item.participantsList?.[0]?.displayName ?? '', item.login ?? '', item.login?.replace(emailRegex, '') ?? '']), ); + const currentUserOptionSearchText = uniqFast([ + items.currentUserOption?.text ?? '', + items.currentUserOption?.login ?? '', + items.currentUserOption?.login?.replace(emailRegex, '') ?? '', + ]).join(' '); + + const currentUserOption = isSearchStringMatch(term, currentUserOptionSearchText) ? items.currentUserOption : null; + return { recentReports: recentReports ?? [], personalDetails: personalDetails ?? [], userToInvite: null, - currentUserOption: options.currentUserOption, + currentUserOption, categoryOptions: [], tagOptions: [], taxRatesOptions: [],