This commit is contained in:
ct
2025-05-29 00:53:19 +08:00
parent 9ca221b63b
commit 9f45790e26
9 changed files with 522 additions and 298 deletions

View File

@@ -0,0 +1,80 @@
import { create } from 'zustand';
import { persist } from 'zustand/middleware';
// Immutable default settings
const defaultSettings = {
genAlphaSlang: true,
// Add more settings here
};
const useLocalSettingsStore = create(
persist(
(set, get) => ({
settings: { ...defaultSettings }, // clone to avoid shared reference
// Get a setting by key
getSetting: (key) => {
const currentSettings = get().settings;
return key in currentSettings ? currentSettings[key] : defaultSettings[key] ?? null;
},
// Set or update a specific setting
setSetting: (key, value) => {
console.log(`Updating setting ${key} to`, value); // <-- Debug log
set((state) => ({
settings: {
...state.settings,
[key]: value,
},
}));
},
// Reset all settings to default
resetSettings: () => {
set({ settings: { ...defaultSettings } }); // create new object reference
},
// Reset a specific setting to its default
resetSetting: (key) => {
set((state) => ({
settings: {
...state.settings,
[key]: defaultSettings[key],
},
}));
},
// Merge default settings with current ones (useful on load)
initializeSettings: () => {
set((state) => ({
settings: {
...defaultSettings,
...state.settings,
},
}));
},
}),
{
name: 'local-settings-storage',
// Ensure only the 'settings' key is stored
partialize: (state) => ({ settings: state.settings }),
// Explicit localStorage usage (for compatibility)
storage: {
getItem: (name) => {
const stored = localStorage.getItem(name);
return stored ? JSON.parse(stored) : null;
},
setItem: (name, value) => {
localStorage.setItem(name, JSON.stringify(value));
},
removeItem: (name) => {
localStorage.removeItem(name);
},
}
}
)
);
export default useLocalSettingsStore;