Skip to content

Commit

Permalink
Merge pull request #40338 from callstack-internal/perf/assign-task-fi…
Browse files Browse the repository at this point in the history
…ltering

perf: Implement filtering in task assignee list
  • Loading branch information
roryabraham authored Jul 25, 2024
2 parents b1db3ec + bc68952 commit 14be949
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 9 deletions.
10 changes: 9 additions & 1 deletion src/libs/OptionsListUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2559,11 +2559,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: null,
currentUserOption,
categoryOptions: [],
tagOptions: [],
taxRatesOptions: [],
Expand Down
35 changes: 27 additions & 8 deletions src/pages/tasks/TaskAssigneeSelectorModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,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,
Expand All @@ -68,13 +68,12 @@ function useOptions() {
{},
[],
true,
false,
false,
0,
);

const headerMessage = OptionsListUtils.getHeaderMessage(
(recentReports?.length || 0) + (personalDetails?.length || 0) !== 0 || !!currentUserOption,
!!userToInvite,
debouncedSearchValue,
);
const headerMessage = OptionsListUtils.getHeaderMessage((recentReports?.length || 0) + (personalDetails?.length || 0) !== 0 || !!currentUserOption, !!userToInvite, '');

if (isLoading) {
setIsLoading(false);
Expand All @@ -86,8 +85,28 @@ function useOptions() {
personalDetails,
currentUserOption,
headerMessage,
categoryOptions: [],
tagOptions: [],
taxRatesOptions: [],
};
}, [optionsList.reports, optionsList.personalDetails, betas, isLoading]);

const options = useMemo(() => {
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,
debouncedSearchValue,
);

return {
...filteredOptions,
headerMessage,
};
}, [optionsList.reports, optionsList.personalDetails, betas, debouncedSearchValue, isLoading]);
}, [debouncedSearchValue, defaultOptions]);

return {...options, searchValue, debouncedSearchValue, setSearchValue, areOptionsInitialized};
}
Expand Down

0 comments on commit 14be949

Please sign in to comment.