File tree Expand file tree Collapse file tree 2 files changed +25
-9
lines changed Expand file tree Collapse file tree 2 files changed +25
-9
lines changed Original file line number Diff line number Diff line change 33
44import { useCallback } from 'react'
55import { useBoolean } from 'react-use'
6+ import { onResultChange } from '../../hooks/useSearch'
67
78const collapseMap = new Map < string , boolean > ( )
89
10+ onResultChange ( ( ) => {
11+ collapseMap . clear ( )
12+ } )
13+
914export function useToggleResult ( filePath : string ) {
1015 const collapsedBefore = collapseMap . get ( filePath )
1116 const [ isExpanded , toggle ] = useBoolean ( ! collapsedBefore )
Original file line number Diff line number Diff line change @@ -26,9 +26,27 @@ let queryInFlight: SearchQuery = {
2626let searching = true
2727let notify = ( ) => { }
2828let searchError : Error | null = null
29+
2930// we will not immediately drop previous result
3031// instead, use a stale flag and update it on streaming or end
32+ // TODO: refactor this state
3133let hasStaleResult = false
34+ const resultChangeCallbacks : Set < ( ) => void > = new Set ( )
35+
36+ function refreshResultIfStale ( ) {
37+ if ( hasStaleResult ) {
38+ // empty previous result
39+ hasStaleResult = false
40+ grouped = [ ]
41+ resultChangeCallbacks . forEach ( f => f ( ) )
42+ }
43+ }
44+ export function onResultChange ( f : ( ) => void ) {
45+ resultChangeCallbacks . add ( f )
46+ return ( ) => {
47+ resultChangeCallbacks . delete ( f )
48+ }
49+ }
3250
3351// this function is also called in useQuery
3452function postSearch ( searchQuery : SearchQuery ) {
@@ -45,11 +63,7 @@ childPort.onMessage('searchResultStreaming', event => {
4563 if ( eventId !== id ) {
4664 return
4765 }
48- if ( hasStaleResult ) {
49- // empty previous result
50- hasStaleResult = false
51- grouped = [ ]
52- }
66+ refreshResultIfStale ( )
5367 queryInFlight = query
5468 grouped = merge ( groupBy ( event . searchResult ) )
5569 notify ( )
@@ -61,10 +75,7 @@ childPort.onMessage('searchEnd', event => {
6175 return
6276 }
6377 searching = false
64- if ( hasStaleResult ) {
65- grouped = [ ]
66- }
67- hasStaleResult = false
78+ refreshResultIfStale ( )
6879 queryInFlight = query
6980 notify ( )
7081} )
You can’t perform that action at this time.
0 commit comments