From 0ebdd392d2fdf79ac4bb94ca619b660084f493e6 Mon Sep 17 00:00:00 2001 From: Michael Suchacz <203725896+ibetitsmike@users.noreply.github.com> Date: Sun, 16 Nov 2025 10:40:33 +0000 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=A4=96=20fix:=20auto-close=20sidebar?= =?UTF-8?q?=20on=20workspace=20select=20in=20PWA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Generated with --- src/browser/components/ProjectSidebar.tsx | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/browser/components/ProjectSidebar.tsx b/src/browser/components/ProjectSidebar.tsx index 938ff073f..f93fb7abb 100644 --- a/src/browser/components/ProjectSidebar.tsx +++ b/src/browser/components/ProjectSidebar.tsx @@ -21,7 +21,7 @@ import { TooltipWrapper, Tooltip } from "./Tooltip"; import SecretsModal from "./SecretsModal"; import type { Secret } from "@/common/types/secrets"; import { ForceDeleteModal } from "./ForceDeleteModal"; -import { WorkspaceListItem } from "./WorkspaceListItem"; +import { WorkspaceListItem, type WorkspaceSelection } from "./WorkspaceListItem"; import { RenameProvider } from "@/browser/contexts/WorkspaceRenameContext"; import { useProjectContext } from "@/browser/contexts/ProjectContext"; import { ChevronRight, KeyRound } from "lucide-react"; @@ -184,6 +184,17 @@ const ProjectSidebarInner: React.FC = ({ } = useWorkspaceContext(); // Get project state and operations from context + const handleSelectWorkspace = useCallback( + (selection: WorkspaceSelection) => { + onSelectWorkspace(selection); + // Auto-close sidebar on narrow viewports (PWA/mobile) + if (!collapsed && typeof window !== "undefined" && window.innerWidth <= 768) { + onToggleCollapsed(); + } + }, + [onSelectWorkspace, collapsed, onToggleCollapsed] + ); + const { projects, openProjectCreateModal: onAddProject, @@ -573,7 +584,7 @@ const ProjectSidebarInner: React.FC = ({ projectName={projectName} isSelected={selectedWorkspace?.workspaceId === metadata.id} lastReadTimestamp={lastReadTimestamps[metadata.id] ?? 0} - onSelectWorkspace={onSelectWorkspace} + onSelectWorkspace={handleSelectWorkspace} onRemoveWorkspace={handleRemoveWorkspace} onToggleUnread={_onToggleUnread} /> From 7a21a38b11e88d3f690b839ea9beb8dcaeb7a107 Mon Sep 17 00:00:00 2001 From: Michael Suchacz <203725896+ibetitsmike@users.noreply.github.com> Date: Thu, 20 Nov 2025 14:04:14 +0100 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=A4=96=20fix:=20improve=20PWA=20detec?= =?UTF-8?q?tion=20for=20sidebar=20auto-close?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Use proper display-mode: standalone check for PWA detection - Also check navigator.standalone for iOS Safari PWA - Keep mobile width check as fallback for narrow viewports --- src/browser/components/ProjectSidebar.tsx | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/browser/components/ProjectSidebar.tsx b/src/browser/components/ProjectSidebar.tsx index f93fb7abb..c84ba887c 100644 --- a/src/browser/components/ProjectSidebar.tsx +++ b/src/browser/components/ProjectSidebar.tsx @@ -187,9 +187,15 @@ const ProjectSidebarInner: React.FC = ({ const handleSelectWorkspace = useCallback( (selection: WorkspaceSelection) => { onSelectWorkspace(selection); - // Auto-close sidebar on narrow viewports (PWA/mobile) - if (!collapsed && typeof window !== "undefined" && window.innerWidth <= 768) { - onToggleCollapsed(); + // Auto-close sidebar in PWA mode or on mobile viewports + if (!collapsed && typeof window !== "undefined") { + const isPWA = window.matchMedia('(display-mode: standalone)').matches || + (window.navigator as any).standalone; // iOS Safari + const isMobileWidth = window.innerWidth <= 768; + + if (isPWA || isMobileWidth) { + onToggleCollapsed(); + } } }, [onSelectWorkspace, collapsed, onToggleCollapsed]