settings-spell-check-language.tsx 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  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 { useEditorContext } from '@/shared/context/editor-context'
  8. import { supportsWebAssembly } from '@/utils/wasm'
  9. export default function SettingsSpellCheckLanguage() {
  10. const { t } = useTranslation()
  11. const { spellCheckLanguage, setSpellCheckLanguage } =
  12. useProjectSettingsContext()
  13. const { permissionsLevel } = useEditorContext()
  14. const optgroup: Optgroup = useMemo(() => {
  15. const options = (getMeta('ol-languages') ?? [])
  16. // only include spell-check languages that are available in the client
  17. .filter(language => language.dic !== undefined)
  18. return {
  19. label: 'Language',
  20. options: options.map(language => ({
  21. value: language.code,
  22. label: language.name,
  23. })),
  24. }
  25. }, [])
  26. return (
  27. <SettingsMenuSelect
  28. onChange={setSpellCheckLanguage}
  29. value={supportsWebAssembly() ? spellCheckLanguage : ''}
  30. options={[{ value: '', label: t('off') }]}
  31. optgroup={optgroup}
  32. label={t('spell_check')}
  33. name="spellCheckLanguage"
  34. disabled={permissionsLevel === 'readOnly' || !supportsWebAssembly()}
  35. />
  36. )
  37. }