mirror of
https://github.com/massbug/judge4c.git
synced 2025-05-18 15:26:33 +00:00
feat(store): add useAdminSettingsStore for managing admin settings
This commit is contained in:
parent
449dfd56f2
commit
1acd915459
39
src/store/useAdminSettingsStore.ts
Normal file
39
src/store/useAdminSettingsStore.ts
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
import { create } from "zustand";
|
||||||
|
import { EditorLanguage } from "@prisma/client";
|
||||||
|
import { createJSONStorage, persist } from "zustand/middleware";
|
||||||
|
import { DEFAULT_EDITOR_LANGUAGE } from "@/config/editor-language";
|
||||||
|
|
||||||
|
interface AdminSettingsState {
|
||||||
|
hydrated: boolean;
|
||||||
|
activeLanguageServerSetting: EditorLanguage;
|
||||||
|
setHydrated: (value: boolean) => void;
|
||||||
|
setActiveLanguageServerSetting: (language: EditorLanguage) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const useAdminSettingsStore = create<AdminSettingsState>()(
|
||||||
|
persist(
|
||||||
|
(set) => ({
|
||||||
|
hydrated: false,
|
||||||
|
activeLanguageServerSetting: DEFAULT_EDITOR_LANGUAGE,
|
||||||
|
setHydrated: (value) => set({ hydrated: value }),
|
||||||
|
setActiveLanguageServerSetting: (language) =>
|
||||||
|
set({ activeLanguageServerSetting: language }),
|
||||||
|
}),
|
||||||
|
{
|
||||||
|
name: "settings-admin",
|
||||||
|
storage: createJSONStorage(() => localStorage),
|
||||||
|
partialize: (state) => ({
|
||||||
|
activeLanguageServerSetting: state.activeLanguageServerSetting,
|
||||||
|
}),
|
||||||
|
onRehydrateStorage: () => {
|
||||||
|
return (state, error) => {
|
||||||
|
if (error) {
|
||||||
|
console.error("An error happened during hydration", error);
|
||||||
|
} else if (state) {
|
||||||
|
state.setHydrated(true);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
);
|
Loading…
Reference in New Issue
Block a user