"use client"; import { useTranslations } from "next-intl"; import { useForm } from "react-hook-form"; import { createPoll, updatePoll } from "@/actions/polls"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { DateTimePicker } from "@/components/ui/date-time-picker"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Switch } from "@/components/ui/switch"; import { Textarea } from "@/components/ui/textarea"; import { useServerAction } from "@/hooks/use-server-action"; import type { CreatePollInput, UpdatePollInput } from "@/lib/validators/poll"; interface PollFormProps { defaultValues?: Partial & { id?: number }; } interface PollFormValues { title: string; description: string | null; status: string; showResults: number; multipleChoice: number; startsAt?: Date | null; endsAt?: Date | null; } export function PollForm({ defaultValues }: PollFormProps) { const t = useTranslations("pages.admin.polls"); const { run, isPending } = useServerAction(); const isEditing = !!defaultValues?.id; const form = useForm({ defaultValues: { title: "", description: "", status: "draft", showResults: 1, multipleChoice: 0, ...defaultValues, }, }); function onSubmit(data: PollFormValues) { if (isEditing) { run( () => updatePoll({ id: defaultValues!.id, ...data } as UpdatePollInput & { id: number; }), { successMessage: t("toastUpdated"), }, ); } else { run(() => createPoll(data as CreatePollInput), { successMessage: t("toastCreated"), onSuccess: (result) => { const data = result.data as Record | undefined; if (data?.id) { window.location.href = `/admin/polls/${data.id}`; } }, }); } } return (
{isEditing ? t("formEditTitle") : t("formDetailsTitle")}
{form.formState.errors.title && (

{form.formState.errors.title.message}

)}