37 lines
876 B
TypeScript
37 lines
876 B
TypeScript
|
|
"use client";
|
||
|
|
|
||
|
|
import { create } from "zustand";
|
||
|
|
|
||
|
|
export type Screen =
|
||
|
|
| "home"
|
||
|
|
| "auth"
|
||
|
|
| "profile"
|
||
|
|
| "friends"
|
||
|
|
| "online" // online lobby (create room / play random)
|
||
|
|
| "room"
|
||
|
|
| "matchmaking"
|
||
|
|
| "leaderboard"
|
||
|
|
| "shop"
|
||
|
|
| "game"; // the table (used for both ai + online)
|
||
|
|
|
||
|
|
interface UIStore {
|
||
|
|
screen: Screen;
|
||
|
|
/** screen to return to from the game table */
|
||
|
|
returnTo: Screen;
|
||
|
|
dailyModalOpen: boolean;
|
||
|
|
go: (screen: Screen) => void;
|
||
|
|
goGame: (returnTo?: Screen) => void;
|
||
|
|
openDaily: () => void;
|
||
|
|
closeDaily: () => void;
|
||
|
|
}
|
||
|
|
|
||
|
|
export const useUIStore = create<UIStore>((set) => ({
|
||
|
|
screen: "home",
|
||
|
|
returnTo: "home",
|
||
|
|
dailyModalOpen: false,
|
||
|
|
go: (screen) => set({ screen }),
|
||
|
|
goGame: (returnTo = "home") => set({ screen: "game", returnTo }),
|
||
|
|
openDaily: () => set({ dailyModalOpen: true }),
|
||
|
|
closeDaily: () => set({ dailyModalOpen: false }),
|
||
|
|
}));
|