@@ -99,6 +99,7 @@ type DiagnosticsData = {
9999
100100type DiagnosticsViewState = {
101101 activeTab ?: string ;
102+ activeSubtab ?: string ;
102103} ;
103104
104105declare 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
19742016async function bootstrap ( ) : Promise < void > {
0 commit comments