themecontext.tsx 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import React, { Dispatch, SetStateAction, useEffect, useRef, useState } from 'react';
  2. import { Session } from '../services';
  3. // TODO dynamic theming
  4. import 'primereact/resources/themes/bootstrap4-dark-blue/theme.css';
  5. import 'primereact/resources/primereact.min.css';
  6. import "primeicons/primeicons.css";
  7. import "primeflex/primeflex.css"
  8. const ThemeContext = React.createContext<{
  9. darkMode: boolean;
  10. setDarkMode: Dispatch<SetStateAction<boolean>>;
  11. }>({ darkMode: false, setDarkMode: () => false });
  12. export const ThemeProvider = ({ children }: { children: any }) => {
  13. const [darkMode, setDarkMode] = useState<boolean>(Session.theme() === 'dark');
  14. const refDarkMode = useRef<boolean>();
  15. refDarkMode.current = darkMode;
  16. useEffect(() => {
  17. Session.setTheme(refDarkMode.current ? 'dark' : 'light');
  18. // window.location.reload();
  19. }, [darkMode]);
  20. //if (darkMode) {
  21. // import('primereact/resources/themes/bootstrap4-dark-blue/theme.css');
  22. //} else {
  23. // import('primereact/resources/themes/bootstrap4-light-blue/theme.css');
  24. //}
  25. return (
  26. <>
  27. <ThemeContext.Provider value={{ darkMode, setDarkMode }}>
  28. {children}
  29. </ThemeContext.Provider>
  30. </>
  31. );
  32. };
  33. export default ThemeContext;