settings-spell-check-language.tsx 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { useMemo } from 'react'
  2. import { useTranslation } from 'react-i18next'
  3. import getMeta from '../../../../utils/meta'
  4. import { useProjectSettingsContext } from '../../context/project-settings-context'
  5. import SettingsMenuSelect from './settings-menu-select'
  6. import type { Optgroup } from './settings-menu-select'
  7. import { useFeatureFlag } from '@/shared/context/split-test-context'
  8. // TODO: set to true when ready to show new languages that are only available in the client
  9. const showClientOnlyLanguages = false
  10. export default function SettingsSpellCheckLanguage() {
  11. const { t } = useTranslation()
  12. const languages = getMeta('ol-languages')
  13. const spellCheckClientEnabled = useFeatureFlag('spell-check-client')
  14. const { spellCheckLanguage, setSpellCheckLanguage } =
  15. useProjectSettingsContext()
  16. const optgroup: Optgroup = useMemo(() => {
  17. const options = (languages ?? []).filter(lang => {
  18. const clientOnly = lang.server === false
  19. if (clientOnly && !showClientOnlyLanguages) {
  20. return false
  21. }
  22. return spellCheckClientEnabled || !clientOnly
  23. })
  24. return {
  25. label: 'Language',
  26. options: options.map(language => ({
  27. value: language.code,
  28. label: language.name,
  29. })),
  30. }
  31. }, [languages, spellCheckClientEnabled])
  32. return (
  33. <SettingsMenuSelect
  34. onChange={setSpellCheckLanguage}
  35. value={spellCheckLanguage}
  36. options={[{ value: '', label: t('off') }]}
  37. optgroup={optgroup}
  38. label={t('spell_check')}
  39. name="spellCheckLanguage"
  40. />
  41. )
  42. }