ConfigProvider.tsx 1.2 KB

1234567891011121314151617181920212223242526272829303132
  1. import React from 'react';
  2. import config, { Settings } from 'app/core/config';
  3. import { GrafanaThemeType, ThemeContext, getTheme } from '@grafana/ui';
  4. export const ConfigContext = React.createContext<Settings>(config);
  5. export const ConfigConsumer = ConfigContext.Consumer;
  6. export const provideConfig = (component: React.ComponentType<any>) => {
  7. const ConfigProvider = (props: any) => (
  8. <ConfigContext.Provider value={config}>{React.createElement(component, { ...props })}</ConfigContext.Provider>
  9. );
  10. return ConfigProvider;
  11. };
  12. export const getCurrentThemeName = () =>
  13. config.bootData.user.lightTheme ? GrafanaThemeType.Light : GrafanaThemeType.Dark;
  14. export const getCurrentTheme = () => getTheme(getCurrentThemeName());
  15. export const ThemeProvider = ({ children }: { children: React.ReactNode }) => {
  16. return (
  17. <ConfigConsumer>
  18. {config => {
  19. return <ThemeContext.Provider value={getCurrentTheme()}>{children}</ThemeContext.Provider>;
  20. }}
  21. </ConfigConsumer>
  22. );
  23. };
  24. export const provideTheme = (component: React.ComponentType<any>) => {
  25. return provideConfig((props: any) => <ThemeProvider>{React.createElement(component, { ...props })}</ThemeProvider>);
  26. };