jan/web-app/src/hooks/useCodeblock.ts
2025-05-20 10:49:57 +07:00

47 lines
1.2 KiB
TypeScript

import { create } from 'zustand'
import { persist, createJSONStorage } from 'zustand/middleware'
import { localStorageKey } from '@/constants/localStorage'
export type CodeBlockStyle = string
interface CodeBlockState {
codeBlockStyle: CodeBlockStyle
showLineNumbers: boolean
setCodeBlockStyle: (style: CodeBlockStyle) => void
setShowLineNumbers: (show: boolean) => void
resetCodeBlockStyle: () => void
}
const defaultCodeBlockStyle: CodeBlockStyle = 'vsc-dark-plus'
const defaultShowLineNumbers: boolean = true
export const useCodeblock = create<CodeBlockState>()(
persist(
(set) => {
return {
codeBlockStyle: defaultCodeBlockStyle,
showLineNumbers: defaultShowLineNumbers,
setCodeBlockStyle: (style: CodeBlockStyle) => {
set({ codeBlockStyle: style })
},
setShowLineNumbers: (show: boolean) => {
set({ showLineNumbers: show })
},
resetCodeBlockStyle: () => {
set({
codeBlockStyle: defaultCodeBlockStyle,
showLineNumbers: defaultShowLineNumbers,
})
},
}
},
{
name: localStorageKey.settingCodeBlock,
storage: createJSONStorage(() => localStorage),
}
)
)