From b1c3c1965cb8fb15ddf2852cc865796d884d7298 Mon Sep 17 00:00:00 2001 From: Dennis Collaris <d.a.c.collaris@uu.nl> Date: Mon, 5 Aug 2024 09:16:13 +0000 Subject: [PATCH] feat: support dark mode in RawJSONVis --- libs/config/styling/variables.css | 1 + .../visualizations/rawjsonvis/rawjsonvis.tsx | 23 ++++++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/libs/config/styling/variables.css b/libs/config/styling/variables.css index 8d8c90487..47bab4049 100644 --- a/libs/config/styling/variables.css +++ b/libs/config/styling/variables.css @@ -182,6 +182,7 @@ } body.dark-mode { + color-scheme: dark; --clr-light: var(--clr-neutral-100); --clr-dark: var(--clr-white); diff --git a/libs/shared/lib/vis/visualizations/rawjsonvis/rawjsonvis.tsx b/libs/shared/lib/vis/visualizations/rawjsonvis/rawjsonvis.tsx index d12e94310..a58aca2be 100644 --- a/libs/shared/lib/vis/visualizations/rawjsonvis/rawjsonvis.tsx +++ b/libs/shared/lib/vis/visualizations/rawjsonvis/rawjsonvis.tsx @@ -1,8 +1,10 @@ -import React, { useEffect } from 'react'; -import ReactJSONView from 'react-json-view'; +import React, { useState, useEffect } from 'react'; +import ReactJSONView, { ThemeKeys } from 'react-json-view'; import { VisualizationPropTypes, VISComponentType, VisualizationSettingsPropTypes } from '../../common'; import { SettingsContainer } from '@graphpolaris/shared/lib/vis/components/config'; import { Input } from '@graphpolaris/shared/lib/components/inputs'; +import { useConfig } from '@graphpolaris/shared/lib/data-access/store'; +import { Theme } from '@graphpolaris/shared/lib/data-access/store/configSlice'; export interface RawJSONVisProps { theme: string; @@ -15,13 +17,28 @@ const settings: RawJSONVisProps = { }; export const RawJSONVis = React.memo(({ data, settings }: VisualizationPropTypes) => { + const config = useConfig(); + + let [theme, setTheme] = useState<ThemeKeys>(settings.theme || 'bright:inverted'); + + useEffect(() => { + if (theme.startsWith('bright')) { + setTheme(config.theme === Theme.dark ? 'bright' : 'bright:inverted'); + } + }, [config.theme]); + + + if (config.theme === Theme.dark && theme === 'bright:inverted') { + setTheme('bright'); + } + return ( <ReactJSONView src={data} collapsed={1} quotesOnKeys={false} style={{ padding: '20px', flexGrow: 1 }} - theme={settings.theme || 'bright:inverted'} + theme={theme} iconStyle={settings.iconStyle} enableClipboard={true} /> -- GitLab