2020-10-18 14:47:33 -07:00
|
|
|
import { createContext, useContext, useMemo } from 'react';
|
2020-11-03 01:51:41 -07:00
|
|
|
import { ChakraProvider, useTheme as useChakraTheme } from '@chakra-ui/core';
|
2020-10-18 14:47:33 -07:00
|
|
|
import { makeTheme, defaultTheme } from '~/util';
|
|
|
|
|
2020-11-03 01:51:41 -07:00
|
|
|
import type { IConfig, ITheme } from '~/types';
|
2020-10-18 14:47:33 -07:00
|
|
|
import type { IHyperglassProvider } from './types';
|
|
|
|
|
|
|
|
const HyperglassContext = createContext<IConfig>(Object());
|
|
|
|
|
|
|
|
export const HyperglassProvider = (props: IHyperglassProvider) => {
|
|
|
|
const { config, children } = props;
|
|
|
|
const value = useMemo(() => config, []);
|
|
|
|
const userTheme = value && makeTheme(value.web.theme);
|
|
|
|
const theme = value ? userTheme : defaultTheme;
|
|
|
|
return (
|
|
|
|
<ChakraProvider theme={theme}>
|
|
|
|
<HyperglassContext.Provider value={value}>{children}</HyperglassContext.Provider>
|
|
|
|
</ChakraProvider>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
export const useConfig = () => useContext(HyperglassContext);
|
2020-11-03 01:51:41 -07:00
|
|
|
export const useTheme = (): ITheme => useChakraTheme();
|
|
|
|
export { useColorModeValue as useColorValue } from '@chakra-ui/core';
|