settings-document.tsx 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { useMemo } from 'react'
  2. import { useTranslation } from 'react-i18next'
  3. import { isValidTeXFile } from '../../../../main/is-valid-tex-file'
  4. import { usePermissionsContext } from '@/features/ide-react/context/permissions-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 { write } = usePermissionsContext()
  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. if (!rootDocId) {
  24. mappedDocs.unshift({
  25. value: '',
  26. label: 'None',
  27. disabled: true,
  28. })
  29. }
  30. return mappedDocs
  31. }, [docs, rootDocId])
  32. return (
  33. <SettingsMenuSelect
  34. onChange={setRootDocId}
  35. value={rootDocId ?? ''}
  36. disabled={!write}
  37. options={validDocsOptions}
  38. label={t('main_document')}
  39. name="rootDocId"
  40. />
  41. )
  42. }