@@ -58,7 +58,8 @@ import html2canvas from 'html2canvas';
5858import { jsPDF } from 'jspdf' ;
5959import { getDashboard , updateDashboard , getFavorites , toggleFavorite , uploadImage } from '../api/dashboards' ;
6060import { getVisualizations } from '../api/visualizations' ;
61- import { DashboardPanelCard , DashboardSettingsDrawer , DEFAULT_THEME } from '../components/dashboard' ;
61+ import { DashboardPanelCard , DashboardSettingsDrawer , DEFAULT_THEME , DARK_THEME } from '../components/dashboard' ;
62+ import { useTheme } from '../hooks/useTheme' ;
6263import type { DashboardPanel , DashboardTab , DashboardTheme } from '../types' ;
6364
6465import 'react-grid-layout/css/styles.css' ;
@@ -83,10 +84,14 @@ export default function DashboardViewPage() {
8384 const queryClient = useQueryClient ( ) ;
8485 const gridRef = useRef < HTMLDivElement > ( null ) ;
8586
87+ const { isDark } = useTheme ( ) ;
88+ const globalDefaultTheme = isDark ? DARK_THEME : DEFAULT_THEME ;
89+
8690 const [ editMode , setEditMode ] = useState ( false ) ;
8791 const [ panels , setPanels ] = useState < DashboardPanel [ ] > ( [ ] ) ;
8892 const [ tabs , setTabs ] = useState < DashboardTab [ ] > ( [ ] ) ;
89- const [ theme , setTheme ] = useState < DashboardTheme > ( DEFAULT_THEME ) ;
93+ const [ theme , setTheme ] = useState < DashboardTheme > ( globalDefaultTheme ) ;
94+ const [ hasCustomTheme , setHasCustomTheme ] = useState ( false ) ;
9095 const [ panelsInitialized , setPanelsInitialized ] = useState ( false ) ;
9196 const [ refreshInterval , setRefreshInterval ] = useState ( 0 ) ;
9297 const [ addPanelVisible , setAddPanelVisible ] = useState ( false ) ;
@@ -135,11 +140,20 @@ export default function DashboardViewPage() {
135140 if ( dashboard && ! panelsInitialized ) {
136141 setPanels ( dashboard . panels || [ ] ) ;
137142 setTabs ( dashboard . tabs || [ ] ) ;
138- setTheme ( dashboard . theme || DEFAULT_THEME ) ;
143+ const savedTheme = dashboard . theme ;
144+ setHasCustomTheme ( ! ! savedTheme ) ;
145+ setTheme ( savedTheme || globalDefaultTheme ) ;
139146 setRefreshInterval ( dashboard . refreshInterval || 0 ) ;
140147 setPanelsInitialized ( true ) ;
141148 }
142- } , [ dashboard , panelsInitialized ] ) ;
149+ } , [ dashboard , panelsInitialized , globalDefaultTheme ] ) ;
150+
151+ // When global dark mode changes, update dashboards that use the default theme
152+ useEffect ( ( ) => {
153+ if ( panelsInitialized && ! hasCustomTheme ) {
154+ setTheme ( globalDefaultTheme ) ;
155+ }
156+ } , [ globalDefaultTheme , panelsInitialized , hasCustomTheme ] ) ;
143157
144158 // Fetch available visualizations for "Add panel" modal
145159 const { data : visualizations } = useQuery ( {
@@ -283,12 +297,13 @@ export default function DashboardViewPage() {
283297 if ( dashboard ) {
284298 setPanels ( dashboard . panels || [ ] ) ;
285299 setTabs ( dashboard . tabs || [ ] ) ;
286- setTheme ( dashboard . theme || DEFAULT_THEME ) ;
300+ setTheme ( dashboard . theme || globalDefaultTheme ) ;
301+ setHasCustomTheme ( ! ! dashboard . theme ) ;
287302 setRefreshInterval ( dashboard . refreshInterval || 0 ) ;
288303 }
289304 }
290305 setEditMode ( ! editMode ) ;
291- } , [ editMode , dashboard ] ) ;
306+ } , [ editMode , dashboard , globalDefaultTheme ] ) ;
292307
293308 // Save and exit edit mode
294309 const handleSave = useCallback ( ( ) => {
@@ -449,7 +464,7 @@ export default function DashboardViewPage() {
449464 { tab . name }
450465 { editMode && (
451466 < CloseOutlined
452- style = { { marginLeft : 8 , fontSize : 10 , color : '#999 ' } }
467+ style = { { marginLeft : 8 , fontSize : 10 , color : 'var(--color-text-tertiary) ' } }
453468 onClick = { ( e ) => {
454469 e . stopPropagation ( ) ;
455470 handleDeleteTab ( tab . id ) ;
@@ -635,7 +650,7 @@ export default function DashboardViewPage() {
635650 open = { settingsOpen }
636651 theme = { theme }
637652 onClose = { ( ) => setSettingsOpen ( false ) }
638- onThemeChange = { setTheme }
653+ onThemeChange = { ( t ) => { setTheme ( t ) ; setHasCustomTheme ( true ) ; } }
639654 />
640655
641656 { /* Add Panel Modal */ }
0 commit comments