@@ -2,8 +2,10 @@ import { ChevronLeft, ChevronRight } from "lucide-react";
22
33import { TopbarSearch } from "@/features/search/ui/TopbarSearch" ;
44import type { Channel , SearchHit } from "@/shared/api/types" ;
5+ import { cn } from "@/shared/lib/cn" ;
56import { Button } from "@/shared/ui/button" ;
67import { SidebarTrigger , useSidebar } from "@/shared/ui/sidebar" ;
8+ import { Skeleton } from "@/shared/ui/skeleton" ;
79
810type AppTopChromeProps = {
911 canGoBack : boolean ;
@@ -16,6 +18,7 @@ type AppTopChromeProps = {
1618 onOpenResult : ( hit : SearchHit ) => void ;
1719 searchHidden ?: boolean ;
1820 searchFocusRequest : number ;
21+ searchLoading ?: boolean ;
1922} ;
2023
2124function GlobalTopDivider ( ) {
@@ -39,15 +42,19 @@ function CenterColumnTopbarSearch({
3942 onOpenChannel,
4043 onOpenResult,
4144 searchFocusRequest,
45+ searchLoading = false ,
4246} : Pick <
4347 AppTopChromeProps ,
4448 | "channels"
4549 | "currentPubkey"
4650 | "onOpenChannel"
4751 | "onOpenResult"
4852 | "searchFocusRequest"
53+ | "searchLoading"
4954> ) {
5055 const { isResizing, state } = useSidebar ( ) ;
56+ const searchClassName =
57+ "pointer-events-auto w-[220px] max-w-full md:w-[300px] lg:w-[360px] xl:w-[420px] 2xl:w-[480px]" ;
5158
5259 return (
5360 < div
@@ -59,20 +66,30 @@ function CenterColumnTopbarSearch({
5966 right : 0 ,
6067 } }
6168 >
62- < TopbarSearch
63- channels = { channels }
64- className = "pointer-events-auto w-[220px] max-w-full md:w-[300px] lg:w-[360px] xl:w-[420px] 2xl:w-[480px]"
65- currentPubkey = { currentPubkey }
66- focusRequest = { searchFocusRequest }
67- onOpenChannel = { onOpenChannel }
68- onOpenResult = { onOpenResult }
69- />
69+ { searchLoading ? (
70+ < div
71+ aria-hidden = "true"
72+ className = { cn ( "h-7" , searchClassName ) }
73+ data-testid = "topbar-search-loading"
74+ >
75+ < Skeleton className = "h-full w-full rounded-lg" />
76+ </ div >
77+ ) : (
78+ < TopbarSearch
79+ channels = { channels }
80+ className = { searchClassName }
81+ currentPubkey = { currentPubkey }
82+ focusRequest = { searchFocusRequest }
83+ onOpenChannel = { onOpenChannel }
84+ onOpenResult = { onOpenResult }
85+ />
86+ ) }
7087 </ div >
7188 ) ;
7289}
7390
7491const TOP_CHROME_ICON_BUTTON_CLASS =
75- "rounded-[4px] text-muted-foreground/70 hover:bg-border/45 hover:text-foreground" ;
92+ "h-7 w-7 rounded-[4px] text-muted-foreground/70 hover:bg-border/45 hover:text-foreground [&_svg]:size-4 " ;
7693
7794export function AppTopChrome ( {
7895 canGoBack,
@@ -85,6 +102,7 @@ export function AppTopChrome({
85102 onOpenResult,
86103 searchHidden = false ,
87104 searchFocusRequest,
105+ searchLoading = false ,
88106} : AppTopChromeProps ) {
89107 return (
90108 < >
@@ -94,7 +112,7 @@ export function AppTopChrome({
94112 data-tauri-drag-region
95113 />
96114 < GlobalTopDivider />
97- < div className = "fixed left-[80px] top-[9px ] z-45 flex items-center gap-0.5" >
115+ < div className = "fixed left-[80px] top-[6px ] z-45 flex items-center gap-0.5" >
98116 < SidebarTrigger className = { TOP_CHROME_ICON_BUTTON_CLASS } />
99117 < Button
100118 aria-label = "Go back"
@@ -126,6 +144,7 @@ export function AppTopChrome({
126144 onOpenChannel = { onOpenChannel }
127145 onOpenResult = { onOpenResult }
128146 searchFocusRequest = { searchFocusRequest }
147+ searchLoading = { searchLoading }
129148 />
130149 ) }
131150 </ >
0 commit comments