"use client" import { useState } from "react" import { ArrowLeftIcon, ArrowRightIcon, CheckIcon, Loader2Icon, } from "lucide-react" import { cn } from "@lib/utils" import type { NovaResearchClarificationAnswer, NovaResearchClarificationRequest, } from "@/lib/nova-research" export function ResearchClarification({ request, onSubmit, }: { request: NovaResearchClarificationRequest onSubmit: (answers: NovaResearchClarificationAnswer[]) => Promise }) { const [questionIndex, setQuestionIndex] = useState(0) const [answers, setAnswers] = useState>({}) const [otherByQuestion, setOtherByQuestion] = useState< Record >({}) const [submitting, setSubmitting] = useState(false) const [error, setError] = useState(null) const question = request.questions[questionIndex] if (!question) return null const answer = answers[question.id] ?? "" const usingOther = otherByQuestion[question.id] === true const isLast = questionIndex === request.questions.length - 1 const canContinue = answer.trim().length > 0 const submit = async () => { if (!canContinue || submitting) return setSubmitting(true) setError(null) try { await onSubmit( request.questions.map((item) => ({ questionId: item.id, value: answers[item.id]?.trim() ?? "", })), ) } catch (submitError) { setError( submitError instanceof Error ? submitError.message : "Could not submit your answers.", ) setSubmitting(false) } } return (

A few details first

{request.intro ? (

{request.intro}

) : null}
{questionIndex + 1} / {request.questions.length}
{request.questions.map((item, index) => ( ))}

{question.question}

{question.options.map((option) => { const selected = !usingOther && answer === option.label return ( ) })} {question.allowOther !== false ? (
{usingOther ? (
setAnswers((current) => ({ ...current, [question.id]: event.target.value, })) } placeholder="Write your answer…" maxLength={500} className="h-10 w-full rounded-[10px] bg-[#0D121A] px-3.5 text-xs text-[#FAFAFA] shadow-[inset_1.5px_1.5px_4.5px_rgba(0,0,0,0.55)] outline-none ring-1 ring-inset ring-white/[0.06] placeholder:text-[#737373] focus:ring-white/15" />
) : null}
) : null}
{error ?

{error}

: null}
) }