From 2472babfc99127d279ee9ba0aa43552ed048839a Mon Sep 17 00:00:00 2001 From: Kimi Kuru Date: Tue, 18 Jun 2024 16:58:12 +0300 Subject: [PATCH] Fix bugs in issue search --- web/src/jira/components/JiraIssueComboBox.tsx | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/web/src/jira/components/JiraIssueComboBox.tsx b/web/src/jira/components/JiraIssueComboBox.tsx index 46b31ef6..f39a0013 100644 --- a/web/src/jira/components/JiraIssueComboBox.tsx +++ b/web/src/jira/components/JiraIssueComboBox.tsx @@ -23,7 +23,7 @@ const JiraIssueComboBox = ({ const { data, loading } = useQuery(FindDimensionOptionsDocument); const options = data?.findDimensionOptions[name] || []; - const [issueFilter, setIssueFilter] = useDebounceValue("", 300); + const [issueFilter, setIssueFilter] = useDebounceValue("", 500); const { data: dataPages, error, @@ -51,12 +51,7 @@ const JiraIssueComboBox = ({ ...(searchedIssueData ? [searchedIssueData] : []), ]; const keyToSummary = issueKeyToSummary(queriedKeys); - const queriedOptions = [ - ...new Set([ - ...options.slice(0, (dataPages?.pages.length || 1) * jiraQueryMaxResults), - ...Object.keys(keyToSummary), - ]), - ]; + const getOptionText = (option: string) => keyToSummary[option] ? `${option}: ${keyToSummary[option]}` : option; @@ -65,13 +60,16 @@ const JiraIssueComboBox = ({ {...params} name={name} autoCompleteProps={{ - loading: pagesLoading || searchLoading, - options: queriedOptions, + options: options, renderOption: (props, option, state) => { const shouldLoadMore = (state.index + 1) % jiraQueryMaxResults === 0 && state.index > 0; + if (state.index + 1 > (dataPages?.pageParams.length || 1) * jiraQueryMaxResults) + return null; return ( {getOptionText(option as string)} + + {!keyToSummary[option] && searchLoading && " ..."} ); }, @@ -82,12 +80,16 @@ const JiraIssueComboBox = ({ .trim() .includes(state.inputValue.toLowerCase().trim()), ); - if (filtered.length === 0) setIssueFilter(state.inputValue.toLowerCase().trim()); return filtered; }, ListboxProps: { ref: rootRef, }, + onInputChange: (_, value, reason) => { + if (reason === "input") { + setIssueFilter(value); + } + }, }} /> );