ThemeProvider.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import React from 'react';
  2. import dynamic from 'next/dynamic';
  3. import { GrowiThemes } from '~/interfaces/theme';
  4. const ThemeAntarctic = dynamic(() => import('../ThemeAntarctic'));
  5. const ThemeBlackboard = dynamic(() => import('../ThemeBlackboard'));
  6. const ThemeChristmas = dynamic(() => import('../ThemeChristmas'));
  7. const ThemeDefault = dynamic(() => import('../ThemeDefault'));
  8. const ThemeJadeGreen = dynamic(() => import('../ThemeJadeGreen'));
  9. const ThemeIsland = dynamic(() => import('../ThemeIsland'));
  10. const ThemeSpring = dynamic(() => import('../ThemeSpring'));
  11. const ThemeNature = dynamic(() => import('../ThemeNature'));
  12. type Props = {
  13. children: JSX.Element,
  14. theme?: GrowiThemes,
  15. }
  16. export const ThemeProvider = ({ theme, children }: Props): JSX.Element => {
  17. switch (theme) {
  18. case GrowiThemes.ANTARCTIC:
  19. return <ThemeAntarctic>{children}</ThemeAntarctic>;
  20. case GrowiThemes.BLACKBOARD:
  21. return <ThemeBlackboard>{children}</ThemeBlackboard>;
  22. case GrowiThemes.CHRISTMAS:
  23. return <ThemeChristmas>{children}</ThemeChristmas>;
  24. case GrowiThemes.JADE_GREEN:
  25. return <ThemeJadeGreen>{children}</ThemeJadeGreen>;
  26. case GrowiThemes.ISLAND:
  27. return <ThemeIsland>{children}</ThemeIsland>;
  28. case GrowiThemes.SPRING:
  29. return <ThemeSpring>{children}</ThemeSpring>;
  30. case GrowiThemes.NATURE:
  31. return <ThemeNature>{children}</ThemeNature>;
  32. default:
  33. return <ThemeDefault>{children}</ThemeDefault>;
  34. }
  35. };