hedgedoc/frontend/src/redux/editor-config/methods.ts
Erik Michelson d840a6f0b1 refactor(redux): migrate to RTK2 store definition
Signed-off-by: Erik Michelson <github@erik.michelson.eu>
2024-04-09 10:55:38 +02:00

77 lines
2.5 KiB
TypeScript

/*
* SPDX-FileCopyrightText: 2024 The HedgeDoc developers (see AUTHORS file)
*
* SPDX-License-Identifier: AGPL-3.0-only
*/
import { store } from '..'
import { editorConfigActionsCreator } from './slice'
import type { EditorConfig } from './types'
import { initialState } from './initial-state'
import { updateObject } from '../../utils/update-object'
import { Logger } from '../../utils/logger'
const log = new Logger('Redux > EditorConfig')
export const setEditorSyncScroll = (syncScroll: boolean): void => {
const action = editorConfigActionsCreator.setSyncScroll(syncScroll)
store.dispatch(action)
saveToLocalStorage()
}
export const setEditorLineWrapping = (lineWrapping: boolean): void => {
const action = editorConfigActionsCreator.setLineWrapping(lineWrapping)
store.dispatch(action)
saveToLocalStorage()
}
export const setEditorLigatures = (ligatures: boolean): void => {
const action = editorConfigActionsCreator.setLigatures(ligatures)
store.dispatch(action)
saveToLocalStorage()
}
export const setEditorSmartPaste = (smartPaste: boolean): void => {
const action = editorConfigActionsCreator.setSmartPaste(smartPaste)
store.dispatch(action)
saveToLocalStorage()
}
export const setEditorSpellCheck = (spellCheck: boolean): void => {
const action = editorConfigActionsCreator.setSpellCheck(spellCheck)
store.dispatch(action)
saveToLocalStorage()
}
export const setEditorIndentWithTabs = (indentWithTabs: boolean): void => {
const action = editorConfigActionsCreator.setIndentWithTabs(indentWithTabs)
store.dispatch(action)
saveToLocalStorage()
}
export const setEditorIndentSpaces = (indentSpaces: number): void => {
const action = editorConfigActionsCreator.setIndentSpaces(indentSpaces)
store.dispatch(action)
saveToLocalStorage()
}
export const loadFromLocalStorage = (): void => {
try {
const config = { ...initialState }
const stored = window.localStorage.getItem('editorConfig')
const parsed = stored ? (JSON.parse(stored) as Partial<EditorConfig>) : null
updateObject(config, parsed)
const action = editorConfigActionsCreator.setEditorConfig(config)
store.dispatch(action)
} catch (error) {
log.error('Failed to load editor config from local storage', error)
}
}
const saveToLocalStorage = (): void => {
try {
const state = store.getState()
window.localStorage.setItem('editorConfig', JSON.stringify(state.editorConfig))
} catch (error) {
log.error('Failed to save editor config to local storage', error)
}
}