2022-11-26 05:13:07 +11:00
|
|
|
import create from 'zustand'
|
2022-11-26 08:34:23 +11:00
|
|
|
import { addLineHighlight, EditorView } from './editor/highlightextension'
|
2022-11-26 05:13:07 +11:00
|
|
|
|
|
|
|
export type Range = [number, number]
|
|
|
|
|
|
|
|
interface StoreState {
|
2022-11-26 08:34:23 +11:00
|
|
|
editorView: EditorView | null
|
|
|
|
setEditorView: (editorView: EditorView) => void
|
|
|
|
highlightRange: [number, number]
|
|
|
|
setHighlightRange: (range: Range) => void
|
|
|
|
selectionRange: [number, number]
|
|
|
|
setSelectionRange: (range: Range) => void
|
2022-11-26 05:13:07 +11:00
|
|
|
}
|
|
|
|
|
|
|
|
export const useStore = create<StoreState>()((set, get) => ({
|
2022-11-26 08:34:23 +11:00
|
|
|
editorView: null,
|
|
|
|
setEditorView: (editorView) => {
|
|
|
|
set({ editorView })
|
|
|
|
},
|
|
|
|
highlightRange: [0, 0],
|
|
|
|
setHighlightRange: (highlightRange) => {
|
|
|
|
set({ highlightRange })
|
|
|
|
const editorView = get().editorView
|
|
|
|
if (editorView) {
|
|
|
|
editorView.dispatch({ effects: addLineHighlight.of(highlightRange) })
|
|
|
|
}
|
|
|
|
},
|
|
|
|
selectionRange: [0, 0],
|
|
|
|
setSelectionRange: (selectionRange) => {
|
|
|
|
set({ selectionRange })
|
|
|
|
},
|
2022-11-26 05:13:07 +11:00
|
|
|
}))
|