use-root-doc.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233
  1. import { useCallback } from 'react'
  2. import { useProjectContext } from '@/shared/context/project-context'
  3. import { useEditorOpenDocContext } from '@/features/ide-react/context/editor-open-doc-context'
  4. import { useFileTreePathContext } from '@/features/file-tree/contexts/file-tree-path'
  5. import { isMainFile } from '@/features/pdf-preview/util/editor-files'
  6. export type RootDocInfo = {
  7. rootDocId: string | null
  8. rootResourcePath: string
  9. }
  10. export function useRootDoc(): () => RootDocInfo {
  11. const { project } = useProjectContext()
  12. const projectRootDocId = project?.rootDocId ?? null
  13. const { currentDocument } = useEditorOpenDocContext()
  14. const { pathInFolder } = useFileTreePathContext()
  15. // Inspecting the document content is too expensive to perform on every update.
  16. // Compute the rootDoc on-demand instead.
  17. return useCallback((): RootDocInfo => {
  18. let rootDocId: string | null = projectRootDocId
  19. if (
  20. currentDocument &&
  21. currentDocument.doc_id !== projectRootDocId &&
  22. isMainFile(currentDocument.getSnapshot())
  23. ) {
  24. rootDocId = currentDocument.doc_id
  25. }
  26. const rootResourcePath =
  27. (rootDocId && pathInFolder(rootDocId)) || 'main.tex'
  28. return { rootDocId, rootResourcePath }
  29. }, [projectRootDocId, currentDocument, pathInFolder])
  30. }