frontAnswerer/src/stores/quizView/store.ts

96 lines
2.2 KiB
TypeScript
Raw Normal View History

2023-12-16 14:55:56 +00:00
import { create } from "zustand";
import { devtools } from "zustand/middleware";
import moment from "moment";
2023-12-16 14:55:56 +00:00
type Answer = {
questionId: string;
answer: string | string[];
};
type OwnVariant = {
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[] | moment.Moment) => {
2023-12-16 14:55:56 +00:00
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 });
};
export const updateOwnVariant = (id: string, answer: string) => {
2023-12-16 14:55:56 +00:00
const ownVariants = [...useQuizViewStore.getState().ownVariants];
const ownVariantIndex = ownVariants.findIndex(
(variant) => variant.id === id
2023-12-16 14:55:56 +00:00
);
if (ownVariantIndex < 0) {
ownVariants.push({
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 });
};
export const deleteOwnVariant = (id: string) => {
2023-12-16 14:55:56 +00:00
const ownVariants = [...useQuizViewStore.getState().ownVariants];
const filteredOwnVariants = ownVariants.filter(
(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);
}