settings-overall-theme.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import { useMemo } from 'react'
  2. import { useTranslation } from 'react-i18next'
  3. import { useLayoutContext } from '../../../../shared/context/layout-context'
  4. import getMeta from '../../../../utils/meta'
  5. import SettingsMenuSelect, { Option } from './settings-menu-select'
  6. import { useProjectSettingsContext } from '../../context/project-settings-context'
  7. import type { OverallThemeMeta } from '../../../../../../types/project-settings'
  8. import { isIEEEBranded } from '@/utils/is-ieee-branded'
  9. import { OverallTheme } from '@/shared/utils/styles'
  10. export default function SettingsOverallTheme() {
  11. const { t } = useTranslation()
  12. const overallThemes = getMeta('ol-overallThemes') as
  13. | OverallThemeMeta[]
  14. | undefined
  15. const { loadingStyleSheet } = useLayoutContext()
  16. const { overallTheme, setOverallTheme } = useProjectSettingsContext()
  17. const options: Array<Option<OverallTheme>> = useMemo(
  18. () =>
  19. overallThemes?.map(({ name, val }) => ({
  20. value: val,
  21. label: name,
  22. })) ?? [],
  23. [overallThemes]
  24. )
  25. if (!overallThemes || isIEEEBranded()) {
  26. return null
  27. }
  28. return (
  29. <SettingsMenuSelect<OverallTheme>
  30. onChange={setOverallTheme}
  31. value={overallTheme}
  32. options={options}
  33. loading={loadingStyleSheet}
  34. label={t('overall_theme')}
  35. name="overallTheme"
  36. />
  37. )
  38. }