2019-01-18 02:50:29 -06:00
|
|
|
import React from 'react';
|
|
|
|
import config, { Settings } from 'app/core/config';
|
2019-02-05 10:04:48 -06:00
|
|
|
import { GrafanaThemeType, ThemeContext, getTheme } from '@grafana/ui';
|
2019-01-18 02:50:29 -06:00
|
|
|
|
|
|
|
export const ConfigContext = React.createContext<Settings>(config);
|
|
|
|
export const ConfigConsumer = ConfigContext.Consumer;
|
|
|
|
|
|
|
|
export const provideConfig = (component: React.ComponentType<any>) => {
|
|
|
|
const ConfigProvider = (props: any) => (
|
|
|
|
<ConfigContext.Provider value={config}>{React.createElement(component, { ...props })}</ConfigContext.Provider>
|
|
|
|
);
|
|
|
|
|
|
|
|
return ConfigProvider;
|
|
|
|
};
|
|
|
|
|
2019-02-05 10:04:48 -06:00
|
|
|
export const getCurrentThemeName = () =>
|
|
|
|
config.bootData.user.lightTheme ? GrafanaThemeType.Light : GrafanaThemeType.Dark;
|
2019-01-18 02:50:29 -06:00
|
|
|
|
2019-02-05 10:04:48 -06:00
|
|
|
export const getCurrentTheme = () => getTheme(getCurrentThemeName());
|
2019-01-18 02:50:29 -06:00
|
|
|
|
2019-02-05 10:04:48 -06:00
|
|
|
export const ThemeProvider = ({ children }: { children: React.ReactNode }) => {
|
2019-01-18 02:50:29 -06:00
|
|
|
return (
|
|
|
|
<ConfigConsumer>
|
2019-02-05 10:04:48 -06:00
|
|
|
{config => {
|
2019-02-06 08:06:27 -06:00
|
|
|
return <ThemeContext.Provider value={getCurrentTheme()}>{children}</ThemeContext.Provider>;
|
2019-01-18 02:50:29 -06:00
|
|
|
}}
|
|
|
|
</ConfigConsumer>
|
|
|
|
);
|
|
|
|
};
|
2019-02-05 10:04:48 -06:00
|
|
|
|
|
|
|
export const provideTheme = (component: React.ComponentType<any>) => {
|
|
|
|
return provideConfig((props: any) => <ThemeProvider>{React.createElement(component, { ...props })}</ThemeProvider>);
|
|
|
|
};
|