"use client"; import { Pencil, Plus, Trash2 } from "lucide-react"; import { useState } from "react"; import { createBanner, deleteBanner, updateBanner } from "@/actions/banners"; import { Badge } from "@/components/ui/badge"; 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 { Switch } from "@/components/ui/switch"; import { useServerAction } from "@/hooks/use-server-action"; interface Banner { id: number; title: string; subtitle: string; image: string; link: string; color: string; isActive: number; sortOrder: number; startDate: string | null; endDate: string | null; } interface Props { banners: Banner[]; } export function BannersManager({ banners }: Props) { const { run, isPending } = useServerAction(); const [showForm, setShowForm] = useState(false); const [editingId, setEditingId] = useState(null); const [form, setForm] = useState({ title: "", subtitle: "", image: "", link: "", color: "", isActive: 1, sortOrder: 0, startDate: "" as string | null, endDate: "" as string | null, }); function resetForm() { setForm({ title: "", subtitle: "", image: "", link: "", color: "", isActive: 1, sortOrder: 0, startDate: "", endDate: "", }); setEditingId(null); setShowForm(false); } function handleEdit(b: Banner) { setForm({ title: b.title, subtitle: b.subtitle, image: b.image, link: b.link, color: b.color, isActive: b.isActive, sortOrder: b.sortOrder, startDate: b.startDate, endDate: b.endDate, }); setEditingId(b.id); setShowForm(true); } function handleSubmit(e: React.FormEvent) { e.preventDefault(); const data = { ...form, startDate: form.startDate || null, endDate: form.endDate || null }; if (editingId) { run(() => updateBanner({ id: editingId, ...data }), { successMessage: "Banner updated!" }); } else { run(() => createBanner(data), { successMessage: "Banner created!" }); } resetForm(); } return (
{showForm && ( {editingId ? "Edit Banner" : "New Banner"}
setForm({ ...form, title: e.target.value })} required />
setForm({ ...form, subtitle: e.target.value })} />
setForm({ ...form, image: e.target.value })} required />
setForm({ ...form, link: e.target.value })} />
setForm({ ...form, color: e.target.value })} />
setForm({ ...form, startDate: d ? d.toISOString() : null })} placeholder="Select start date" />
setForm({ ...form, endDate: d ? d.toISOString() : null })} placeholder="Select end date" />
setForm({ ...form, isActive: v ? 1 : 0 })} />
setForm({ ...form, sortOrder: Number(e.target.value) })} />
)}
{banners.length === 0 && (

No banners yet.

)} {banners.map((b) => ( {b.image && (
)}

{b.title}

{b.subtitle &&

{b.subtitle}

}
{b.isActive ? "Active" : "Inactive"} {b.startDate && Scheduled}
))}
); }