Projekt

Obecné

Profil

Stáhnout (2.06 KB) Statistiky
| Větev: | Tag: | Revize:
1 41a11178 Vaclav Honzik
import { PaletteMode } from '@mui/material'
2 0d90d67b Vaclav Honzik
import { createTheme, Theme, ThemeProvider } from '@mui/material/styles'
3 41a11178 Vaclav Honzik
import { FunctionComponent, ReactNode, useEffect, useState } from 'react'
4
import { useSelector } from 'react-redux'
5
import { RootState } from '../redux/store'
6 0d90d67b Vaclav Honzik
7
export interface ThemeWrapperProps {
8
    children: ReactNode
9
}
10
11 56018f1c Vaclav Honzik
export const lightThemePalette = {
12
    primary: {
13
        main: '#A28253',
14
    },
15
    secondary: {
16
        main: '#E3DBCF',
17
    },
18
    selected: {
19
        main: '#C0C0C0',
20
    },
21
}
22 41a11178 Vaclav Honzik
23 56018f1c Vaclav Honzik
export const darkThemePalette = {
24
    primary: {
25
        main: '#e0bb84',
26
    },
27
    secondary: {
28
        main: '#E3DBCF',
29
    },
30
}
31 41a11178 Vaclav Honzik
32 56018f1c Vaclav Honzik
export const getPalette = (paletteMode: PaletteMode) => {
33
    switch (paletteMode) {
34
        case 'light':
35
            return lightThemePalette
36
        case 'dark':
37
            return darkThemePalette
38
        default:
39
            return lightThemePalette
40 41a11178 Vaclav Honzik
    }
41 56018f1c Vaclav Honzik
}
42 41a11178 Vaclav Honzik
43 56018f1c Vaclav Honzik
export const buildTheme = (paletteMode: PaletteMode) =>
44 558a15d4 Vaclav Honzik
    createTheme({
45
        palette: {
46
            mode: paletteMode,
47
            ...getPalette(paletteMode),
48
        },
49
        shape: {
50
            borderRadius: 8,
51
        },
52
        typography: {
53
            fontFamily: [
54
                '-apple-system',
55
                'BlinkMacSystemFont',
56
                '"Segoe UI"',
57
                'Roboto',
58
                '"Helvetica Neue"',
59
                'Arial',
60
                'sans-serif',
61
                '"Apple Color Emoji"',
62
                '"Segoe UI Emoji"',
63
                '"Segoe UI Symbol"',
64
            ].join(','),
65
        },
66
    })
67 0d90d67b Vaclav Honzik
68 558a15d4 Vaclav Honzik
/**
69
 * Wraps children in a ThemeProvider with the correct theme
70
 */
71 56018f1c Vaclav Honzik
const ThemeWrapper: FunctionComponent<ThemeWrapperProps> = ({ children }) => {
72 0d90d67b Vaclav Honzik
    const paletteMode = useSelector(
73
        (state: RootState) => state.theme.paletteMode
74
    )
75
76
    const [theme, setTheme] = useState<Theme>(buildTheme(paletteMode))
77
    useEffect(() => {
78
        setTheme(() => {
79
            return buildTheme(paletteMode)
80
        })
81
    }, [paletteMode])
82
83 41a11178 Vaclav Honzik
    return <ThemeProvider theme={theme}>{children}</ThemeProvider>
84 0d90d67b Vaclav Honzik
}
85
86 41a11178 Vaclav Honzik
export default ThemeWrapper