From fb6b5ca886a897d6ad4d2f9db41e7c6c66c54a25 Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Thu, 19 Feb 2026 12:57:23 +0700 Subject: [PATCH] Rename sidebar to LeftSidebar and hide empty filters --- packages/app/src/app/_layout.tsx | 6 +- .../{sliding-sidebar.tsx => left-sidebar.tsx} | 4 +- .../app/src/components/sidebar-agent-list.tsx | 181 +++++++++--------- 3 files changed, 97 insertions(+), 94 deletions(-) rename packages/app/src/components/{sliding-sidebar.tsx => left-sidebar.tsx} (99%) diff --git a/packages/app/src/app/_layout.tsx b/packages/app/src/app/_layout.tsx index c0a378fb0..51cfb836c 100644 --- a/packages/app/src/app/_layout.tsx +++ b/packages/app/src/app/_layout.tsx @@ -20,7 +20,7 @@ import { useState, useEffect, type ReactNode, useMemo, useRef } from "react"; import { Platform } from "react-native"; import * as Linking from "expo-linking"; import * as Notifications from "expo-notifications"; -import { SlidingSidebar } from "@/components/sliding-sidebar"; +import { LeftSidebar } from "@/components/left-sidebar"; import { DownloadToast } from "@/components/download-toast"; import { ToastProvider } from "@/contexts/toast-context"; import { usePanelStore } from "@/stores/panel-store"; @@ -282,12 +282,12 @@ function AppContainer({ children, selectedAgentId }: AppContainerProps) { const content = ( - {!isMobile && chromeEnabled && } + {!isMobile && chromeEnabled && } {children} - {isMobile && chromeEnabled && } + {isMobile && chromeEnabled && } diff --git a/packages/app/src/components/sliding-sidebar.tsx b/packages/app/src/components/left-sidebar.tsx similarity index 99% rename from packages/app/src/components/sliding-sidebar.tsx rename to packages/app/src/components/left-sidebar.tsx index 3cb002c2f..866a80499 100644 --- a/packages/app/src/components/sliding-sidebar.tsx +++ b/packages/app/src/components/left-sidebar.tsx @@ -43,11 +43,11 @@ import { const DESKTOP_SIDEBAR_WIDTH = 320; -interface SlidingSidebarProps { +interface LeftSidebarProps { selectedAgentId?: string; } -export function SlidingSidebar({ selectedAgentId }: SlidingSidebarProps) { +export function LeftSidebar({ selectedAgentId }: LeftSidebarProps) { const { theme } = useUnistyles(); const insets = useSafeAreaInsets(); const isMobile = diff --git a/packages/app/src/components/sidebar-agent-list.tsx b/packages/app/src/components/sidebar-agent-list.tsx index 2a42ad5b7..b470dd211 100644 --- a/packages/app/src/components/sidebar-agent-list.tsx +++ b/packages/app/src/components/sidebar-agent-list.tsx @@ -488,6 +488,7 @@ export function SidebarAgentList({ projectOptions.find((option) => option.projectKey === selectedProjectKeys[0]) ?? null ); }, [projectOptions, selectedProjectKeys]); + const showProjectFilters = projectOptions.length > 0; const sessions = useSessionStore((state) => state.sessions); const projectIconRequests = useMemo(() => { @@ -745,98 +746,100 @@ export function SidebarAgentList({ return ( - - [ - styles.filterTrigger, - (selectedProjectKeys.length > 0 || hovered || pressed) && - styles.filterTriggerActive, - ]} - onPress={() => setIsProjectFilterOpen(true)} - > - {({ hovered = false, pressed }) => { - const isInteracting = hovered || pressed; - const showActiveForeground = - selectedProjectKeys.length > 0 || isInteracting; - return ( - <> - {selectedProjectKeys.length === 1 && selectedProjectIconUri ? ( - + [ + styles.filterTrigger, + (selectedProjectKeys.length > 0 || hovered || pressed) && + styles.filterTriggerActive, + ]} + onPress={() => setIsProjectFilterOpen(true)} + > + {({ hovered = false, pressed }) => { + const isInteracting = hovered || pressed; + const showActiveForeground = + selectedProjectKeys.length > 0 || isInteracting; + return ( + <> + {selectedProjectKeys.length === 1 && selectedProjectIconUri ? ( + + ) : selectedProjectKeys.length > 1 ? ( + + + {selectedProjectKeys.length} + + + ) : null} + + {selectedProjectLabel} + + - ) : selectedProjectKeys.length > 1 ? ( - - - {selectedProjectKeys.length} - - - ) : null} - - {selectedProjectLabel} - - - - ); - }} - - - {selectedProjectKeys.length > 0 ? ( - - Clear + + ); + }} - ) : null} - {}} - title="Filter by project" - placeholder="Search projects" - searchPlaceholder="Search projects" - desktopPlacement="bottom-start" - open={isProjectFilterOpen} - onOpenChange={setIsProjectFilterOpen} - anchorRef={projectFilterAnchorRef} - > - - {projectOptions.length === 0 ? ( - No projects - ) : ( - projectOptions.map((option) => ( - - )) - )} - - - + {selectedProjectKeys.length > 0 ? ( + + Clear + + ) : null} + + {}} + title="Filter by project" + placeholder="Search projects" + searchPlaceholder="Search projects" + desktopPlacement="bottom-start" + open={isProjectFilterOpen} + onOpenChange={setIsProjectFilterOpen} + anchorRef={projectFilterAnchorRef} + > + + {projectOptions.length === 0 ? ( + No projects + ) : ( + projectOptions.map((option) => ( + + )) + )} + + + + ) : null}