From 74376c022a1806af473715b5e5382e6321eb6465 Mon Sep 17 00:00:00 2001 From: bkellam Date: Tue, 18 Nov 2025 12:22:36 -0800 Subject: [PATCH] Add skeletons to filter panel when search is streaming --- .../search/components/filterPanel/filter.tsx | 50 +++++++++++-------- .../search/components/filterPanel/index.tsx | 5 ++ .../search/components/searchResultsPage.tsx | 1 + 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/packages/web/src/app/[domain]/search/components/filterPanel/filter.tsx b/packages/web/src/app/[domain]/search/components/filterPanel/filter.tsx index 82db0127..0a76a50e 100644 --- a/packages/web/src/app/[domain]/search/components/filterPanel/filter.tsx +++ b/packages/web/src/app/[domain]/search/components/filterPanel/filter.tsx @@ -5,6 +5,7 @@ import { compareEntries, Entry } from "./entry"; import { Input } from "@/components/ui/input"; import Fuse from "fuse.js"; import { cn } from "@/lib/utils" +import { Skeleton } from "@/components/ui/skeleton"; interface FilterProps { title: string, @@ -12,6 +13,7 @@ interface FilterProps { entries: Entry[], onEntryClicked: (key: string) => void, className?: string, + isStreaming: boolean, } export const Filter = ({ @@ -20,6 +22,7 @@ export const Filter = ({ entries, onEntryClicked, className, + isStreaming, }: FilterProps) => { const [searchFilter, setSearchFilter] = useState(""); @@ -43,27 +46,34 @@ export const Filter = ({ className )}>

{title}

-
- setSearchFilter(event.target.value)} - /> -
- -
- {filteredEntries - .sort((entryA, entryB) => compareEntries(entryB, entryA)) - .map((entry) => ( - onEntryClicked(entry.key)} + {(isStreaming && entries.length === 0) ? ( + + ) : ( + <> +
+ setSearchFilter(event.target.value)} /> - ))} -
+
+ +
+ {filteredEntries + .sort((entryA, entryB) => compareEntries(entryB, entryA)) + .map((entry) => ( + onEntryClicked(entry.key)} + /> + ))} +
+ + )} + ) } diff --git a/packages/web/src/app/[domain]/search/components/filterPanel/index.tsx b/packages/web/src/app/[domain]/search/components/filterPanel/index.tsx index 2826d78b..c27c5d16 100644 --- a/packages/web/src/app/[domain]/search/components/filterPanel/index.tsx +++ b/packages/web/src/app/[domain]/search/components/filterPanel/index.tsx @@ -16,6 +16,7 @@ interface FilePanelProps { matches: SearchResultFile[]; repoInfo: Record; onFilterChange?: () => void; + isStreaming: boolean; } /** @@ -33,11 +34,13 @@ interface FilePanelProps { * @param matches - Array of search result files to filter * @param repoInfo - Information about repositories including their display names and icons * @param onFilterChange - Optional callback that is called whenever a filter is applied or removed + * @param isStreaming - Whether the search is streaming */ export const FilterPanel = ({ matches, repoInfo, onFilterChange, + isStreaming, }: FilePanelProps) => { const router = useRouter(); const searchParams = useSearchParams(); @@ -155,6 +158,7 @@ export const FilterPanel = ({ } }} className="max-h-[50%]" + isStreaming={isStreaming} /> ) diff --git a/packages/web/src/app/[domain]/search/components/searchResultsPage.tsx b/packages/web/src/app/[domain]/search/components/searchResultsPage.tsx index ea44b88e..48784eaf 100644 --- a/packages/web/src/app/[domain]/search/components/searchResultsPage.tsx +++ b/packages/web/src/app/[domain]/search/components/searchResultsPage.tsx @@ -249,6 +249,7 @@ const PanelGroup = ({ { searchResultsPanelRef.current?.resetScroll(); }}