This repository has been archived on 2026-03-12. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
codewanderer/src/store.ts
2021-08-08 00:57:56 +02:00

58 lines
1.8 KiB
TypeScript

import create from 'zustand/vanilla';
import { Scenes } from './scenes/scenes';
import { CompanionMessage, CompanionState } from './ui/companion';
import project from '../metadata/project.json';
import { InfoMessageType } from './ui/info';
import { RevealableInterface, RevealableTypes } from './sketchObjects/Revealable';
import { getRevealablesforSubproject } from './helpers';
export interface State {
currentIntroStep: number;
currentScene: Scenes;
currentSubproject?: string;
companionState: CompanionState;
infoMessageShown: boolean;
infoMessages: InfoMessageType[];
addInfoMessage: (newMessage: InfoMessageType) => void;
userMessages: CompanionMessage[];
addUserMessage: (newMessage: CompanionMessage) => void;
revealables: RevealableInterface[];
finishedSubProjects: string[];
setProjectMetadata: (projectName: string) => void;
participantAnonymous: boolean;
finishedGame: boolean;
revealablesFinished: number;
showScore: boolean;
showOvScore: boolean;
uid: string;
}
const store = create<State>((set) => ({
uid: null,
showScore: false,
showOvScore: true,
currentIntroStep: 5,
revealablesFinished: 0,
currentScene: Scenes.OVERVIEW,
currentSubproject: null,
participantAnonymous: false,
companionState: CompanionState.IDLE,
infoMessageShown: false,
infoMessages: [],
finishedGame: false,
addInfoMessage: (newMessage) =>
set((state) => ({ ...state, infoMessages: [...state.infoMessages, newMessage] })),
userMessages: [],
addUserMessage: (newMessage) =>
set((state) => ({
userMessages: [...state.userMessages, newMessage],
})),
revealables: [],
finishedSubProjects: [],
setProjectMetadata: (projectName) =>
set((state) => ({
...state,
revealables: getRevealablesforSubproject(projectName, project.subprojects),
})),
}));
export default store;