@@ -194,22 +194,44 @@ fn SearchModal() -> Element {
194
194
let ( bytes, _) =
195
195
dioxus_search:: yazi:: decompress ( & data, dioxus_search:: yazi:: Format :: Zlib ) . ok ( ) ?;
196
196
197
- let index = dioxus_search:: SearchIndex :: from_bytes ( "search" , bytes) ;
197
+ let index: dioxus_search:: SearchIndex < Route > =
198
+ dioxus_search:: SearchIndex :: from_bytes ( "search" , bytes) ;
198
199
199
200
Some ( index)
200
201
} ) ;
201
202
202
203
let search = move || {
203
204
let query = & search_text. read ( ) ;
204
- search_index
205
+ let mut results = search_index
205
206
. value ( )
206
207
. as_ref ( )
207
- . map ( |search| search. as_ref ( ) . map ( |s| s. search ( query) ) )
208
- . flatten ( )
209
- . unwrap_or_else ( || Ok ( vec ! [ ] ) )
208
+ . and_then ( |search| search. as_ref ( ) . map ( |s| s. search ( query) ) )
209
+ . unwrap_or_else ( || Ok ( vec ! [ ] ) ) ;
210
+ let current_route: Route = router ( ) . current ( ) ;
211
+
212
+ // Only show search results from the version of the docs the user is currently on (or the latest if they
213
+ // are not on a doc page)
214
+ if let Ok ( results) = & mut results {
215
+ results. retain ( |result| {
216
+ // If the user is not on a doc page, show only the latest docs
217
+ if !current_route. is_docs ( ) {
218
+ return result. route . is_latest_docs ( ) ;
219
+ }
220
+ // Otherwise, show the results from the current version of the docs
221
+ matches ! (
222
+ ( & current_route, & result. route) ,
223
+ ( Route :: Docs06 { .. } , Route :: Docs06 { .. } )
224
+ | ( Route :: Docs05 { .. } , Route :: Docs05 { .. } )
225
+ | ( Route :: Docs04 { .. } , Route :: Docs04 { .. } )
226
+ | ( Route :: Docs03 { .. } , Route :: Docs03 { .. } )
227
+ )
228
+ } ) ;
229
+ }
230
+
231
+ results
210
232
} ;
211
233
212
- let mut results = use_signal ( || search ( ) ) ;
234
+ let mut results = use_signal ( search) ;
213
235
214
236
let mut last_key_press = use_signal ( || {
215
237
if cfg ! ( target_arch = "wasm32" ) {
0 commit comments