settings-document.tsx 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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 { useProjectContext } from '../../../../shared/context/project-context'
  6. import useScopeValue from '../../../../shared/hooks/use-scope-value'
  7. import SettingsMenuSelect from './settings-menu-select'
  8. import type { Option } from './settings-menu-select'
  9. type Doc = {
  10. doc: {
  11. name: string
  12. id: string
  13. type: string
  14. selected: boolean
  15. }
  16. path: string
  17. }
  18. export default function SettingsDocument() {
  19. const { t } = useTranslation()
  20. const { permissionsLevel } = useEditorContext()
  21. const { rootDocId } = useProjectContext()
  22. const [docs] = useScopeValue<Doc[] | undefined>('docs')
  23. const validDocsOptions = useMemo(() => {
  24. const filteredDocs =
  25. docs?.filter(
  26. doc => isValidTeXFile(doc.doc.name) || rootDocId === doc.doc.id
  27. ) ?? []
  28. const mappedDocs: Array<Option> = filteredDocs.map(doc => ({
  29. value: doc.doc.id,
  30. label: doc.doc.name,
  31. }))
  32. return mappedDocs
  33. }, [docs, rootDocId])
  34. if (permissionsLevel === 'readOnly') {
  35. return null
  36. }
  37. return (
  38. <SettingsMenuSelect
  39. options={validDocsOptions}
  40. label={t('main_document')}
  41. name="rootDoc_id"
  42. />
  43. )
  44. }