import type { QuestionVariant } from "@/model/questionTypes/shared"; import { useQuizStore } from "@/stores/useQuizStore"; import { useQuizViewStore, type OwnVariant } from "@stores/quizView"; import { Box, Checkbox, FormControl, FormControlLabel, Input, Radio, TextareaAutosize, Typography, useTheme, } from "@mui/material"; import RadioCheck from "@ui_kit/RadioCheck"; import RadioIcon from "@ui_kit/RadioIcon"; import { quizThemes } from "@utils/themes/Publication/themePublication"; import { polyfillCountryFlagEmojis } from "country-flag-emoji-polyfill"; import type { MouseEvent } from "react"; import { useTranslation } from "react-i18next"; import { OwnEmojiPicker } from "./OwnEmojiPicker"; polyfillCountryFlagEmojis(); type EmojiVariantProps = { questionId: string; variant: QuestionVariant; index: number; isMulti: boolean; own: boolean; questionLargeCheck: boolean; ownPlaceholder: string; answer: string | string[] | undefined; }; interface OwnInputProps { questionId: string; variant: QuestionVariant; largeCheck: boolean; ownPlaceholder: string; } const OwnInput = ({ questionId, variant, largeCheck, ownPlaceholder }: OwnInputProps) => { const theme = useTheme(); const ownVariants = useQuizViewStore((state) => state.ownVariants); const { updateOwnVariant } = useQuizViewStore((state) => state); const ownAnswer = ownVariants[ownVariants.findIndex((v: OwnVariant) => v.id === variant.id)]?.variant.answer || ""; return largeCheck ? ( ) => e.stopPropagation()} onChange={(e: React.ChangeEvent) => { updateOwnVariant(variant.id, e.target.value); }} /> ) : ( ) => e.stopPropagation()} onChange={(e: React.ChangeEvent) => { updateOwnVariant(variant.id, e.target.value); }} /> ); }; export const EmojiVariant = ({ answer, variant, index, questionId, isMulti, own, questionLargeCheck, ownPlaceholder, }: EmojiVariantProps) => { const { settings } = useQuizStore(); const { updateAnswer, deleteAnswer, updateOwnVariant, ownVariants } = useQuizViewStore((state) => state); const theme = useTheme(); const { t } = useTranslation(); const customEmoji = ownVariants.find((v: OwnVariant) => v.id === variant.id)?.variant.extendedText || ""; const onVariantClick = async (event: MouseEvent) => { event.preventDefault(); const variantId = variant.id; if (isMulti) { const currentAnswer = Array.isArray(answer) ? answer : []; const newAnswer = currentAnswer.includes(variantId) ? currentAnswer.filter((item) => item !== variantId) : [...currentAnswer, variantId]; updateAnswer(questionId, newAnswer, variant.points || 0); } else { if (answer === variant.id) { deleteAnswer(questionId); } else { updateAnswer(questionId, variant.id, variant.points || 0); } } }; const handleEmojiSelect = (emoji: string) => { // We store custom emoji in ownVariants store, with a specific field to differentiate const currentOwnAnswer = ownVariants.find((v: OwnVariant) => v.id === variant.id)?.variant.answer || ""; updateOwnVariant(variant.id, currentOwnAnswer, emoji); }; const isSelected = isMulti ? Array.isArray(answer) && answer.includes(variant.id) : answer === variant.id; return ( {own ? ( ) : ( {variant.extendedText && {variant.extendedText}} )} {own && ( {t("Enter your answer")} )} } icon={} sx={{ position: "absolute", top: "-162px", right: "12px" }} /> ) : ( } icon={} sx={{ position: "absolute", top: "-162px", right: "12px" }} /> ) } label={ own ? ( ) : ( {variant.answer} ) } /> ); };