overleaf/services/web/frontend/js/features/editor-left-menu/hooks/use-set-spell-check-language.tsx
M Fahru 7475237170 Refactor project-wide settings:
- Change api function argument (readability)
- create a new wrapper hooks for saving the project to both server-side and angular scope
- Implement the new save project settings hooks on project-wide settings update
- On spell check language update function, add new comment to give more context about the decision

GitOrigin-RevId: 93d558d1e1d4db265a943eeb4366842430900c43
2023-01-11 09:09:40 +00:00

31 lines
1.3 KiB
TypeScript

import { useCallback } from 'react'
import useScopeValue from '../../../shared/hooks/use-scope-value'
import { type ProjectSettings, saveUserSettings } from '../utils/api'
import useSaveProjectSettings from './use-save-project-settings'
export default function useSetSpellCheckLanguage() {
const [spellCheckLanguage, setSpellCheckLanguage] = useScopeValue<
ProjectSettings['spellCheckLanguage']
>('project.spellCheckLanguage')
const saveProjectSettings = useSaveProjectSettings()
return useCallback(
(newSpellCheckLanguage: ProjectSettings['spellCheckLanguage']) => {
const allowUpdate =
newSpellCheckLanguage && newSpellCheckLanguage !== spellCheckLanguage
if (allowUpdate) {
setSpellCheckLanguage(newSpellCheckLanguage)
// Save project settings is created from hooks because it will save the value on
// both server-side and client-side (angular scope)
saveProjectSettings('spellCheckLanguage', newSpellCheckLanguage)
// For user settings, we only need to save it on server-side,
// so we import the function directly without hooks
saveUserSettings('spellCheckLanguage', newSpellCheckLanguage)
}
},
[setSpellCheckLanguage, spellCheckLanguage, saveProjectSettings]
)
}