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;
|
2025-06-30 02:07:32 +00:00
|
|
|
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,
|
2025-06-30 02:07:32 +00:00
|
|
|
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;
|
|
|
|
})
|
|
|
|
);
|
2025-06-30 02:07:32 +00:00
|
|
|
|
|
|
|
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) => {
|
2025-06-30 02:07:32 +00:00
|
|
|
state.nextLoading = status;
|
2025-06-15 09:58:15 +00:00
|
|
|
})
|
|
|
|
);
|