@@ -60,20 +60,22 @@ async def perform_search(self):
6060 return
6161
6262 try :
63- async with self :
64- self .is_fetching = False
65- yield
63+ # async with self:
64+ # self.is_fetching = True
65+ # yield
6666
6767 client = typesense .Client (TYPESENSE_CONFIG )
6868
6969 # Build search parameters
7070 search_params = {
7171 "q" : self .query ,
7272 "query_by" : "title,content,headings" ,
73- "query_by_weights" : "10,3 ,5" ,
73+ "query_by_weights" : "10,2 ,5" ,
7474 "per_page" : 15 ,
75- "num_typos" : 1 ,
75+ "num_typos" : 2 ,
7676 "sort_by" : "_text_match:desc" ,
77+ "prefix" : "true" ,
78+ "sort_by" : "_text_match:desc"
7779 }
7880
7981 # Apply filter
@@ -376,6 +378,7 @@ def search_input():
376378 ),
377379 rx .el .input (
378380 on_change = [
381+ SimpleSearch .set_is_fetching (True ),
379382 lambda value : SimpleSearch .set_query (value .replace ("rx." , "" )).debounce (500 ),
380383 SimpleSearch .perform_search (),
381384 ],
@@ -474,6 +477,40 @@ def no_results_found():
474477 class_name = "w-full flex items-center justify-center text-sm py-4" ,
475478 )
476479
480+ def searching_in_progress ():
481+ return rx .box (
482+ rx .el .p (
483+ rx .fragment (
484+ "Searching for " ,
485+ rx .el .strong (f"'{ SimpleSearch .query } '" ),
486+ "..."
487+ ),
488+ ),
489+ class_name = "w-full flex items-center justify-center text-sm py-4" ,
490+ )
491+
492+ def search_results_display ():
493+ """Display the actual search results"""
494+ return rx .box (
495+ # Docs results
496+ rx .box (
497+ rx .foreach (
498+ SimpleSearch .idxed_docs_results ,
499+ lambda value : search_result (value ["parts" ].to (list ), value )
500+ ),
501+ class_name = "flex flex-col gap-y-2" ,
502+ ),
503+ # Blog results
504+ rx .box (
505+ rx .foreach (
506+ SimpleSearch .idxed_blogs_results ,
507+ lambda value : search_result_blog (value )
508+ ),
509+ class_name = "flex flex-col gap-y-2" ,
510+ ),
511+ class_name = "flex flex-col" ,
512+ )
513+
477514def search_content ():
478515 return rx .scroll_area (
479516 rx .cond (
@@ -483,53 +520,14 @@ def search_content():
483520 rx .foreach (suggestion_items , lambda value : search_result_start (value )),
484521 class_name = "flex flex-col gap-y-2" ,
485522 ),
486- # Query is 3+ characters
523+ # Query is 3+ characters - check if we're currently fetching
487524 rx .cond (
488525 SimpleSearch .is_fetching ,
526+ searching_in_progress (),
527+ # Not fetching - show results or no results
489528 rx .cond (
490529 (SimpleSearch .idxed_docs_results .length () >= 1 ) | (SimpleSearch .idxed_blogs_results .length () >= 1 ),
491- rx .box (
492- # Docs results
493- rx .box (
494- rx .foreach (
495- SimpleSearch .idxed_docs_results ,
496- lambda value : search_result (value ["parts" ].to (list ), value )
497- ),
498- class_name = "flex flex-col gap-y-2" ,
499- ),
500- # Blog results
501- rx .box (
502- rx .foreach (
503- SimpleSearch .idxed_blogs_results ,
504- lambda value : search_result_blog (value )
505- ),
506- class_name = "flex flex-col gap-y-2" ,
507- ),
508- class_name = "flex flex-col" ,
509- ),
510- rx .box ()
511- ),
512- rx .cond (
513- (SimpleSearch .idxed_docs_results .length () >= 1 ) | (SimpleSearch .idxed_blogs_results .length () >= 1 ),
514- rx .box (
515- # Docs results
516- rx .box (
517- rx .foreach (
518- SimpleSearch .idxed_docs_results ,
519- lambda value : search_result (value ["parts" ].to (list ), value )
520- ),
521- class_name = "flex flex-col gap-y-2" ,
522- ),
523- # Blog results
524- rx .box (
525- rx .foreach (
526- SimpleSearch .idxed_blogs_results ,
527- lambda value : search_result_blog (value )
528- ),
529- class_name = "flex flex-col gap-y-2" ,
530- ),
531- class_name = "flex flex-col" ,
532- ),
530+ search_results_display (),
533531 no_results_found ()
534532 )
535533 )
0 commit comments