Skip to content

Commit 5b1004d

Browse files
committed
add no results
1 parent 4b25c8b commit 5b1004d

File tree

1 file changed

+36
-20
lines changed

1 file changed

+36
-20
lines changed

pcweb/components/docpage/navbar/typesense.py

Lines changed: 36 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
import unicodedata
66

77
# the score cutoff -> returns only strong to medium hits without sneaking in the weaker ones + acts as a natural max cap to the results
8-
CUTTOFF = 0.6
8+
CUTOFF = 0.6
99

10-
class FuzzySearch(rx.State):
10+
class FuzzySearch(rx.State): # type: ignore[misc]
1111
query: str
1212

1313
idxed_docs: list[dict] = indexed_docs
@@ -70,7 +70,7 @@ async def serve_fuzzy_blogs(self):
7070
]
7171

7272
score = self._score_match(query_words, blog_fields)
73-
if score > CUTTOFF:
73+
if score > CUTOFF:
7474
scored_results.append((score, blog))
7575

7676
scored_results.sort(key=lambda x: x[0], reverse=True)
@@ -94,7 +94,7 @@ async def serve_fuzzy_query(self):
9494
flat_terms = [w for words in term_words_list for w in words]
9595

9696
score = self._score_match(query_words, flat_terms)
97-
if score > CUTTOFF:
97+
if score > CUTOFF:
9898
scored_results.append((score, doc))
9999

100100
scored_results.sort(key=lambda x: x[0], reverse=True)
@@ -124,7 +124,7 @@ def keyboard_shortcut_script() -> rx.Component:
124124
)
125125

126126

127-
def search_trigger() -> rx.Component:
127+
def search_trigger() -> rx.Component: # type: ignore[misc]
128128
"""Render the search trigger button."""
129129
return rx.box(
130130
rx.icon(
@@ -296,28 +296,44 @@ def search_result_start(item: dict):
296296
)
297297

298298

299+
def no_results_found():
300+
return rx.box(
301+
rx.el.p(
302+
rx.fragment(
303+
"No results found for ",
304+
rx.el.strong(f"'{FuzzySearch.query}'"),
305+
),
306+
),
307+
class_name="w-full flex items-center justify-center text-sm py-4",
308+
)
309+
299310
def search_content():
300311
return rx.scroll_area(
301312
rx.cond(
302313
FuzzySearch.query.length() >= 3,
303-
rx.box(
304-
# Docs results
314+
rx.cond(
315+
(FuzzySearch.idxed_docs_results.length() >= 1) | (FuzzySearch.idxed_blogs_results.length() >= 1),
305316
rx.box(
306-
rx.foreach(
307-
FuzzySearch.idxed_docs_results,
308-
lambda value: search_result(value["parts"].to(list), value)
317+
# Docs results
318+
rx.box(
319+
rx.foreach(
320+
FuzzySearch.idxed_docs_results,
321+
lambda value: search_result(value["parts"].to(list), value)
322+
),
323+
class_name="flex flex-col gap-y-2",
309324
),
310-
class_name="flex flex-col gap-y-2",
311-
),
312-
# Blog results
313-
rx.box(
314-
rx.foreach(
315-
FuzzySearch.idxed_blogs_results,
316-
lambda value: search_result_blog(value)
325+
# Blog results
326+
rx.box(
327+
rx.foreach(
328+
FuzzySearch.idxed_blogs_results,
329+
lambda value: search_result_blog(value)
330+
),
331+
class_name="flex flex-col gap-y-2",
317332
),
318-
class_name="flex flex-col gap-y-2",
333+
class_name="flex flex-col",
319334
),
320-
class_name="flex flex-col",
335+
# No results
336+
no_results_found(),
321337
),
322338
rx.box(
323339
rx.foreach(suggestion_items, lambda value: search_result_start(value)),
@@ -329,7 +345,7 @@ def search_content():
329345

330346

331347
def typesense_search():
332-
"""Create the main Typesense search component."""
348+
"""Create the main search component."""
333349
return rx.fragment(
334350
rx.dialog.root(
335351
rx.dialog.trigger(search_trigger(), id="search-trigger"),

0 commit comments

Comments
 (0)