This commit is contained in:
@@ -108,6 +108,10 @@ export const VSCodeLayout: React.FC = () => {
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const [currentView, setCurrentView] = React.useState<VSCodeView>(() => (bootDraftOpen ? 'chat' : 'sessions'));
|
const [currentView, setCurrentView] = React.useState<VSCodeView>(() => (bootDraftOpen ? 'chat' : 'sessions'));
|
||||||
|
// Mirror currentView so the navigate event handler (registered once) can read the live value.
|
||||||
|
const currentViewRef = React.useRef(currentView);
|
||||||
|
// Snapshot of the view the user was on before opening Settings, so close restores it.
|
||||||
|
const viewBeforeSettingsRef = React.useRef<VSCodeView | null>(null);
|
||||||
const [containerWidth, setContainerWidth] = React.useState<number>(0);
|
const [containerWidth, setContainerWidth] = React.useState<number>(0);
|
||||||
const [expandedSidebarWidth, setExpandedSidebarWidth] = React.useState<number>(SESSIONS_SIDEBAR_WIDTH);
|
const [expandedSidebarWidth, setExpandedSidebarWidth] = React.useState<number>(SESSIONS_SIDEBAR_WIDTH);
|
||||||
const [isResizingExpandedSidebar, setIsResizingExpandedSidebar] = React.useState(false);
|
const [isResizingExpandedSidebar, setIsResizingExpandedSidebar] = React.useState(false);
|
||||||
@@ -185,6 +189,11 @@ export const VSCodeLayout: React.FC = () => {
|
|||||||
}
|
}
|
||||||
}, [currentSessionId]);
|
}, [currentSessionId]);
|
||||||
|
|
||||||
|
// Keep currentViewRef in sync so the stable navigate handler reads the live view.
|
||||||
|
React.useEffect(() => {
|
||||||
|
currentViewRef.current = currentView;
|
||||||
|
}, [currentView]);
|
||||||
|
|
||||||
React.useEffect(() => {
|
React.useEffect(() => {
|
||||||
const vscodeApi = runtimeApis.vscode;
|
const vscodeApi = runtimeApis.vscode;
|
||||||
if (!vscodeApi) {
|
if (!vscodeApi) {
|
||||||
@@ -347,6 +356,9 @@ export const VSCodeLayout: React.FC = () => {
|
|||||||
const detail = (event as CustomEvent<{ view?: string }>).detail;
|
const detail = (event as CustomEvent<{ view?: string }>).detail;
|
||||||
const view = detail?.view;
|
const view = detail?.view;
|
||||||
if (view === 'settings') {
|
if (view === 'settings') {
|
||||||
|
if (currentViewRef.current !== 'settings') {
|
||||||
|
viewBeforeSettingsRef.current = currentViewRef.current;
|
||||||
|
}
|
||||||
setCurrentView('settings');
|
setCurrentView('settings');
|
||||||
} else if (view === 'chat') {
|
} else if (view === 'chat') {
|
||||||
setCurrentView('chat');
|
setCurrentView('chat');
|
||||||
@@ -532,7 +544,11 @@ export const VSCodeLayout: React.FC = () => {
|
|||||||
// Settings view
|
// Settings view
|
||||||
<React.Suspense fallback={null}>
|
<React.Suspense fallback={null}>
|
||||||
<SettingsView
|
<SettingsView
|
||||||
onClose={() => setCurrentView(usesExpandedLayout ? 'chat' : 'sessions')}
|
onClose={() => {
|
||||||
|
const previousView = viewBeforeSettingsRef.current;
|
||||||
|
viewBeforeSettingsRef.current = null;
|
||||||
|
setCurrentView(previousView ?? (usesExpandedLayout ? 'chat' : 'sessions'));
|
||||||
|
}}
|
||||||
forceMobile={usesMobileLayout}
|
forceMobile={usesMobileLayout}
|
||||||
/>
|
/>
|
||||||
</React.Suspense>
|
</React.Suspense>
|
||||||
|
|||||||
Reference in New Issue
Block a user