feat(problem-store): add WebSocket to store and update actions

This commit is contained in:
cfngc4594 2025-03-23 23:47:36 +08:00
parent 6df93de3ca
commit 3fbec8cd24

View File

@ -7,12 +7,11 @@ import type {
import type { editor } from "monaco-editor"; import type { editor } from "monaco-editor";
import { createStore } from "zustand/vanilla"; import { createStore } from "zustand/vanilla";
import { createJSONStorage, persist } from "zustand/middleware"; import { createJSONStorage, persist } from "zustand/middleware";
import type { MonacoLanguageClient } from "monaco-languageclient";
export type ProblemState = { export type ProblemState = {
hydrated: boolean; hydrated: boolean;
editor: editor.IStandaloneCodeEditor | null; editor: editor.IStandaloneCodeEditor | null;
monacoLanguageClient: MonacoLanguageClient | null; webSocket: WebSocket | null;
globalLang: EditorLanguage; globalLang: EditorLanguage;
currentLang: EditorLanguage; currentLang: EditorLanguage;
currentValue: string; currentValue: string;
@ -25,7 +24,7 @@ export type ProblemState = {
export type ProblemActions = { export type ProblemActions = {
setHydrated: (value: boolean) => void; setHydrated: (value: boolean) => void;
setEditor: (editor: editor.IStandaloneCodeEditor) => void; setEditor: (editor: editor.IStandaloneCodeEditor) => void;
setMonacoLanguageClient: (client: MonacoLanguageClient | null) => void; setWebSocket: (webSocket: WebSocket | null) => void;
setGlobalLang: (lang: EditorLanguage) => void; setGlobalLang: (lang: EditorLanguage) => void;
setCurrentLang: (lang: EditorLanguage) => void; setCurrentLang: (lang: EditorLanguage) => void;
setCurrentValue: (value: string) => void; setCurrentValue: (value: string) => void;
@ -40,7 +39,7 @@ export const createProblemStore = (initState: ProblemState) => {
...initState, ...initState,
setHydrated: (value) => set({ hydrated: value }), setHydrated: (value) => set({ hydrated: value }),
setEditor: (editor) => set({ editor }), setEditor: (editor) => set({ editor }),
setMonacoLanguageClient: (client) => set({ monacoLanguageClient: client }), setWebSocket: (webSocket) => set({ webSocket }),
setGlobalLang: (lang) => set({ globalLang: lang }), setGlobalLang: (lang) => set({ globalLang: lang }),
setCurrentLang: (lang) => set({ currentLang: lang }), setCurrentLang: (lang) => set({ currentLang: lang }),
setCurrentValue: (value) => set({ currentValue: value }), setCurrentValue: (value) => set({ currentValue: value }),
@ -51,14 +50,12 @@ export const createProblemStore = (initState: ProblemState) => {
partialize: (state) => ({ partialize: (state) => ({
globalLang: state.globalLang, globalLang: state.globalLang,
}), }),
onRehydrateStorage: () => { onRehydrateStorage: () => (state, error) => {
return (state, error) => {
if (error) { if (error) {
console.error("An error happened during hydration", error); console.error("An error happened during hydration", error);
} else if (state) { } else if (state) {
state.setHydrated(true); state.setHydrated(true);
} }
};
}, },
} }
) )