settings-document.tsx 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import { useMemo } from 'react'
  2. import { useTranslation } from 'react-i18next'
  3. import isValidTeXFile from '../../../../main/is-valid-tex-file'
  4. import { useEditorContext } from '../../../../shared/context/editor-context'
  5. import useScopeValue from '../../../../shared/hooks/use-scope-value'
  6. import { useProjectSettingsContext } from '../../context/project-settings-context'
  7. import SettingsMenuSelect from './settings-menu-select'
  8. import type { Option } from './settings-menu-select'
  9. import type { MainDocument } from '../../../../../../types/project-settings'
  10. export default function SettingsDocument() {
  11. const { t } = useTranslation()
  12. const { permissionsLevel } = useEditorContext()
  13. const [docs] = useScopeValue<MainDocument[] | undefined>('docs')
  14. const { rootDocId, setRootDocId } = useProjectSettingsContext()
  15. const validDocsOptions = useMemo(() => {
  16. const filteredDocs =
  17. docs?.filter(
  18. doc => isValidTeXFile(doc.doc.name) || rootDocId === doc.doc.id
  19. ) ?? []
  20. const mappedDocs: Array<Option> = filteredDocs.map(doc => ({
  21. value: doc.doc.id,
  22. label: doc.path,
  23. }))
  24. return mappedDocs
  25. }, [docs, rootDocId])
  26. if (permissionsLevel === 'readOnly') {
  27. return null
  28. }
  29. return (
  30. <SettingsMenuSelect
  31. onChange={setRootDocId}
  32. value={rootDocId}
  33. options={validDocsOptions}
  34. label={t('main_document')}
  35. name="rootDocId"
  36. />
  37. )
  38. }