Projekt

Obecné

Profil

Stáhnout (1.52 KB) Statistiky
| Větev: | Tag: | Revize:
1
import { PaletteMode } from "@mui/material"
2
import { createTheme, Theme, ThemeProvider } from '@mui/material/styles'
3
import { FunctionComponent, ReactNode, useEffect, useState } from "react"
4
import { useSelector } from "react-redux"
5
import { RootState } from "../redux/store"
6

    
7
export interface ThemeWrapperProps {
8
    children: ReactNode
9
}
10

    
11
const ThemeWrapper: FunctionComponent<ThemeWrapperProps> = ({ children }) => {
12
    
13
    const buildTheme = (paletteMode: PaletteMode) =>
14
        createTheme({
15
            palette: {
16
                mode: paletteMode,
17
            },
18
            shape: {
19
                borderRadius: 16
20
            },
21
            typography: {
22
                fontFamily: [
23
                    '-apple-system',
24
                    'BlinkMacSystemFont',
25
                    '"Segoe UI"',
26
                    'Roboto',
27
                    '"Helvetica Neue"',
28
                    'Arial',
29
                    'sans-serif',
30
                    '"Apple Color Emoji"',
31
                    '"Segoe UI Emoji"',
32
                    '"Segoe UI Symbol"',
33
                ].join(','),
34
            },
35
        })
36

    
37
    const paletteMode = useSelector(
38
        (state: RootState) => state.theme.paletteMode
39
    )
40

    
41
    const [theme, setTheme] = useState<Theme>(buildTheme(paletteMode))
42
    useEffect(() => {
43
        setTheme(() => {
44
            return buildTheme(paletteMode)
45
        })
46
    }, [paletteMode])
47

    
48
    return (
49
        <ThemeProvider theme={theme}>
50
            {children}
51
            </ThemeProvider>
52
    )
53
}
54

    
55
export default ThemeWrapper
(2-2/3)