26 lines
698 B
TypeScript
26 lines
698 B
TypeScript
|
import React from 'react';
|
||
|
import hoistNonReactStatics from 'hoist-non-react-statics';
|
||
|
|
||
|
interface IThemeContextProps {
|
||
|
theme: string,
|
||
|
themePreferences: {
|
||
|
currentTheme: 'automatic' | 'light',
|
||
|
darkLevel: string
|
||
|
},
|
||
|
setTheme: (newTheme?: {}) => void;
|
||
|
}
|
||
|
|
||
|
export const ThemeContext = React.createContext<Partial<IThemeContextProps>>({ theme: 'light' });
|
||
|
|
||
|
export function withTheme(Component: any) {
|
||
|
const ThemedComponent = (props: any) => (
|
||
|
<ThemeContext.Consumer>
|
||
|
{contexts => <Component {...props} {...contexts} />}
|
||
|
</ThemeContext.Consumer>
|
||
|
);
|
||
|
hoistNonReactStatics(ThemedComponent, Component);
|
||
|
return ThemedComponent;
|
||
|
}
|
||
|
|
||
|
export const useTheme = () => React.useContext(ThemeContext);
|