Skip to content

Commit c615898

Browse files
committed
🤖 fix: auto-close sidebar on mobile when selecting workspace
- Sidebar now closes when clicking a workspace on mobile (<=768px) - Also closes when clicking 'New Workspace' button - Uses existing onToggleCollapsed callback _Generated with `mux`_
1 parent 489e35e commit c615898

File tree

1 file changed

+30
-5
lines changed

1 file changed

+30
-5
lines changed

src/browser/components/ProjectSidebar.tsx

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import { TooltipWrapper, Tooltip } from "./Tooltip";
2323
import SecretsModal from "./SecretsModal";
2424
import type { Secret } from "@/common/types/secrets";
2525
import { ForceDeleteModal } from "./ForceDeleteModal";
26-
import { WorkspaceListItem } from "./WorkspaceListItem";
26+
import { WorkspaceListItem, type WorkspaceSelection } from "./WorkspaceListItem";
2727
import { RenameProvider } from "@/browser/contexts/WorkspaceRenameContext";
2828
import { useProjectContext } from "@/browser/contexts/ProjectContext";
2929
import { ChevronRight, KeyRound } from "lucide-react";
@@ -194,6 +194,31 @@ const ProjectSidebarInner: React.FC<ProjectSidebarProps> = ({
194194
updateSecrets: onUpdateSecrets,
195195
} = useProjectContext();
196196

197+
// Mobile breakpoint for auto-closing sidebar
198+
const MOBILE_BREAKPOINT = 768;
199+
200+
// Wrapper to close sidebar on mobile after workspace selection
201+
const handleSelectWorkspace = useCallback(
202+
(selection: WorkspaceSelection) => {
203+
onSelectWorkspace(selection);
204+
if (window.innerWidth <= MOBILE_BREAKPOINT && !collapsed) {
205+
onToggleCollapsed();
206+
}
207+
},
208+
[onSelectWorkspace, collapsed, onToggleCollapsed]
209+
);
210+
211+
// Wrapper to close sidebar on mobile after adding workspace
212+
const handleAddWorkspace = useCallback(
213+
(projectPath: string) => {
214+
onAddWorkspace(projectPath);
215+
if (window.innerWidth <= MOBILE_BREAKPOINT && !collapsed) {
216+
onToggleCollapsed();
217+
}
218+
},
219+
[onAddWorkspace, collapsed, onToggleCollapsed]
220+
);
221+
197222
// Workspace-specific subscriptions moved to WorkspaceListItem component
198223

199224
// Store as array in localStorage, convert to Set for usage
@@ -427,13 +452,13 @@ const ProjectSidebarInner: React.FC<ProjectSidebarProps> = ({
427452
// Create new workspace for the project of the selected workspace
428453
if (matchesKeybind(e, KEYBINDS.NEW_WORKSPACE) && selectedWorkspace) {
429454
e.preventDefault();
430-
onAddWorkspace(selectedWorkspace.projectPath);
455+
handleAddWorkspace(selectedWorkspace.projectPath);
431456
}
432457
};
433458

434459
window.addEventListener("keydown", handleKeyDown);
435460
return () => window.removeEventListener("keydown", handleKeyDown);
436-
}, [selectedWorkspace, onAddWorkspace]);
461+
}, [selectedWorkspace, handleAddWorkspace]);
437462

438463
return (
439464
<RenameProvider onRenameWorkspace={onRenameWorkspace}>
@@ -575,7 +600,7 @@ const ProjectSidebarInner: React.FC<ProjectSidebarProps> = ({
575600
>
576601
<div className="border-hover border-b px-3 py-2">
577602
<button
578-
onClick={() => onAddWorkspace(projectPath)}
603+
onClick={() => handleAddWorkspace(projectPath)}
579604
data-project-path={projectPath}
580605
aria-label={`Add workspace to ${projectName}`}
581606
className="text-muted border-border-medium hover:bg-hover hover:border-border-darker hover:text-foreground w-full cursor-pointer rounded border border-dashed bg-transparent px-3 py-1.5 text-left text-[13px] transition-all duration-200"
@@ -602,7 +627,7 @@ const ProjectSidebarInner: React.FC<ProjectSidebarProps> = ({
602627
isSelected={selectedWorkspace?.workspaceId === metadata.id}
603628
isDeleting={deletingWorkspaceIds.has(metadata.id)}
604629
lastReadTimestamp={lastReadTimestamps[metadata.id] ?? 0}
605-
onSelectWorkspace={onSelectWorkspace}
630+
onSelectWorkspace={handleSelectWorkspace}
606631
onRemoveWorkspace={handleRemoveWorkspace}
607632
onToggleUnread={_onToggleUnread}
608633
/>

0 commit comments

Comments
 (0)