settings-document.tsx 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  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 { useProjectSettingsContext } from '../../context/project-settings-context'
  6. import SettingsMenuSelect from './settings-menu-select'
  7. import type { Option } from './settings-menu-select'
  8. import { useFileTreeData } from '@/shared/context/file-tree-data-context'
  9. export default function SettingsDocument() {
  10. const { t } = useTranslation()
  11. const { permissionsLevel } = useEditorContext()
  12. const { docs } = useFileTreeData()
  13. const { rootDocId, setRootDocId } = useProjectSettingsContext()
  14. const validDocsOptions = useMemo(() => {
  15. const filteredDocs =
  16. docs?.filter(
  17. doc => isValidTeXFile(doc.doc.name) || rootDocId === doc.doc.id
  18. ) ?? []
  19. const mappedDocs: Array<Option> = filteredDocs.map(doc => ({
  20. value: doc.doc.id,
  21. label: doc.path,
  22. }))
  23. return mappedDocs
  24. }, [docs, rootDocId])
  25. if (permissionsLevel === 'readOnly') {
  26. return null
  27. }
  28. return (
  29. <SettingsMenuSelect
  30. onChange={setRootDocId}
  31. value={rootDocId}
  32. options={validDocsOptions}
  33. label={t('main_document')}
  34. name="rootDocId"
  35. />
  36. )
  37. }