overleaf-cep/services/web/frontend/js/features/editor-left-menu/hooks/use-root-doc-id.tsx
Tim Down 905cc5d45f Move project context out of scope value store (#26615)
* Refactor project context to not use scope store

* Fix Cypress tests for project context changes

* Fix frontend React Testing Library tests for project context changes

* Remove redundant code

* Fix some project types in tests

* Remove unused import and fix a type

* Throw an error if updating the project in the project context before joining the project

* Fix some review panel tests

* Remove unused imports

GitOrigin-RevId: 2f0c928b651f387aa980c29aef7d1ba0649790a7
2025-07-10 08:06:31 +00:00

34 lines
1.2 KiB
TypeScript

import { useCallback } from 'react'
import { useIdeReactContext } from '@/features/ide-react/context/ide-react-context'
import { useProjectContext } from '@/shared/context/project-context'
import type { ProjectSettings } from '../utils/api'
import useSaveProjectSettings from './use-save-project-settings'
export default function useRootDocId() {
const { project } = useProjectContext()
const rootDocId = project?.rootDocId
const { permissionsLevel } = useIdeReactContext()
const saveProjectSettings = useSaveProjectSettings()
const setRootDocIdFunc = useCallback(
async (newRootDocId: ProjectSettings['rootDocId']) => {
// rootDocId will be undefined on angular scope on initialisation
const allowUpdate =
typeof rootDocId !== 'undefined' && permissionsLevel !== 'readOnly'
if (allowUpdate) {
try {
await saveProjectSettings('rootDocId', newRootDocId)
} catch (err) {
// TODO: retry mechanism (max 10x before failed completely and rollback the old value)
}
}
},
[permissionsLevel, rootDocId, saveProjectSettings]
)
return {
rootDocId,
setRootDocId: setRootDocIdFunc,
}
}