import { memo, useState } from 'react' import ChevronDown from 'lucide-react/dist/esm/icons/chevron-down' import ChevronUp from 'lucide-react/dist/esm/icons/chevron-up' import Pencil from 'lucide-react/dist/esm/icons/pencil' import Trash2 from 'lucide-react/dist/esm/icons/trash-2' import Upload from 'lucide-react/dist/esm/icons/upload' import QuestionEditForm from './QuestionEditForm' import { OPTION_LETTERS } from './questionUtils' const typeColor = { mcq: 'badge-blue', msq: 'badge-amber', nat: 'badge-green' } const openImage = (url) => { window.open(url, '_blank') } const imageKeyHandler = (url) => (event) => { if (event.key === 'Enter' || event.key === ' ') { event.preventDefault() openImage(url) } } const QuestionCard = memo(function QuestionCard({ q, idx, onDelete, onUpdate, onUploadImage, onDeleteImage, }) { const [open, setOpen] = useState(false) const [editing, setEditing] = useState(false) const optionImages = q.option_images || {} const toggleOpen = () => setOpen(current => !current) const handleKeyDown = (event) => { if (event.key === 'Enter' || event.key === ' ') { event.preventDefault() toggleOpen() } } return (
Q{idx + 1}

{q.question_text}

{q.question_type.toUpperCase()} {q.marks}M {q.subject && · {q.subject}}
{open ? : }
{open && (
{editing ? ( { await onUpdate(q.id, payload) setEditing(false) }} onCancel={() => setEditing(false)} /> ) : ( <> {q.options?.length > 0 && (
{q.options.map((option, optionIdx) => { const letter = OPTION_LETTERS[optionIdx] || String(optionIdx + 1) const isCorrect = q.correct_answer?.includes(letter) return (

{letter}.{option}

{optionImages[letter] ? (
{`Option openImage(optionImages[letter])} />
) : ( )}
) })}
)}
Answer: {q.correct_answer} · +{q.marks}M {q.negative_marks > 0 && / -{q.negative_marks}M}

Question Image (optional)

{q.question_image_url ? (
Question image openImage(q.question_image_url)} />
) : ( )}
)}
)}
) }) export default QuestionCard