'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}
))}
) }