feat(sidebar): add right-click context menu support for sessions (#157)
Enable opening the session dropdown menu via right-click, providing a more native desktop experience. The three-dot menu button continues to work as before.
This commit is contained in:
@@ -335,6 +335,7 @@ export const SessionSidebar: React.FC<SessionSidebarProps> = ({
|
|||||||
const [hoveredProjectId, setHoveredProjectId] = React.useState<string | null>(null);
|
const [hoveredProjectId, setHoveredProjectId] = React.useState<string | null>(null);
|
||||||
const [activeDragId, setActiveDragId] = React.useState<string | null>(null);
|
const [activeDragId, setActiveDragId] = React.useState<string | null>(null);
|
||||||
const [stuckProjectHeaders, setStuckProjectHeaders] = React.useState<Set<string>>(new Set());
|
const [stuckProjectHeaders, setStuckProjectHeaders] = React.useState<Set<string>>(new Set());
|
||||||
|
const [openMenuSessionId, setOpenMenuSessionId] = React.useState<string | null>(null);
|
||||||
const projectHeaderSentinelRefs = React.useRef<Map<string, HTMLDivElement | null>>(new Map());
|
const projectHeaderSentinelRefs = React.useRef<Map<string, HTMLDivElement | null>>(new Map());
|
||||||
const ignoreIntersectionUntil = React.useRef<number>(0);
|
const ignoreIntersectionUntil = React.useRef<number>(0);
|
||||||
|
|
||||||
@@ -1100,6 +1101,10 @@ export const SessionSidebar: React.FC<SessionSidebarProps> = ({
|
|||||||
isMissingDirectory ? 'opacity-75' : '',
|
isMissingDirectory ? 'opacity-75' : '',
|
||||||
depth > 0 && 'pl-[20px]',
|
depth > 0 && 'pl-[20px]',
|
||||||
)}
|
)}
|
||||||
|
onContextMenu={(e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
setOpenMenuSessionId(session.id);
|
||||||
|
}}
|
||||||
>
|
>
|
||||||
<div className="flex min-w-0 flex-1 items-center">
|
<div className="flex min-w-0 flex-1 items-center">
|
||||||
<button
|
<button
|
||||||
@@ -1199,7 +1204,10 @@ export const SessionSidebar: React.FC<SessionSidebarProps> = ({
|
|||||||
|
|
||||||
<div className="flex items-center gap-1.5 self-stretch">
|
<div className="flex items-center gap-1.5 self-stretch">
|
||||||
{streamingIndicator}
|
{streamingIndicator}
|
||||||
<DropdownMenu>
|
<DropdownMenu
|
||||||
|
open={openMenuSessionId === session.id}
|
||||||
|
onOpenChange={(open) => setOpenMenuSessionId(open ? session.id : null)}
|
||||||
|
>
|
||||||
<DropdownMenuTrigger asChild>
|
<DropdownMenuTrigger asChild>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
@@ -1320,6 +1328,7 @@ export const SessionSidebar: React.FC<SessionSidebarProps> = ({
|
|||||||
setActiveMainTab,
|
setActiveMainTab,
|
||||||
setSessionSwitcherOpen,
|
setSessionSwitcherOpen,
|
||||||
openNewSessionDraft,
|
openNewSessionDraft,
|
||||||
|
openMenuSessionId,
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user