import { jsxs, jsx } from "react/jsx-runtime"; import { B as Button } from "./button-CdJZJLGw.js"; import { L as Label } from "./label-0rIIfpX0.js"; import { S as Select, a as SelectTrigger, b as SelectValue, c as SelectContent, d as SelectItem } from "./select-BYx0MCUK.js"; import { useState, useEffect, useMemo } from "react"; import "@radix-ui/react-slot"; import "class-variance-authority"; import "./utils-DLCPGU0v.js"; import "clsx"; import "tailwind-merge"; import "@radix-ui/react-label"; import "@radix-ui/react-select"; import "lucide-react"; const MatchingQuestion = ({ question, answer, onAnswerChange }) => { var _a; const matches = ((_a = question.options) == null ? void 0 : _a.matches) || []; const buildInitialMatches = () => { if (Array.isArray(answer == null ? void 0 : answer.matches)) { const arrayMatches = answer.matches; return arrayMatches.reduce((acc, item) => { acc[item.id] = item.answer; return acc; }, {}); } if ((answer == null ? void 0 : answer.matches) && typeof answer.matches === "object") { return { ...answer.matches }; } return {}; }; const [selectedMatches, setSelectedMatches] = useState(buildInitialMatches); useEffect(() => { setSelectedMatches(buildInitialMatches()); }, [question.id]); const emitChange = (newMatches) => { setSelectedMatches(newMatches); const formatted = Object.entries(newMatches).map(([id, value]) => ({ id: Number(id), answer: value })); onAnswerChange({ matches: formatted }); }; const handleMatch = (leftId, answerValue) => { emitChange({ ...selectedMatches, [leftId]: answerValue }); }; const handleClearAll = () => { emitChange({}); }; const leftItems = useMemo(() => matches.map((pair) => ({ id: pair.id, text: pair.question })), [matches]); const rightItems = useMemo(() => matches.map((pair) => ({ id: pair.id, text: pair.answer })), [matches]); const shuffledRightItems = useMemo(() => [...rightItems].sort(() => Math.random() - 0.5), [rightItems]); return /* @__PURE__ */ jsxs("div", { className: "space-y-4", children: [ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [ /* @__PURE__ */ jsx("p", { className: "text-sm text-gray-600", children: "Match each item on the left with the correct item on the right:" }), /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: handleClearAll, disabled: Object.keys(selectedMatches).length === 0, children: "Clear All" }) ] }), /* @__PURE__ */ jsx("div", { className: "space-y-3", children: leftItems.map((leftItem) => /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 gap-3 rounded-lg border p-4 md:grid-cols-2", children: [ /* @__PURE__ */ jsx("div", { className: "flex items-center", children: /* @__PURE__ */ jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsx(Label, { className: "font-normal", children: leftItem.text }) }) }), /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs(Select, { value: selectedMatches[leftItem.id] || "", onValueChange: (value) => handleMatch(leftItem.id, value), children: [ /* @__PURE__ */ jsx(SelectTrigger, { children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Select a match..." }) }), /* @__PURE__ */ jsx(SelectContent, { children: shuffledRightItems.map((rightItem) => /* @__PURE__ */ jsx(SelectItem, { value: rightItem.text, children: rightItem.text }, rightItem.id)) }) ] }) }) ] }, leftItem.id)) }), Object.keys(selectedMatches).length > 0 && /* @__PURE__ */ jsxs("p", { className: "text-sm text-gray-600", children: [ "Matched: ", /* @__PURE__ */ jsx("span", { className: "font-semibold", children: Object.keys(selectedMatches).length }), " of ", leftItems.length ] }) ] }); }; export { MatchingQuestion as default };