use-switch-enable-new-editor-state.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import { postJSON } from '@/infrastructure/fetch-json'
  2. import { useUserSettingsContext } from '@/shared/context/user-settings-context'
  3. import { useCallback, useState } from 'react'
  4. export const useSwitchEnableNewEditorState = () => {
  5. const [loading, setLoading] = useState(false)
  6. const [error, setError] = useState('')
  7. const { setUserSettings } = useUserSettingsContext()
  8. const setEditorRedesignStatus = useCallback(
  9. (status: boolean): Promise<void> => {
  10. setLoading(true)
  11. setError('')
  12. return new Promise((resolve, reject) => {
  13. postJSON('/user/settings', {
  14. body: { enableNewEditor: status },
  15. })
  16. .then(() => {
  17. setUserSettings(current => ({
  18. ...current,
  19. enableNewEditor: status,
  20. }))
  21. resolve()
  22. })
  23. .catch(e => {
  24. setError('Failed to update settings')
  25. reject(e)
  26. })
  27. .finally(() => {
  28. setLoading(false)
  29. })
  30. })
  31. },
  32. [setUserSettings]
  33. )
  34. return { loading, error, setEditorRedesignStatus }
  35. }