@@ -4,10 +4,7 @@ import {navigate, graphql, useStaticQuery} from 'gatsby'
44import { useIsMobile } from './use-breakpoint'
55import usePage from './use-page'
66import * as getNav from '../util/get-nav'
7-
8- // This worker can live for the entire duraction of the site
9- const WORKER = new Worker ( new URL ( '../util/search.worker.js' , import . meta. url ) )
10- const CLI_ROOT = '/cli'
7+ import { CLI_PATH } from '../constants'
118
129const useSearchData = ( ) => {
1310 const data = useStaticQuery ( graphql `
@@ -51,50 +48,13 @@ const useSearchData = () => {
5148
5249const useCliVersion = ( ) => {
5350 return getNav . getCurrentOrDefaultVariant (
54- getNav . getItem ( getNav . getVariantRoot ( `${ CLI_ROOT } /` , { stripTrailing : false } ) ) ,
51+ getNav . getItem ( getNav . getVariantRoot ( `${ CLI_PATH } /` , { stripTrailing : false } ) ) ,
5552 usePage ( ) . location . pathname ,
5653 )
5754}
5855
59- function useSearch ( ) {
60- const [ query , setQuery ] = React . useState ( )
61- const [ results , setResults ] = React . useState ( null )
62- const queryRef = React . useRef ( )
63- const items = useSearchData ( )
56+ const useSearchCombobox = ( results , setQuery ) => {
6457 const isMobile = useIsMobile ( )
65- const { url : cliUrl } = useCliVersion ( )
66-
67- const handleSearchResults = React . useCallback ( ( { data} ) => {
68- if ( data . debug ) {
69- console . log ( data . debug )
70- }
71- if ( data . query && data . results && data . query === queryRef . current ) {
72- setResults ( data . results )
73- }
74- } , [ ] )
75-
76- React . useEffect ( ( ) => {
77- WORKER . addEventListener ( 'message' , handleSearchResults )
78- } , [ handleSearchResults ] )
79-
80- React . useEffect ( ( ) => {
81- WORKER . postMessage ( { items} )
82- } , [ items ] )
83-
84- React . useEffect ( ( ) => {
85- WORKER . postMessage ( { cli : { root : CLI_ROOT , current : cliUrl } } )
86- } , [ cliUrl ] )
87-
88- React . useEffect ( ( ) => {
89- queryRef . current = query
90-
91- if ( query ) {
92- WORKER . postMessage ( { query} )
93- } else {
94- setResults ( null )
95- }
96- } , [ query ] )
97-
9858 const combobox = useCombobox ( {
9959 id : 'search-box' ,
10060 items : results || [ ] ,
@@ -130,6 +90,50 @@ function useSearch() {
13090 return changes
13191 } ,
13292 } )
93+ return combobox
94+ }
95+
96+ function useSearch ( ) {
97+ const [ query , setQuery ] = React . useState ( )
98+ const [ results , setResults ] = React . useState ( null )
99+ const queryRef = React . useRef ( )
100+ const items = useSearchData ( )
101+ const { url : cliUrl } = useCliVersion ( )
102+ const worker = React . useRef ( )
103+
104+ const handleSearchResults = React . useCallback ( ( { data} ) => {
105+ if ( data . query && data . results && data . query === queryRef . current ) {
106+ setResults ( data . results )
107+ }
108+ } , [ ] )
109+
110+ React . useEffect ( ( ) => {
111+ worker . current = new Worker ( new URL ( '../util/search.worker.js' , import . meta. url ) )
112+ } , [ ] )
113+
114+ React . useEffect ( ( ) => {
115+ worker . current . addEventListener ( 'message' , handleSearchResults )
116+ } , [ worker , handleSearchResults ] )
117+
118+ React . useEffect ( ( ) => {
119+ worker . current . postMessage ( { items} )
120+ } , [ worker , items ] )
121+
122+ React . useEffect ( ( ) => {
123+ worker . current . postMessage ( { cli : { root : CLI_PATH , current : cliUrl } } )
124+ } , [ worker , cliUrl ] )
125+
126+ React . useEffect ( ( ) => {
127+ queryRef . current = query
128+
129+ if ( query ) {
130+ worker . current . postMessage ( { query} )
131+ } else {
132+ setResults ( null )
133+ }
134+ } , [ worker , query ] )
135+
136+ const combobox = useSearchCombobox ( results , setQuery )
133137
134138 return {
135139 ...combobox ,
0 commit comments