feat(store): persist language setting in code editor state

This commit is contained in:
cfngc4594 2025-03-01 23:14:29 +08:00
parent 10a0c7ab99
commit 1893faad00

View File

@ -3,6 +3,7 @@ import * as monaco from "monaco-editor";
import { CODE_EDITOR_OPTIONS } from "@/constants/option"; import { CODE_EDITOR_OPTIONS } from "@/constants/option";
import { SupportedLanguage } from "@/constants/language"; import { SupportedLanguage } from "@/constants/language";
import { MonacoLanguageClient } from "monaco-languageclient"; import { MonacoLanguageClient } from "monaco-languageclient";
import { persist, createJSONStorage } from "zustand/middleware";
import { DEFAULT_EDITOR_LANGUAGE } from "@/config/editor/language"; import { DEFAULT_EDITOR_LANGUAGE } from "@/config/editor/language";
interface CodeEditorState { interface CodeEditorState {
@ -18,18 +19,27 @@ interface CodeEditorState {
setResult: (result: string) => void; setResult: (result: string) => void;
} }
export const useCodeEditorState = create<CodeEditorState>((set) => ({ export const useCodeEditorState = create<CodeEditorState>()(
editor: null, persist(
language: DEFAULT_EDITOR_LANGUAGE, (set) => ({
languageClient: null, editor: null,
loading: true, language: DEFAULT_EDITOR_LANGUAGE,
result: null, languageClient: null,
setEditor: (editor) => set({ editor }), loading: true,
setLanguage: (language) => set({ language }), result: null,
setLanguageClient: (languageClient) => set({ languageClient }), setEditor: (editor) => set({ editor }),
setLoading: (loading) => set({ loading }), setLanguage: (language) => set({ language }),
setResult: (result) => set({ result }), setLanguageClient: (languageClient) => set({ languageClient }),
})); setLoading: (loading) => set({ loading }),
setResult: (result) => set({ result }),
}),
{
name: "code-editor-language",
storage: createJSONStorage(() => localStorage),
partialize: (state) => ({ language: state.language }),
}
)
);
export const useCodeEditorOption = create<monaco.editor.IEditorConstructionOptions>((set) => ({ export const useCodeEditorOption = create<monaco.editor.IEditorConstructionOptions>((set) => ({
fontSize: CODE_EDITOR_OPTIONS.fontSize, fontSize: CODE_EDITOR_OPTIONS.fontSize,