@@ -5,6 +5,8 @@ import { SearchQuery } from "../components/issues/Search";
55import useDebounce from "./useDebounce" ;
66import useSettings from "./useSettings" ;
77
8+ const MAX_EXTENDED_SEARCH_LIMIT = 75 ;
9+
810const useMyIssues = ( additionalIssuesIds : number [ ] , search : SearchQuery ) => {
911 const { settings } = useSettings ( ) ;
1012
@@ -32,54 +34,58 @@ const useMyIssues = (additionalIssuesIds: number[], search: SearchQuery) => {
3234 let issues = issuesQuery . data ?. pages ?. flat ( ) ?? [ ] ;
3335 issues . push ( ...( additionalIssuesQuery . data ?. pages ?. flat ( ) . filter ( ( issue ) => ! issues . find ( ( iss ) => iss . id === issue . id ) ) ?? [ ] ) ) ;
3436
37+ // filter by project
38+ if ( search . inProject ) {
39+ issues = issues . filter ( ( issue ) => issue . project . id === search . inProject ?. id ) ;
40+ }
3541 // filter by search
3642 if ( search . searching && search . query ) {
3743 issues = issues . filter ( ( issue ) => new RegExp ( search . query , "i" ) . test ( search . mode === "project" ? issue . project . name : `#${ issue . id } ${ issue . subject } ` ) ) ;
3844 }
3945
46+ // ---
47+
4048 // extended search
4149 const debouncedSearch = useDebounce ( search . query , 300 ) ;
4250 const extendedSearching = search . searching && debouncedSearch . length >= 3 && settings . options . extendedSearch ;
4351
44- // extended search - issues
45- const extendedSearchResultIssuesQuery = useQuery ( {
46- queryKey : [ "extendedSearchResultIssues " , debouncedSearch ] ,
52+ // extended search - mode: issue
53+ const extendedSearchIssuesResultQuery = useQuery ( {
54+ queryKey : [ "extendedSearchIssuesResult " , debouncedSearch ] ,
4755 queryFn : ( ) => searchOpenIssues ( debouncedSearch ) ,
4856 enabled : extendedSearching && search . mode === "issue" ,
4957 keepPreviousData : true ,
5058 } ) ;
51- const extendedSearchResultIssuesIds = ( extendedSearchResultIssuesQuery . data ?. map ( ( result ) => result . id ) ?? [ ] ) . filter ( ( id ) => ! issues . find ( ( issue ) => issue . id === id ) ) ;
59+ const extendedSearchIssuesResultIds = ( extendedSearchIssuesResultQuery . data ?. map ( ( result ) => result . id ) ?? [ ] ) . filter ( ( id ) => ! issues . find ( ( issue ) => issue . id === id ) ) ;
5260 const extendedSearchIssuesQuery = useQuery ( {
53- queryKey : [ "extendedSearchIssues" , extendedSearchResultIssuesIds ] ,
54- queryFn : ( ) => getOpenIssuesByIds ( extendedSearchResultIssuesIds ) ,
55- enabled : extendedSearchResultIssuesIds . length > 0 ,
56- keepPreviousData : extendedSearchResultIssuesIds . length > 0 ,
61+ queryKey : [ "extendedSearchIssues" , extendedSearchIssuesResultIds ] ,
62+ queryFn : ( ) => getOpenIssuesByIds ( extendedSearchIssuesResultIds , 0 , search . inProject ? 100 : MAX_EXTENDED_SEARCH_LIMIT ) ,
63+ enabled : extendedSearchIssuesResultIds . length > 0 ,
64+ keepPreviousData : extendedSearchIssuesResultIds . length > 0 ,
5765 } ) ;
66+ const extendedSearchIssuesList = ( search . inProject ? extendedSearchIssuesQuery . data ?. filter ( ( issue ) => issue . project . id === search . inProject ?. id ) : extendedSearchIssuesQuery . data ) ?. slice ( 0 , MAX_EXTENDED_SEARCH_LIMIT ) ?? [ ] ;
5867
59- // extended search - projects
60- const extendedSearchResultProjectsQuery = useQuery ( {
61- queryKey : [ "extendedSearchResultProjects " , debouncedSearch ] ,
68+ // extended search - mode: project
69+ const extendedSearchProjectsResultQuery = useQuery ( {
70+ queryKey : [ "extendedSearchProjectsResult " , debouncedSearch ] ,
6271 queryFn : ( ) => searchProjects ( debouncedSearch ) ,
6372 enabled : extendedSearching && search . mode === "project" ,
6473 keepPreviousData : true ,
6574 } ) ;
66- const extendedSearchResultProjectsIds = extendedSearchResultProjectsQuery . data ?. map ( ( result ) => result . id ) ?? [ ] ;
67- const extendedSearchIssuesProjectsQueries = useQueries ( {
68- queries : extendedSearchResultProjectsIds . map ( ( projectId ) => ( {
69- queryKey : [ "extendedSearchIssuesByProject " , projectId ] ,
70- queryFn : ( ) => getOpenIssuesByProject ( projectId ) ,
75+ const extendedSearchProjectsResultIds = extendedSearchProjectsResultQuery . data ?. map ( ( result ) => result . id ) ?? [ ] ;
76+ const extendedSearchIssuesByProjectsQueries = useQueries ( {
77+ queries : extendedSearchProjectsResultIds . map ( ( projectId ) => ( {
78+ queryKey : [ "extendedSearchIssuesByProjects " , projectId ] ,
79+ queryFn : ( ) => getOpenIssuesByProject ( projectId , 0 , Math . ceil ( MAX_EXTENDED_SEARCH_LIMIT / extendedSearchProjectsResultIds . length ) ) ,
7180 keepPreviousData : true ,
7281 } ) ) ,
7382 } ) ;
83+ const extendedSearchIssuesByProjectsList = extendedSearchIssuesByProjectsQueries
84+ . map ( ( q ) => q . data ?? [ ] )
85+ . flat ( )
86+ . filter ( ( { id } ) => ! issues . find ( ( issue ) => issue . id === id ) ) ;
7487
75- const extendedSearchIssues = extendedSearching
76- ? search . mode === "issue"
77- ? extendedSearchIssuesQuery . data ?? [ ]
78- : extendedSearchIssuesProjectsQueries
79- . map ( ( q ) => q . data ?? [ ] )
80- . flat ( )
81- . filter ( ( { id } ) => ! issues . find ( ( issue ) => issue . id === id ) )
82- : [ ] ;
88+ const extendedSearchIssues = extendedSearching ? ( search . mode === "issue" ? extendedSearchIssuesList : extendedSearchIssuesByProjectsList ) : [ ] ;
8389
8490 return {
8591 data : issues ,
0 commit comments