'use client'; import { Button } from '@repo/shadcn/button'; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from '@repo/shadcn/card'; import { Checkbox } from '@repo/shadcn/checkbox'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from '@repo/shadcn/form'; import { Input } from '@repo/shadcn/input'; import { RadioGroup, RadioGroupItem } from '@repo/shadcn/radio-group'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@repo/shadcn/select'; import { useRouter } from 'next/navigation'; import { useState } from 'react'; import { useForm } from 'react-hook-form'; import { toast } from 'sonner'; import { Question, type SurveyResponse, SurveyTable } from '../schemas/survey'; import { useSurveyAnswerMutation } from '../hooks/use-mutation-surveys'; interface SurveyResponseProps { survey: SurveyTable; } export function SurveyResponse({ survey }: SurveyResponseProps) { const router = useRouter(); const [loading, setLoading] = useState(false); const form = useForm({ defaultValues: { // Initialize an empty object for each question ...Object.fromEntries( survey.questions.map((question) => [question.id, '']) ) } }); const { mutate: MutateAnswer, } = useSurveyAnswerMutation() const handleSubmit = async (data: any) => { setLoading(true); const answers = Object.entries(data).map(([questionId, value]) => ({ questionId, value, })); const response: SurveyResponse = { surveyId: String(survey.id), answers: answers.map(answer => ({ questionId: answer.questionId, value: String(answer.value) })), }; try { await MutateAnswer({ ...response }, { onSuccess: () => { toast.success('Encuesta enviada exitosamente'); router.push('/dashboard/encuestas'); }, onError: () => { toast.error('Error al enviar la encuesta'); } } ) } catch (error) { toast.error('Error al enviar la encuesta'); } }; const renderQuestion = (question: Question) => { switch (question.type) { case 'title': return (

{question.content}

); case 'simple': return ( ( {question.question} )} /> ); case 'multiple_choice': return ( ( {question.question}
{question.options.map((option) => ( ( {option.text} )} /> ))}
)} /> ); case 'single_choice': return ( ( {question.question} {question.options.map((option) => ( {option.text} ))} )} /> ); case 'select': return ( ( {question.question} )} /> ); } }; return (
{survey.title} {survey.description}
{survey.questions.map((question) => (
{renderQuestion(question)}
))}
); }