2023-12-16 14:55:56 +00:00
|
|
|
import { create } from "zustand";
|
|
|
|
import { devtools } from "zustand/middleware";
|
|
|
|
|
|
|
|
|
|
|
|
type Answer = {
|
|
|
|
questionId: string;
|
|
|
|
answer: string | string[];
|
|
|
|
};
|
|
|
|
|
|
|
|
type OwnVariant = {
|
2023-12-17 13:22:21 +00:00
|
|
|
id: string;
|
|
|
|
variant: any;
|
2023-12-16 14:55:56 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
interface QuizViewStore {
|
|
|
|
answers: Answer[];
|
|
|
|
ownVariants: OwnVariant[];
|
|
|
|
}
|
|
|
|
|
|
|
|
export const useQuizViewStore = create<QuizViewStore>()(
|
|
|
|
devtools(
|
|
|
|
(set, get) => ({
|
|
|
|
answers: [],
|
|
|
|
ownVariants: [],
|
|
|
|
}),
|
|
|
|
{
|
|
|
|
name: "quizView",
|
|
|
|
}
|
|
|
|
)
|
|
|
|
);
|
|
|
|
|
|
|
|
export const updateAnswer = (questionId: string, answer: string | string[]) => {
|
|
|
|
const answers = [...useQuizViewStore.getState().answers];
|
|
|
|
const answerIndex = answers.findIndex(
|
|
|
|
(answer) => questionId === answer.questionId
|
|
|
|
);
|
|
|
|
|
|
|
|
if (answerIndex < 0) {
|
|
|
|
answers.push({ questionId, answer });
|
|
|
|
} else {
|
|
|
|
answers[answerIndex] = { questionId, answer };
|
|
|
|
}
|
|
|
|
|
|
|
|
useQuizViewStore.setState({ answers });
|
|
|
|
};
|
|
|
|
|
|
|
|
export const deleteAnswer = (questionId: string) => {
|
|
|
|
const answers = [...useQuizViewStore.getState().answers];
|
|
|
|
const filteredItems = answers.filter(
|
|
|
|
(answer) => questionId !== answer.questionId
|
|
|
|
);
|
|
|
|
|
|
|
|
useQuizViewStore.setState({ answers: filteredItems });
|
|
|
|
};
|
|
|
|
|
2023-12-17 13:22:21 +00:00
|
|
|
export const updateOwnVariant = (id: string, answer: string) => {
|
2023-12-16 14:55:56 +00:00
|
|
|
const ownVariants = [...useQuizViewStore.getState().ownVariants];
|
|
|
|
const ownVariantIndex = ownVariants.findIndex(
|
2023-12-17 13:22:21 +00:00
|
|
|
(variant) => variant.id === id
|
2023-12-16 14:55:56 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
if (ownVariantIndex < 0) {
|
|
|
|
ownVariants.push({
|
2023-12-17 13:22:21 +00:00
|
|
|
id,
|
2023-12-16 14:55:56 +00:00
|
|
|
variant: {
|
|
|
|
id: getRandom(),
|
|
|
|
answer,
|
|
|
|
extendedText: "",
|
|
|
|
hints: "",
|
|
|
|
originalImageUrl: "",
|
|
|
|
},
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
ownVariants[ownVariantIndex].variant.answer = answer;
|
|
|
|
}
|
|
|
|
|
|
|
|
useQuizViewStore.setState({ ownVariants });
|
|
|
|
};
|
|
|
|
|
2023-12-17 13:22:21 +00:00
|
|
|
export const deleteOwnVariant = (id: string) => {
|
2023-12-16 14:55:56 +00:00
|
|
|
const ownVariants = [...useQuizViewStore.getState().ownVariants];
|
|
|
|
|
|
|
|
const filteredOwnVariants = ownVariants.filter(
|
2023-12-17 13:22:21 +00:00
|
|
|
(variant) => variant.id !== id
|
2023-12-16 14:55:56 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
useQuizViewStore.setState({ ownVariants: filteredOwnVariants });
|
|
|
|
};
|
|
|
|
|
|
|
|
function getRandom() {
|
|
|
|
const min = Math.ceil(1000000);
|
|
|
|
const max = Math.floor(10000000);
|
|
|
|
|
|
|
|
return String(Math.floor(Math.random() * (max - min)) + min);
|
|
|
|
}
|