import { useQuery, useMutation } from "@tanstack/react-query"; import { Button } from "@pram/ui/components/button"; import { Card, CardContent } from "@pram/ui/components/card"; import { Dialog, DialogContent, DialogHeader, } from "@pram/ui/components/dialog"; import { authClient } from "@/lib/auth-client"; import { trpc } from "@/utils/trpc"; import { formatLabel } from "@/lib/format"; import { MaterialIcon } from "@/components/ui/MaterialIcon"; import type { Question } from "@/lib/types"; export function QuestionDetailModal({ question, onClose, isSelected, onToggleSelect, isSelectable, }: { question: Question; onClose: () => void; isSelected: boolean; onToggleSelect: () => void; isSelectable: boolean; }) { const { data: session } = authClient.useSession(); const isOwner = question.creatorUserId === session?.user.id; const ratingQuery = useQuery( trpc.rating.getQuestionRating.queryOptions({ questionId: question.id }), ); const rateMutation = useMutation({ ...trpc.rating.rateQuestion.mutationOptions(), onSuccess: () => ratingQuery.refetch(), }); return ( !v && onClose()}>
{question.examTypeName} {question.sectionTypeName} {formatLabel(question.format ?? "")} Level {question.difficulty}
{/* Passage */}

Teks Bacaan

{question.passageText}
{/* Question */}

Pertanyaan

{question.questionText}

{!!question.options && Array.isArray(question.options as unknown[]) && (question.options as unknown[]).length > 0 && (
{(question.options as Array<{ key: string; text: string }>).map( (opt) => (
{opt.key} {opt.text}
), )}
)} {!question.options && (
Jenis soal:{" "} {formatLabel(question.format ?? "")}
)}
{/* Lock card */}

Jawaban & Penjelasan

Jawaban dan penjelasan akan tersedia setelah kamu mencoba mengerjakan soal ini dalam paket latihan.

{/* Rating */}
{[1, 2, 3, 4, 5].map((star) => ( ))}
{ratingQuery.data?.avgRating && ( {ratingQuery.data.avgRating}/5 ({question.usageCount}x digunakan) )} {!ratingQuery.data?.avgRating && ( {question.usageCount}x digunakan )}
{/* Meta & Owner Actions */}
Dibuat oleh {question.creatorName ?? "Anonim"} {question.source}
{isOwner && (
{question.isPublic ? "Publik" : "Privat"}
)}
{/* Footer Actions */}
); }