From ca702271925513032706dce24736301a87055e4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chif=20Gerg=C5=91?= <chif.gergo@cloud.bme.hu> Date: Sun, 24 Jan 2021 18:51:20 +0100 Subject: [PATCH] Add ThemeProvider and default theme --- src/context/ThemeProvider.tsx | 29 +++++++++++++++++++++++++++++ src/styled-components.d.ts | 7 +++++++ src/theme.ts | 19 +++++++++++++++++++ 3 files changed, 55 insertions(+) create mode 100644 src/context/ThemeProvider.tsx create mode 100644 src/styled-components.d.ts create mode 100644 src/theme.ts diff --git a/src/context/ThemeProvider.tsx b/src/context/ThemeProvider.tsx new file mode 100644 index 0000000..a32c224 --- /dev/null +++ b/src/context/ThemeProvider.tsx @@ -0,0 +1,29 @@ +import { + createMuiTheme, + StylesProvider, + Theme, + ThemeProvider as MUIThemeProvider, +} from '@material-ui/core/styles'; +import React, { useMemo } from 'react'; +import { ThemeProvider as SCThemeProvider } from 'styled-components'; +import { theme as defaultTheme } from '../theme'; + +export interface ThemeProviderProps { + theme?: Theme; +} + +const ThemeProvider: React.FC<ThemeProviderProps> = ({ theme: themeProp, children }) => { + const theme = useMemo( + () => (themeProp ? createMuiTheme(defaultTheme, themeProp) : defaultTheme), + [themeProp], + ); + return ( + <StylesProvider injectFirst> + <MUIThemeProvider theme={theme}> + <SCThemeProvider theme={theme}>{children}</SCThemeProvider> + </MUIThemeProvider> + </StylesProvider> + ); +}; + +export default ThemeProvider; diff --git a/src/styled-components.d.ts b/src/styled-components.d.ts new file mode 100644 index 0000000..38cc3fd --- /dev/null +++ b/src/styled-components.d.ts @@ -0,0 +1,7 @@ +import { Theme } from '@material-ui/core/styles'; +import 'styled-components'; + +declare module 'styled-components' { + // eslint-disable-next-line @typescript-eslint/no-empty-interface + export interface DefaultTheme extends Theme {} +} diff --git a/src/theme.ts b/src/theme.ts new file mode 100644 index 0000000..4d700eb --- /dev/null +++ b/src/theme.ts @@ -0,0 +1,19 @@ +import { createMuiTheme } from '@material-ui/core'; + +// eslint-disable-next-line import/prefer-default-export +export const theme = createMuiTheme({ + palette: { + primary: {}, + secondary: {}, + error: {}, + success: {}, + info: {}, + warning: {}, + grey: {}, + + text: {}, + }, + typography: { + fontFamily: 'Roboto', + }, +}); -- GitLab