Skip to content

Commit 04b8ccb

Browse files
rajbosCopilot
andcommitted
fix: restore backend subtab after TeamServerConfigPanel save
- Add activeSubtab to DiagnosticsViewState so subtab selection is persisted - Add activateSubtab() helper to activate a subtab by data-subtab ID - setupSubtabHandlers now saves activeSubtab to vscode state on click - diagnosticDataLoaded handler captures the active subtab before re-rendering the backend tab and restores it afterwards - renderLayout restores both activeTab and activeSubtab from saved state - Configure Team Server button pre-saves backend/backend-teamserver to state so the settings-change-triggered refresh lands on the right subtab Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent fafb344 commit 04b8ccb

1 file changed

Lines changed: 42 additions & 0 deletions

File tree

  • vscode-extension/src/webview/diagnostics

vscode-extension/src/webview/diagnostics/main.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ type DiagnosticsData = {
9999

100100
type DiagnosticsViewState = {
101101
activeTab?: string;
102+
activeSubtab?: string;
102103
};
103104

104105
declare function acquireVsCodeApi<TState = DiagnosticsViewState>(): {
@@ -1290,12 +1291,24 @@ function renderLayout(data: DiagnosticsData): void {
12901291
if (message.backendStorageInfo) {
12911292
const backendTabContent = document.getElementById("tab-backend");
12921293
if (backendTabContent) {
1294+
// Capture active subtab before re-rendering so we can restore it
1295+
const activeSubtabEl = backendTabContent.querySelector(".subtab.active") as HTMLElement | null;
1296+
const previousSubtab = activeSubtabEl?.getAttribute("data-subtab")
1297+
?? vscode.getState()?.activeSubtab;
1298+
12931299
backendTabContent.innerHTML = renderBackendStoragePanel(
12941300
message.backendStorageInfo,
12951301
);
12961302
// Re-attach event listeners for backend buttons
12971303
setupBackendButtonHandlers();
12981304
setupSubtabHandlers();
1305+
1306+
// Restore previously-active subtab (or default to first)
1307+
if (previousSubtab) {
1308+
activateSubtab(previousSubtab);
1309+
const currentState = vscode.getState() ?? {};
1310+
vscode.setState({ ...currentState, activeSubtab: previousSubtab });
1311+
}
12991312
}
13001313
} else {
13011314
console.warn("diagnosticDataLoaded received but backendStorageInfo is missing or undefined");
@@ -1600,6 +1613,23 @@ function renderLayout(data: DiagnosticsData): void {
16001613
});
16011614
}
16021615

1616+
// Helper function to activate a subtab by its ID (without the "subtab-" prefix)
1617+
function activateSubtab(subtabId: string): boolean {
1618+
const subtabEl = document.querySelector(`.subtab[data-subtab="${subtabId}"]`);
1619+
const contentEl = document.getElementById(`subtab-${subtabId}`);
1620+
if (subtabEl && contentEl) {
1621+
const subtabBar = subtabEl.closest(".subtab-bar");
1622+
if (subtabBar) {
1623+
subtabBar.querySelectorAll(".subtab").forEach((s) => s.classList.remove("active"));
1624+
}
1625+
document.querySelectorAll(".subtab-content").forEach((c) => c.classList.remove("active"));
1626+
subtabEl.classList.add("active");
1627+
contentEl.classList.add("active");
1628+
return true;
1629+
}
1630+
return false;
1631+
}
1632+
16031633
// Helper function to activate a tab by its ID
16041634
function activateTab(tabId: string): boolean {
16051635
const tabButton = document.querySelector(`.tab[data-tab="${tabId}"]`);
@@ -1714,6 +1744,10 @@ function renderLayout(data: DiagnosticsData): void {
17141744
document
17151745
.getElementById("btn-configure-backend-team")
17161746
?.addEventListener("click", () => {
1747+
// Pre-save the teamserver subtab so the diagnostics panel restores to it
1748+
// after the settings change triggers a panel refresh
1749+
const currentState = vscode.getState() ?? {};
1750+
vscode.setState({ ...currentState, activeTab: "backend", activeSubtab: "backend-teamserver" });
17171751
vscode.postMessage({ command: "configureTeamServer" });
17181752
});
17191753

@@ -1745,6 +1779,9 @@ function renderLayout(data: DiagnosticsData): void {
17451779
document.querySelectorAll(".subtab-content").forEach((c) => c.classList.remove("active"));
17461780
subtab.classList.add("active");
17471781
document.getElementById(`subtab-${subtabId}`)?.classList.add("active");
1782+
// Persist active subtab so it can be restored after a data refresh
1783+
const currentState = vscode.getState() ?? {};
1784+
vscode.setState({ ...currentState, activeSubtab: subtabId });
17481785
});
17491786
});
17501787
}
@@ -1969,6 +2006,11 @@ function renderLayout(data: DiagnosticsData): void {
19692006
// If saved tab doesn't exist (e.g., structure changed), activate default "report" tab
19702007
activateTab("report");
19712008
}
2009+
2010+
// Restore active subtab from saved state
2011+
if (savedState?.activeSubtab) {
2012+
activateSubtab(savedState.activeSubtab);
2013+
}
19722014
}
19732015

19742016
async function bootstrap(): Promise<void> {

0 commit comments

Comments
 (0)