frontAnswerer/lib/stores/useQuizStore.ts

84 lines
2.3 KiB
TypeScript
Raw Normal View History

2025-05-01 13:15:54 +00:00
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;
2025-06-15 09:58:15 +00:00
quizStep: number;
nextLoading: boolean;
2025-05-01 13:15:54 +00:00
};
export const useQuizStore = create<QuizStore>(() => ({
settings: {} as QuizSettingsConfig,
questions: [],
quizId: "",
preview: false,
changeFaviconAndTitle: false,
cnt: 0,
recentlyCompleted: false,
show_badge: false,
2025-06-15 09:58:15 +00:00
quizStep: 0,
nextLoading: false,
2025-05-01 13:15:54 +00:00
}));
export const setQuizData = (data: QuizSettings) => {
2025-07-01 13:49:30 +00:00
console.log("setQuizData called with:");
console.log("data:", data);
console.log("data.settings:", data.settings);
console.log("data.questions:", data.questions);
const currentState = useQuizStore.getState();
console.log("Current state before update:", currentState);
useQuizStore.setState((state: QuizStore) => {
const newState = { ...state, ...data };
console.log("New state after update:", newState);
return newState;
});
const updatedState = useQuizStore.getState();
console.log("State after setState:", updatedState);
2025-05-01 13:15:54 +00:00
};
2025-07-01 13:49:30 +00:00
2025-06-15 09:58:15 +00:00
export const addQuestions = (newQuestions: AnyTypedQuizQuestion[]) =>
2025-05-01 13:15:54 +00:00
useQuizStore.setState(
produce((state: QuizStore) => {
2025-06-15 09:58:15 +00:00
state.questions.push(...newQuestions);
2025-05-01 13:15:54 +00:00
})
);
export const addquizid = (id: string) =>
useQuizStore.setState(
produce((state: QuizStore) => {
state.quizId = id;
})
);
export const quizStepInc = () =>
useQuizStore.setState(
produce((state: QuizStore) => {
//Дополнительная проверка что мы не вышли за пределы массива вопросов
if (state.quizStep + 1 <= state.questions.length) {
state.quizStep += 1;
}
})
);
export const quizStepDec = () =>
useQuizStore.setState(
produce((state: QuizStore) => {
//Дополнительная проверка что мы не вышли на менее чем 0 вопрос
if (state.quizStep > 0) {
state.quizStep--;
}
})
);
export const changeNextLoading = (status: boolean) =>
2025-06-15 09:58:15 +00:00
useQuizStore.setState(
produce((state: QuizStore) => {
state.nextLoading = status;
2025-06-15 09:58:15 +00:00
})
);