Files
overleaf-cep/services/web/frontend/js/features/ide-settings/components/compiler-settings/root-document-setting.tsx
T
Mathias Jakobsen 3a3adf5e5a Merge pull request #34980 from overleaf/mj-ide-settings-feature
[web] Consolidate ide settings in `features/ide-settings`

GitOrigin-RevId: cbf0ff069399f418d8cb0d8165628df190046ea9
2026-09-17 11:13:11 +00:00

57 lines
1.8 KiB
TypeScript

import { useProjectSettingsContext } from '@/features/ide-settings/context/project-settings-context'
import DropdownSetting from '../dropdown-setting'
import { useMemo } from 'react'
import type { Option } from '../dropdown-setting'
import { useTranslation } from 'react-i18next'
import { usePermissionsContext } from '@/features/ide-react/context/permissions-context'
import { useFileTreeData } from '@/shared/context/file-tree-data-context'
import { isValidTeXFile } from '@/main/is-valid-tex-file'
import { useSetCompilationSettingWithEvent } from '@/features/ide-settings/hooks/use-set-compilation-setting'
export default function RootDocumentSetting() {
const { rootDocId, setRootDocId } = useProjectSettingsContext()
const { t } = useTranslation()
const { write } = usePermissionsContext()
const { docs } = useFileTreeData()
const changeRootDocId = useSetCompilationSettingWithEvent(
'root-doc-id',
setRootDocId,
{ omitValueInEvent: true }
)
const validDocsOptions = useMemo(() => {
const filteredDocs =
docs?.filter(
doc => isValidTeXFile(doc.doc.name) || rootDocId === doc.doc.id
) ?? []
const mappedDocs: Array<Option> = filteredDocs.map(doc => ({
value: doc.doc.id,
label: doc.path,
}))
if (!rootDocId) {
mappedDocs.unshift({
value: '',
label: 'None',
disabled: true,
})
}
return mappedDocs
}, [docs, rootDocId])
return (
<DropdownSetting
id="rootDocId"
label={t('main_document')}
description={`${t('the_primary_file_for_compiling_your_project')} ${t('you_can_also_right_click_a_file_to_set_it_as_main')}`}
disabled={!write}
options={validDocsOptions}
onChange={changeRootDocId}
value={rootDocId ?? ''}
translateOptions="no"
/>
)
}