import { useState } from "react"; import { useQuery, useMutation } from "@tanstack/react-query"; import { trpc } from "@/utils/trpc"; import { Button } from "@pram/ui/components/button"; import { Input } from "@pram/ui/components/input"; import { MaterialIcon } from "@/components/ui/MaterialIcon"; import { formatTime } from "@/lib/time"; import type { Question } from "@/lib/types"; import { OptionDisplay } from "./OptionDisplay"; interface QuestionReviewCardProps { q: Question; secIdx: number; qIdx: number; ans: { questionId: string; userAnswer?: string; answer?: string; isCorrect?: boolean | null; partialScore?: number | null; timeSpentSec?: number } | null; userId?: string; isExpanded: boolean; onToggleExpand: () => void; } export function QuestionReviewCard({ q, secIdx, qIdx, ans, userId, isExpanded, onToggleExpand, }: QuestionReviewCardProps) { const isCorrect = ans?.isCorrect; const userAnswer = ans?.userAnswer ?? "Tidak dijawab"; const isOwner = q.creatorUserId === userId; const hasOptions = Array.isArray(q.options) && q.options.length > 0; const [isEditing, setIsEditing] = useState(false); const [editPassage, setEditPassage] = useState(q.passageText ?? ""); const [editCorrectAnswer, setEditCorrectAnswer] = useState(q.correctAnswer ?? ""); const [editExplanation, setEditExplanation] = useState(q.explanation ?? ""); const feedbackQuery = useQuery( trpc.feedback.getQuestionFeedback.queryOptions( { questionId: q.id }, { enabled: !!q.id }, ), ); const voteMutation = useMutation({ ...trpc.feedback.voteQuestion.mutationOptions(), onSuccess: () => feedbackQuery.refetch(), }); const updateQuestionMutation = useMutation({ ...trpc.question.update.mutationOptions(), onSuccess: () => { setIsEditing(false); window.location.reload(); }, }); const handleSaveEdit = () => { updateQuestionMutation.mutate({ id: q.id, passageText: editPassage, correctAnswer: editCorrectAnswer, explanation: editExplanation, }); }; return (