fix: prevent sidebar drag lock during inline rename (#680) (#681)

This commit is contained in:
Iuliia Ivashko
2026-03-17 02:46:26 +02:00
committed by GitHub
parent de50283bdf
commit 3041f53e24
4 changed files with 16 additions and 3 deletions
@@ -174,6 +174,8 @@ const SessionFolderItemBase = <TSessionNode,>({
<form <form
className="flex min-w-0 flex-1 items-center gap-1" className="flex min-w-0 flex-1 items-center gap-1"
data-keyboard-avoid="true" data-keyboard-avoid="true"
onPointerDown={(event) => event.stopPropagation()}
onMouseDown={(event) => event.stopPropagation()}
onSubmit={(event) => { onSubmit={(event) => {
event.preventDefault(); event.preventDefault();
handleSaveRename(); handleSaveRename();
@@ -187,6 +189,8 @@ const SessionFolderItemBase = <TSessionNode,>({
autoFocus autoFocus
placeholder="Folder name" placeholder="Folder name"
onClick={(event) => event.stopPropagation()} onClick={(event) => event.stopPropagation()}
onPointerDown={(event) => event.stopPropagation()}
onMouseDown={(event) => event.stopPropagation()}
onKeyDown={(event) => { onKeyDown={(event) => {
if (event.key === 'Escape') { if (event.key === 'Escape') {
event.stopPropagation(); event.stopPropagation();
@@ -202,6 +206,8 @@ const SessionFolderItemBase = <TSessionNode,>({
type="submit" type="submit"
className="shrink-0 text-muted-foreground hover:text-foreground" className="shrink-0 text-muted-foreground hover:text-foreground"
onClick={(event) => event.stopPropagation()} onClick={(event) => event.stopPropagation()}
onPointerDown={(event) => event.stopPropagation()}
onMouseDown={(event) => event.stopPropagation()}
> >
<RiCheckLine className="size-4" /> <RiCheckLine className="size-4" />
</button> </button>
@@ -211,6 +217,8 @@ const SessionFolderItemBase = <TSessionNode,>({
event.stopPropagation(); event.stopPropagation();
handleCancelRename(); handleCancelRename();
}} }}
onPointerDown={(event) => event.stopPropagation()}
onMouseDown={(event) => event.stopPropagation()}
className="shrink-0 text-muted-foreground hover:text-foreground" className="shrink-0 text-muted-foreground hover:text-foreground"
> >
<RiCloseLine className="size-4" /> <RiCloseLine className="size-4" />
@@ -972,6 +972,8 @@ export const SessionSidebar: React.FC<SessionSidebarProps> = ({
], ],
); );
const isInlineEditing = Boolean(renamingFolderId || editingId || editingProjectId);
return ( return (
<div <div
ref={sessionSearchContainerRef} ref={sessionSearchContainerRef}
@@ -1053,6 +1055,7 @@ export const SessionSidebar: React.FC<SessionSidebarProps> = ({
settingsAutoCreateWorktree={settingsAutoCreateWorktree} settingsAutoCreateWorktree={settingsAutoCreateWorktree}
getOrderedGroups={getOrderedGroups} getOrderedGroups={getOrderedGroups}
setGroupOrderByProject={setGroupOrderByProject} setGroupOrderByProject={setGroupOrderByProject}
isInlineEditing={isInlineEditing}
/> />
<NewWorktreeDialog <NewWorktreeDialog
@@ -60,6 +60,7 @@ type Props = {
settingsAutoCreateWorktree: boolean; settingsAutoCreateWorktree: boolean;
getOrderedGroups: (projectId: string, groups: SessionGroup[]) => SessionGroup[]; getOrderedGroups: (projectId: string, groups: SessionGroup[]) => SessionGroup[];
setGroupOrderByProject: React.Dispatch<React.SetStateAction<Map<string, string[]>>>; setGroupOrderByProject: React.Dispatch<React.SetStateAction<Map<string, string[]>>>;
isInlineEditing: boolean;
}; };
export function SidebarProjectsList(props: Props): React.ReactNode { export function SidebarProjectsList(props: Props): React.ReactNode {
@@ -198,7 +199,7 @@ export function SidebarProjectsList(props: Props): React.ReactNode {
{orderedGroups.map((group) => { {orderedGroups.map((group) => {
const groupKey = `${projectKey}:${group.id}`; const groupKey = `${projectKey}:${group.id}`;
return ( return (
<SortableGroupItem key={group.id} id={group.id}> <SortableGroupItem key={group.id} id={group.id} disabled={props.isInlineEditing}>
{props.renderGroupSessions(group, groupKey, projectKey)} {props.renderGroupSessions(group, groupKey, projectKey)}
</SortableGroupItem> </SortableGroupItem>
); );
@@ -303,8 +303,9 @@ export const SortableProjectItem: React.FC<SortableProjectItemProps> = ({
const SortableGroupItemBase: React.FC<{ const SortableGroupItemBase: React.FC<{
id: string; id: string;
disabled?: boolean;
children: React.ReactNode; children: React.ReactNode;
}> = ({ id, children }) => { }> = ({ id, disabled = false, children }) => {
const { const {
attributes, attributes,
listeners, listeners,
@@ -312,7 +313,7 @@ const SortableGroupItemBase: React.FC<{
transform, transform,
transition, transition,
isDragging, isDragging,
} = useSortable({ id }); } = useSortable({ id, disabled });
return ( return (
<div <div