overleaf/services/web/frontend/js/features/editor-left-menu/hooks/use-set-project-wide-settings.tsx
M Fahru 132bb40a21 replace save project setting hooks with common function and implement set root doc id change
GitOrigin-RevId: e5b204cd93fc188288def529cb22018b3d4f89b6
2023-01-11 09:06:40 +00:00

59 lines
1.7 KiB
TypeScript

import { useCallback } from 'react'
import { ProjectCompiler } from '../../../../../types/project-settings'
import { useProjectContext } from '../../../shared/context/project-context'
import useScopeValue from '../../../shared/hooks/use-scope-value'
import { ProjectSettingsScope, saveProjectSettings } from '../utils/api'
import useSetRootDocId from './use-set-root-doc-id'
// TODO: handle ignoreUpdates
export default function useSetProjectWideSettings() {
// The value will be undefined on mount
const [project, setProject] = useScopeValue<ProjectSettingsScope | undefined>(
'project',
true
)
const { _id: projectId } = useProjectContext()
const setCompiler = useCallback(
(compiler: ProjectCompiler) => {
if (project?.compiler) {
setProject({ ...project, compiler })
saveProjectSettings(projectId, { compiler })
}
},
[projectId, project, setProject]
)
const setImageName = useCallback(
(imageName: string) => {
if (project?.imageName) {
setProject({ ...project, imageName })
saveProjectSettings(projectId, { imageName })
}
},
[projectId, project, setProject]
)
const setRootDocId = useSetRootDocId()
const setSpellCheckLanguage = useCallback(
(spellCheckLanguage: string) => {
if (project?.spellCheckLanguage) {
setProject({ ...project, spellCheckLanguage })
saveProjectSettings(projectId, { spellCheckLanguage })
}
},
[projectId, project, setProject]
)
return {
compiler: project?.compiler,
setCompiler,
imageName: project?.imageName,
setImageName,
rootDocId: project?.rootDoc_id,
setRootDocId,
spellCheckLanguage: project?.spellCheckLanguage,
setSpellCheckLanguage,
}
}