feat(state): nav panel store and expanded prefs
This commit is contained in:
@@ -16,6 +16,8 @@ export interface StoryLogEntry {
|
||||
choiceLabel?: string;
|
||||
}
|
||||
|
||||
export type ActivePanel = 'play' | 'story' | 'settings' | 'about';
|
||||
|
||||
export interface GameStoreState extends GameView {
|
||||
log: string[];
|
||||
storyPanelOpen: boolean;
|
||||
@@ -23,6 +25,8 @@ export interface GameStoreState extends GameView {
|
||||
storyLog: StoryLogEntry[];
|
||||
prefs: GamePrefs;
|
||||
settingsOpen: boolean;
|
||||
activePanel: ActivePanel;
|
||||
selectedStoryNodeId: string | null;
|
||||
setView: (view: GameView) => void;
|
||||
appendLog: (line: string) => void;
|
||||
appendStoryLog: (entry: StoryLogEntry) => void;
|
||||
@@ -30,6 +34,9 @@ export interface GameStoreState extends GameView {
|
||||
setStoryHasUnread: (unread: boolean) => void;
|
||||
setPrefs: (partial: Partial<GamePrefs>) => void;
|
||||
setSettingsOpen: (open: boolean) => void;
|
||||
setActivePanel: (panel: ActivePanel) => void;
|
||||
setSelectedStoryNodeId: (id: string | null) => void;
|
||||
toggleActionGroupCollapsed: (groupKey: string) => void;
|
||||
}
|
||||
|
||||
export const useGameStore = create<GameStoreState>((set) => ({
|
||||
@@ -48,6 +55,8 @@ export const useGameStore = create<GameStoreState>((set) => ({
|
||||
storyLog: [],
|
||||
prefs: getPrefs(),
|
||||
settingsOpen: false,
|
||||
activePanel: 'play',
|
||||
selectedStoryNodeId: null,
|
||||
setView: (view) => set((state) => ({ ...state, ...view })),
|
||||
appendLog: (line) => set((state) => ({ log: [...state.log, line].slice(-MAX_LOG_LINES) })),
|
||||
appendStoryLog: (entry) => set((state) => ({ storyLog: [...state.storyLog, entry] })),
|
||||
@@ -58,4 +67,15 @@ export const useGameStore = create<GameStoreState>((set) => ({
|
||||
set({ prefs });
|
||||
},
|
||||
setSettingsOpen: (open) => set({ settingsOpen: open }),
|
||||
setActivePanel: (panel) => set({ activePanel: panel }),
|
||||
setSelectedStoryNodeId: (id) => set({ selectedStoryNodeId: id }),
|
||||
toggleActionGroupCollapsed: (groupKey) =>
|
||||
set((state) => {
|
||||
const nextCollapsed = {
|
||||
...state.prefs.collapsedActionGroups,
|
||||
[groupKey]: !state.prefs.collapsedActionGroups[groupKey],
|
||||
};
|
||||
const prefs = persistPrefs({ collapsedActionGroups: nextCollapsed });
|
||||
return { prefs };
|
||||
}),
|
||||
}));
|
||||
|
||||
Reference in New Issue
Block a user