"use client"; import { GripVertical, Pencil, Plus, Trash2 } from "lucide-react"; import { useState } from "react"; import { addPollQuestion, deletePollQuestion, updatePollQuestion } from "@/actions/polls"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { useServerAction } from "@/hooks/use-server-action"; interface Question { id: number; question: string; type: string; sortOrder: number; options: string; } interface Props { pollId: number; questions: Question[]; } export function PollQuestionsManager({ pollId, questions }: Props) { const { run, isPending } = useServerAction(); const [showForm, setShowForm] = useState(false); const [editingId, setEditingId] = useState(null); const [form, setForm] = useState({ question: "", type: "single", sortOrder: questions.length, options: "", }); function resetForm() { setForm({ question: "", type: "single", sortOrder: questions.length, options: "" }); setEditingId(null); setShowForm(false); } function handleEdit(q: Question) { setForm({ question: q.question, type: q.type, sortOrder: q.sortOrder, options: q.options }); setEditingId(q.id); setShowForm(true); } function handleSubmit(e: React.FormEvent) { e.preventDefault(); if (editingId) { // biome-ignore lint/suspicious/noExplicitAny: explicitly chosen here, see surrounding code run(() => updatePollQuestion({ id: editingId, ...form } as any), { successMessage: "Question updated!", }); } else { // biome-ignore lint/suspicious/noExplicitAny: explicitly chosen here, see surrounding code run(() => addPollQuestion({ pollId, ...form } as any), { successMessage: "Question added!", }); } resetForm(); } return ( Questions ({questions.length}) {showForm && (
setForm({ ...form, question: e.target.value })} required />
setForm({ ...form, sortOrder: Number(e.target.value) })} />