feat: pass selected project when opening new session drafts

New drafts now receive the active project ID from sidebar project actions.
Project-group draft creation also forwards the selected project.
Aligns draft opening behavior across project and session selection flows.
This commit is contained in:
Bohdan Triapitsyn
2026-07-15 12:31:35 +03:00
parent e48a9397f1
commit 2b5e9a0221
3 changed files with 13 additions and 7 deletions
@@ -82,7 +82,7 @@ type Props = {
setActiveProjectIdOnly: (id: string) => void; setActiveProjectIdOnly: (id: string) => void;
setActiveMainTab: (tab: MainTab) => void; setActiveMainTab: (tab: MainTab) => void;
setSessionSwitcherOpen: (open: boolean) => void; setSessionSwitcherOpen: (open: boolean) => void;
openNewSessionDraft: (options?: { directoryOverride?: string | null; targetFolderId?: string }) => void; openNewSessionDraft: (options?: { selectedProjectId?: string | null; directoryOverride?: string | null; targetFolderId?: string }) => void;
addSessionToFolder: (scopeKey: string, folderId: string, sessionId: string) => void; addSessionToFolder: (scopeKey: string, folderId: string, sessionId: string) => void;
createFolderAndStartRename: (scopeKey: string, parentId?: string | null) => { id: string } | null; createFolderAndStartRename: (scopeKey: string, parentId?: string | null) => { id: string } | null;
renamingFolderId: string | null; renamingFolderId: string | null;
@@ -897,7 +897,7 @@ function SessionGroupSectionBase(props: Props): React.ReactNode {
if (projectId && projectId !== activeProjectId) setActiveProjectIdOnly(projectId); if (projectId && projectId !== activeProjectId) setActiveProjectIdOnly(projectId);
setActiveMainTab('chat'); setActiveMainTab('chat');
if (mobileVariant) setSessionSwitcherOpen(false); if (mobileVariant) setSessionSwitcherOpen(false);
openNewSessionDraft({ directoryOverride: group.directory, targetFolderId: folder.id }); openNewSessionDraft({ selectedProjectId: projectId, directoryOverride: group.directory, targetFolderId: folder.id });
}} }}
onNewSubFolder={depth === 0 ? () => { onNewSubFolder={depth === 0 ? () => {
if (!folderScopeKey) return; if (!folderScopeKey) return;
@@ -1269,7 +1269,7 @@ function SessionGroupSectionBase(props: Props): React.ReactNode {
if (projectId && projectId !== activeProjectId) setActiveProjectIdOnly(projectId); if (projectId && projectId !== activeProjectId) setActiveProjectIdOnly(projectId);
setActiveMainTab('chat'); setActiveMainTab('chat');
if (mobileVariant) setSessionSwitcherOpen(false); if (mobileVariant) setSessionSwitcherOpen(false);
openNewSessionDraft({ directoryOverride: group.directory }); openNewSessionDraft({ selectedProjectId: projectId, directoryOverride: group.directory });
}} }}
className="inline-flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-interactive-hover/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50" className="inline-flex h-6 w-6 items-center justify-center rounded-md text-muted-foreground hover:text-foreground hover:bg-interactive-hover/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50"
aria-label={t('sessions.sidebar.group.actions.newDraftInGroupAria', { label: group.label })} aria-label={t('sessions.sidebar.group.actions.newDraftInGroupAria', { label: group.label })}
@@ -64,7 +64,7 @@ type Props = {
setActiveProjectIdOnly: (id: string) => void; setActiveProjectIdOnly: (id: string) => void;
setActiveMainTab: (tab: MainTab) => void; setActiveMainTab: (tab: MainTab) => void;
setSessionSwitcherOpen: (open: boolean) => void; setSessionSwitcherOpen: (open: boolean) => void;
openNewSessionDraft: (options?: { directoryOverride?: string | null }) => void; openNewSessionDraft: (options?: { selectedProjectId?: string | null; directoryOverride?: string | null }) => void;
openNewWorktreeDialog: () => void; openNewWorktreeDialog: () => void;
openProjectEditDialog: (id: string) => void; openProjectEditDialog: (id: string) => void;
removeProject: (id: string) => void; removeProject: (id: string) => void;
@@ -243,7 +243,10 @@ export function SidebarProjectsList(props: Props): React.ReactNode {
if (projectKey !== props.activeProjectId) props.setActiveProjectIdOnly(projectKey); if (projectKey !== props.activeProjectId) props.setActiveProjectIdOnly(projectKey);
props.setActiveMainTab('chat'); props.setActiveMainTab('chat');
if (props.mobileVariant) props.setSessionSwitcherOpen(false); if (props.mobileVariant) props.setSessionSwitcherOpen(false);
props.openNewSessionDraft({ directoryOverride: project.normalizedPath }); props.openNewSessionDraft({
selectedProjectId: projectKey,
directoryOverride: project.normalizedPath,
});
}} }}
onNewWorktreeSession={() => { onNewWorktreeSession={() => {
if (projectKey !== props.activeProjectId) props.setActiveProjectIdOnly(projectKey); if (projectKey !== props.activeProjectId) props.setActiveProjectIdOnly(projectKey);
@@ -19,7 +19,7 @@ type Args = {
handleSessionSelect: (sessionId: string, sessionDirectory: string | null, projectId?: string | null) => void; handleSessionSelect: (sessionId: string, sessionDirectory: string | null, projectId?: string | null) => void;
newSessionDraftOpen: boolean; newSessionDraftOpen: boolean;
mobileVariant: boolean; mobileVariant: boolean;
openNewSessionDraft: (options?: { directoryOverride?: string | null }) => void; openNewSessionDraft: (options?: { selectedProjectId?: string | null; directoryOverride?: string | null }) => void;
setActiveMainTab: (tab: MainTab) => void; setActiveMainTab: (tab: MainTab) => void;
setSessionSwitcherOpen: (open: boolean) => void; setSessionSwitcherOpen: (open: boolean) => void;
}; };
@@ -131,7 +131,10 @@ export const useProjectSessionSelection = (args: Args): void => {
if (mobileVariant) { if (mobileVariant) {
setSessionSwitcherOpen(false); setSessionSwitcherOpen(false);
} }
openNewSessionDraft({ directoryOverride: section.project.normalizedPath }); openNewSessionDraft({
selectedProjectId: section.project.id,
directoryOverride: section.project.normalizedPath,
});
return; return;
} }