"use client"; import { useEffect, useState } from "react"; import { z } from "zod"; import { useForm, Controller } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { createSurveyData, getSurveyById } from "@/service/survey/survey"; import { Checkbox } from "@/components/ui/checkbox"; import { Textarea } from "@/components/ui/textarea"; import { Button } from "@/components/ui/button"; import { useParams } from "next/navigation"; const surveySchema = z.object({ accessFrequency: z.string(), uiExperienceDesign: z.string(), uiExperienceNavigation: z.string(), uiExperienceSpeed: z.string(), infoAccuracy: z.string(), infoCompleteness: z.string(), usefulness: z.string(), suggestion: z.string().optional(), }); type SurveySchema = z.infer; export default function FormSurveyDetailPage() { const [isLoading, setIsLoading] = useState(false); const [loadingSurvey, setLoadingSurvey] = useState(true); const [detail, setDetail] = useState(); const { id } = useParams() as { id: string }; const { control, handleSubmit, setValue, formState: { errors }, } = useForm({ resolver: zodResolver(surveySchema), defaultValues: { accessFrequency: "", uiExperienceDesign: "", uiExperienceNavigation: "", uiExperienceSpeed: "", infoAccuracy: "", infoCompleteness: "", usefulness: "", suggestion: "", }, }); const options = { accessFrequency: [ "Setiap hari", "Beberapa kali seminggu", "Beberapa kali dalam sebulan", "Baru pertama kali", ], uiExperienceDesign: ["Sangat baik", "Baik", "Cukup", "Kurang", "Buruk"], uiExperienceNavigation: [ "Sangat mudah", "Mudah", "Cukup", "Sulit", "Sangat sulit", ], uiExperienceSpeed: [ "Sangat cepat", "Cepat", "Cukup", "Lambat", "Sangat lambat", ], infoAccuracy: ["Sangat puas", "Puas", "Cukup", "Kurang puas", "Tidak puas"], infoCompleteness: [ "Sangat lengkap", "Lengkap", "Cukup", "Kurang lengkap", "Tidak lengkap", ], usefulness: [ "Sangat membantu", "Membantu", "Cukup membantu", "Kurang membantu", "Tidak membantu", ], }; const renderControllerGroup = ( name: keyof SurveySchema, question: string, choices: string[] ) => (

{question}

{choices.map((choice, i) => ( ( )} /> ))}
{errors[name] && (

{errors[name]?.message as string}

)}
); const onSubmit = async (data: SurveySchema) => { setIsLoading(true); try { const response = await createSurveyData(data); console.log("Survey submitted:", response); } catch (error) { console.error("Failed to submit survey:", error); } finally { setIsLoading(false); } }; useEffect(() => { const fetchSurvey = async () => { if (id) { setLoadingSurvey(true); try { const response = await getSurveyById(id); const details = response?.data?.data; setDetail(details); if (details) { setValue("accessFrequency", details.accessFrequency || ""); setValue("uiExperienceDesign", details.uiExperienceDesign || ""); setValue( "uiExperienceNavigation", details.uiExperienceNavigation || "" ); setValue("uiExperienceSpeed", details.uiExperienceSpeed || ""); setValue("infoAccuracy", details.infoAccuracy || ""); setValue("infoCompleteness", details.infoCompleteness || ""); setValue("usefulness", details.usefulness || ""); setValue("suggestion", details.suggestion || ""); } } catch (error) { console.error("Failed to fetch survey detail:", error); } finally { setLoadingSurvey(false); } } }; fetchSurvey(); }, [id, setValue]); if (loadingSurvey) { return
Loading survey data...
; } return (

SURVEI KEPUASAN PENGGUNA MEDIAHUB POLRI

Kami menghargai pendapat Anda! Survei ini bertujuan untuk meningkatkan kualitas layanan MediaHub Polri.

{renderControllerGroup( "accessFrequency", "1. Seberapa sering Anda mengakses MediaHub Polri?", options.accessFrequency )}

2. Bagaimana pengalaman Anda dalam mengakses website ini?

{renderControllerGroup( "uiExperienceDesign", "a) Tampilan dan desain website", options.uiExperienceDesign )} {renderControllerGroup( "uiExperienceNavigation", "b) Kemudahan navigasi", options.uiExperienceNavigation )} {renderControllerGroup( "uiExperienceSpeed", "c) Kecepatan akses website", options.uiExperienceSpeed )}

3. Seberapa puas Anda dengan informasi yang tersedia di MediaHub Polri?

{renderControllerGroup( "infoAccuracy", "a) Akurat dan terpercaya", options.infoAccuracy )} {renderControllerGroup( "infoCompleteness", "b) Kelengkapan berita dan informasi", options.infoCompleteness )}
{renderControllerGroup( "usefulness", "4. Apakah Anda merasa website ini membantu dalam mendapatkan informasi terkait Polri?", options.usefulness )}

5. Apa saran atau masukan Anda?

(