mirror of
https://github.com/jamiepine/voicebox.git
synced 2026-10-03 09:05:17 -07:00
feat(ui): persist selectedProfileId across sessions
Wrap useUIStore in zustand/middleware's persist under the key voicebox-ui. partialize only selectedProfileId so volatile UI state (dialog open flags, form drafts, engine/voice pickers, sidebar) stays in-memory as before — but reopening the app no longer loses whichever profile the user was last working with. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
67a9e308a9
commit
687ab2aa16
@@ -1,4 +1,5 @@
|
|||||||
import { create } from 'zustand';
|
import { create } from 'zustand';
|
||||||
|
import { persist } from 'zustand/middleware';
|
||||||
|
|
||||||
// Draft state for the create voice profile form
|
// Draft state for the create voice profile form
|
||||||
export interface ProfileFormDraft {
|
export interface ProfileFormDraft {
|
||||||
@@ -49,7 +50,9 @@ interface UIStore {
|
|||||||
setTheme: (theme: 'light' | 'dark') => void;
|
setTheme: (theme: 'light' | 'dark') => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const useUIStore = create<UIStore>((set) => ({
|
export const useUIStore = create<UIStore>()(
|
||||||
|
persist(
|
||||||
|
(set) => ({
|
||||||
sidebarOpen: true,
|
sidebarOpen: true,
|
||||||
setSidebarOpen: (open) => set({ sidebarOpen: open }),
|
setSidebarOpen: (open) => set({ sidebarOpen: open }),
|
||||||
|
|
||||||
@@ -78,4 +81,10 @@ export const useUIStore = create<UIStore>((set) => ({
|
|||||||
set({ theme });
|
set({ theme });
|
||||||
document.documentElement.classList.toggle('dark', theme === 'dark');
|
document.documentElement.classList.toggle('dark', theme === 'dark');
|
||||||
},
|
},
|
||||||
}));
|
}),
|
||||||
|
{
|
||||||
|
name: 'voicebox-ui',
|
||||||
|
partialize: (state) => ({ selectedProfileId: state.selectedProfileId }),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user