use-root-doc-id.tsx 1.0 KB

1234567891011121314151617181920212223242526272829303132
  1. import { useCallback } from 'react'
  2. import { useIdeReactContext } from '@/features/ide-react/context/ide-react-context'
  3. import { useProjectContext } from '@/shared/context/project-context'
  4. import type { ProjectSettings } from '../utils/api'
  5. import useSaveProjectSettings from './use-save-project-settings'
  6. export default function useRootDocId() {
  7. const { project } = useProjectContext()
  8. const rootDocId = project?.rootDocId
  9. const { permissionsLevel } = useIdeReactContext()
  10. const saveProjectSettings = useSaveProjectSettings()
  11. const setRootDocIdFunc = useCallback(
  12. async (newRootDocId: ProjectSettings['rootDocId']) => {
  13. const allowUpdate = permissionsLevel !== 'readOnly'
  14. if (allowUpdate) {
  15. try {
  16. await saveProjectSettings('rootDocId', newRootDocId)
  17. } catch (err) {
  18. // TODO: retry mechanism (max 10x before failed completely and rollback the old value)
  19. }
  20. }
  21. },
  22. [permissionsLevel, saveProjectSettings]
  23. )
  24. return {
  25. rootDocId,
  26. setRootDocId: setRootDocIdFunc,
  27. }
  28. }