Website/db/app/core/components/JsonTheme.tsx
Mangiang 959c5fb0a6
Some checks failed
continuous-integration/drone/push Build is failing
fix: Fix theme handling
2021-12-19 12:51:52 -05:00

75 lines
1.9 KiB
TypeScript

import {
Box,
FormControl,
MenuItem,
Select,
Theme,
} from '@mui/material'
import { makeStyles } from '@mui/styles'
import { ReactJsonViewThemes } from '../state/ReactJsonViewThemes'
import { LocalStorageKeys } from '../dto/SaveKeys'
import { useGlobalState } from '../state/GlobalState'
import { useCallback, useEffect, useState } from 'react';
const useStyles = makeStyles((theme: Theme) => ({
jsonHolder: {
display: 'flex',
flexGrow: 1,
padding: '0 0.5vw 0 0.5vw'
},
select: {
display: 'flex',
flexGrow: 1
}
}))
export const JsonTheme = () => {
const [mounted, setMounted] = useState(false)
const classes = useStyles()
const [preferedJsonViewerTheme, setPreferedJsonViewerTheme] = useGlobalState(
useCallback(
(state) => [
state.preferedJsonViewerTheme,
state.setPreferedJsonViewerTheme,
],
[],
),
)
useEffect(() => setMounted(true), [])
if (!mounted) return null
return (
<>
<Box className={classes.jsonHolder}>
<FormControl fullWidth variant="standard">
<Select
displayEmpty
className={classes.select}
labelId="react-json-view-theme"
value={preferedJsonViewerTheme}
label="JSON theme"
onChange={(evt) => {
setPreferedJsonViewerTheme(evt.target.value)
localStorage.setItem(
LocalStorageKeys.PREFERED_JSON_THEME,
evt.target.value,
)
}}
id="json-selector"
>
<MenuItem disabled value="">
<em>JSON theme</em>
</MenuItem>
{ReactJsonViewThemes.map((theme, idx) => (
<MenuItem key={idx} value={theme}>
{theme}
</MenuItem>
))}
</Select>
</FormControl>
</Box>
</>
)
}