85 lines
2.2 KiB
TypeScript
85 lines
2.2 KiB
TypeScript
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);
|
|
},
|
|
}
|
|
|
|
}
|
|
)
|
|
);
|
|
|
|
if (import.meta.env.APP_ENV === "local") {
|
|
mountStoreDevtool("LocalSettingsStore", useLocalSettingsStore);
|
|
}
|
|
|
|
export default useLocalSettingsStore;
|