48 lines
1.2 KiB
TypeScript
48 lines
1.2 KiB
TypeScript
import { create } from "zustand";
|
|
import { produce } from "immer";
|
|
import { QuizSettings, QuizSettingsConfig } from "@model/settingsData";
|
|
import { AnyTypedQuizQuestion } from "..";
|
|
|
|
export type QuizStore = QuizSettings & {
|
|
quizId: string;
|
|
preview: boolean;
|
|
changeFaviconAndTitle: boolean;
|
|
quizStep: number;
|
|
};
|
|
|
|
export const useQuizStore = create<QuizStore>(() => ({
|
|
settings: {} as QuizSettingsConfig,
|
|
questions: [],
|
|
quizId: "",
|
|
preview: false,
|
|
changeFaviconAndTitle: false,
|
|
cnt: 0,
|
|
recentlyCompleted: false,
|
|
show_badge: false,
|
|
quizStep: 0,
|
|
}));
|
|
|
|
export const setQuizData = (data: QuizSettings) => {
|
|
console.log("zusstand");
|
|
console.log(data);
|
|
useQuizStore.setState((state: QuizStore) => ({ ...state, ...data }));
|
|
};
|
|
export const addQuestions = (newQuestions: AnyTypedQuizQuestion[]) =>
|
|
useQuizStore.setState(
|
|
produce((state: QuizStore) => {
|
|
state.questions.push(...newQuestions);
|
|
})
|
|
);
|
|
export const addquizid = (id: string) =>
|
|
useQuizStore.setState(
|
|
produce((state: QuizStore) => {
|
|
state.quizId = id;
|
|
})
|
|
);
|
|
export const changeQuizStep = (step: number) =>
|
|
useQuizStore.setState(
|
|
produce((state: QuizStore) => {
|
|
state.quizStep += step;
|
|
})
|
|
);
|