ConfigProvider.tsx 855 B

12345678910111213141516171819202122232425262728
  1. import React from 'react';
  2. import config, { Settings } from 'app/core/config';
  3. import { GrafanaTheme } 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. interface ThemeProviderProps {
  13. children: (theme: GrafanaTheme) => JSX.Element;
  14. }
  15. export const ThemeProvider = ({ children }: ThemeProviderProps) => {
  16. return (
  17. <ConfigConsumer>
  18. {({ bootData }) => {
  19. return children(bootData.user.lightTheme ? GrafanaTheme.Light : GrafanaTheme.Dark);
  20. }}
  21. </ConfigConsumer>
  22. );
  23. };