@@ -23,6 +23,9 @@ Object.assign(TorcDashboard.prototype, {
2323 if ( themeSelector ) themeSelector . value = theme ;
2424 if ( themeSelectorGroup ) themeSelectorGroup . style . display = darkMode ? 'block' : 'none' ;
2525
26+ // Sync sidebar dark mode toggle
27+ this . updateSidebarDarkToggle ( darkMode ) ;
28+
2629 const refreshInterval = localStorage . getItem ( 'torc-refresh-interval' ) || '30' ;
2730 const intervalInput = document . getElementById ( 'refresh-interval' ) ;
2831 if ( intervalInput ) intervalInput . value = refreshInterval ;
@@ -51,13 +54,26 @@ Object.assign(TorcDashboard.prototype, {
5154 } else {
5255 this . removeAllThemes ( ) ;
5356 }
57+ this . updateSidebarDarkToggle ( e . target . checked ) ;
5458 } ) ;
5559
5660 // Apply theme immediately when selector changes
5761 themeSelector ?. addEventListener ( 'change' , ( e ) => {
5862 this . applyTheme ( e . target . value ) ;
5963 localStorage . setItem ( 'torc-theme' , e . target . value ) ;
6064 } ) ;
65+
66+ // Sidebar dark mode toggle
67+ document . getElementById ( 'sidebar-dark-toggle' ) ?. addEventListener ( 'click' , ( ) => {
68+ this . toggleDarkMode ( ) ;
69+ } ) ;
70+ } ,
71+
72+ updateSidebarDarkToggle ( isDark ) {
73+ const icon = document . getElementById ( 'dark-toggle-icon' ) ;
74+ const label = document . getElementById ( 'dark-toggle-label' ) ;
75+ if ( icon ) icon . innerHTML = isDark ? '☼' : '☾' ;
76+ if ( label ) label . textContent = isDark ? 'Light Mode' : 'Dark Mode' ;
6177 } ,
6278
6379 applyTheme ( theme ) {
@@ -119,6 +135,7 @@ Object.assign(TorcDashboard.prototype, {
119135 if ( selector ) selector . value = nextTheme . id ;
120136 const selectorGroup = document . getElementById ( 'theme-selector-group' ) ;
121137 if ( selectorGroup ) selectorGroup . style . display = 'block' ;
138+ this . updateSidebarDarkToggle ( true ) ;
122139 } else {
123140 document . body . classList . remove ( 'dark-mode' ) ;
124141 this . removeAllThemes ( ) ;
@@ -129,6 +146,7 @@ Object.assign(TorcDashboard.prototype, {
129146 if ( checkbox ) checkbox . checked = false ;
130147 const selectorGroup = document . getElementById ( 'theme-selector-group' ) ;
131148 if ( selectorGroup ) selectorGroup . style . display = 'none' ;
149+ this . updateSidebarDarkToggle ( false ) ;
132150 }
133151
134152 this . showToast ( `Theme: ${ nextTheme . name } ` , 'info' ) ;
@@ -152,6 +170,7 @@ Object.assign(TorcDashboard.prototype, {
152170 document . body . classList . remove ( 'dark-mode' ) ;
153171 this . removeAllThemes ( ) ;
154172 }
173+ this . updateSidebarDarkToggle ( darkMode ) ;
155174
156175 this . showToast ( 'Settings saved' , 'success' ) ;
157176
@@ -198,15 +217,19 @@ Object.assign(TorcDashboard.prototype, {
198217 dagVisualizer . loadJobDependencies ( this . selectedWorkflowId ) ;
199218 }
200219
201- // Sync events workflow selector with selected workflow and clear badge
220+ // Sync events workflow selector with selected workflow and start SSE stream
202221 if ( tabName === 'events' ) {
203222 const badge = document . getElementById ( 'event-badge' ) ;
204223 if ( badge ) badge . style . display = 'none' ;
205224 if ( this . selectedWorkflowId ) {
206225 const eventsSelector = document . getElementById ( 'events-workflow-selector' ) ;
207- if ( eventsSelector ) {
226+ if ( eventsSelector && eventsSelector . value !== this . selectedWorkflowId ) {
208227 eventsSelector . value = this . selectedWorkflowId ;
209228 }
229+ // Start SSE stream if not already connected for this workflow
230+ if ( this . _lastEventsWorkflowId !== this . selectedWorkflowId ) {
231+ this . startEventStream ( this . selectedWorkflowId ) ;
232+ }
210233 }
211234 }
212235
0 commit comments