settings-document.tsx 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. import { useSetCompilationSettingWithEvent } from '../../hooks/use-set-compilation-setting'
  10. export default function SettingsDocument() {
  11. const { t } = useTranslation()
  12. const { write } = usePermissionsContext()
  13. const { docs } = useFileTreeData()
  14. const { rootDocId, setRootDocId } = useProjectSettingsContext()
  15. const changeRootDoc = useSetCompilationSettingWithEvent(
  16. 'root-doc-id',
  17. setRootDocId,
  18. { omitValueInEvent: true }
  19. )
  20. const validDocsOptions = useMemo(() => {
  21. const filteredDocs =
  22. docs?.filter(
  23. doc => isValidTeXFile(doc.doc.name) || rootDocId === doc.doc.id
  24. ) ?? []
  25. const mappedDocs: Array<Option> = filteredDocs.map(doc => ({
  26. value: doc.doc.id,
  27. label: doc.path,
  28. }))
  29. if (!rootDocId) {
  30. mappedDocs.unshift({
  31. value: '',
  32. label: 'None',
  33. disabled: true,
  34. })
  35. }
  36. return mappedDocs
  37. }, [docs, rootDocId])
  38. return (
  39. <SettingsMenuSelect
  40. onChange={changeRootDoc}
  41. value={rootDocId ?? ''}
  42. disabled={!write}
  43. options={validDocsOptions}
  44. label={t('main_document')}
  45. name="rootDocId"
  46. translateOptions="no"
  47. />
  48. )
  49. }