2020-10-07 09:41:58 -07:00
|
|
|
import * as React from 'react';
|
|
|
|
import { createContext, useContext, useMemo } from 'react';
|
|
|
|
import dynamic from 'next/dynamic';
|
|
|
|
import { CSSReset, ThemeProvider } from '@chakra-ui/core';
|
|
|
|
import { MediaProvider } from './MediaProvider';
|
|
|
|
import { StateProvider } from './StateProvider';
|
|
|
|
import { makeTheme, defaultTheme } from 'app/util';
|
2020-01-19 22:03:47 -07:00
|
|
|
|
|
|
|
// Disable SSR for ColorModeProvider
|
|
|
|
const ColorModeProvider = dynamic(
|
2020-10-07 09:41:58 -07:00
|
|
|
() => import('@chakra-ui/core').then(mod => mod.ColorModeProvider),
|
|
|
|
{ ssr: false },
|
2020-01-19 22:03:47 -07:00
|
|
|
);
|
|
|
|
|
|
|
|
const HyperglassContext = createContext(null);
|
|
|
|
|
|
|
|
export const HyperglassProvider = ({ config, children }) => {
|
2020-04-19 09:50:31 -07:00
|
|
|
const value = useMemo(() => config, [config]);
|
|
|
|
const userTheme = value && makeTheme(value.web.theme);
|
|
|
|
const theme = value ? userTheme : defaultTheme;
|
|
|
|
return (
|
2020-07-05 17:20:10 -07:00
|
|
|
<ThemeProvider theme={theme}>
|
|
|
|
<ColorModeProvider value={config.web.theme.default_color_mode ?? null}>
|
|
|
|
<CSSReset />
|
|
|
|
<MediaProvider theme={theme}>
|
|
|
|
<HyperglassContext.Provider value={value}>
|
2020-04-24 11:41:43 -07:00
|
|
|
<StateProvider>{children}</StateProvider>
|
2020-07-05 17:20:10 -07:00
|
|
|
</HyperglassContext.Provider>
|
|
|
|
</MediaProvider>
|
|
|
|
</ColorModeProvider>
|
|
|
|
</ThemeProvider>
|
2020-04-19 09:50:31 -07:00
|
|
|
);
|
2020-01-19 22:03:47 -07:00
|
|
|
};
|
|
|
|
|
2020-09-28 11:54:00 -07:00
|
|
|
export const useConfig = () => useContext(HyperglassContext);
|