'use client'; import { useState, useEffect, useCallback } from 'react'; type DeletedProduct = { id: number; name: string; normalizedName: string; canonicalName?: string | null; category?: string | null; brand?: string | null; deletedAt?: string | null; }; export default function DeletedProductsView() { const [products, setProducts] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [pendingId, setPendingId] = useState(null); const [search, setSearch] = useState(''); const fetchDeleted = useCallback(() => { setLoading(true); setError(null); fetch('/api/admin/deleted-products') .then((r) => r.json()) .then((data) => { if (Array.isArray(data)) setProducts(data); else setError('Kunde inte ladda raderade produkter.'); }) .catch(() => setError('Nätverksfel. Försök igen.')) .finally(() => setLoading(false)); }, []); useEffect(() => { fetchDeleted(); }, [fetchDeleted]); const handleRestore = async (id: number) => { if (!confirm('Återställ produkten?')) return; setPendingId(id); try { const res = await fetch(`/api/admin/deleted-products/${id}`, { method: 'POST' }); if (!res.ok) { const d = await res.json().catch(() => ({})); setError(d?.error ?? 'Kunde inte återställa produkten.'); } else { setProducts((prev) => prev.filter((p) => p.id !== id)); } } catch { setError('Nätverksfel. Försök igen.'); } finally { setPendingId(null); } }; const handlePermanentDelete = async (id: number, name: string) => { if (!confirm(`Radera "${name}" permanent? Detta kan inte ångras.`)) return; setPendingId(id); try { const res = await fetch(`/api/admin/deleted-products/${id}`, { method: 'DELETE' }); if (!res.ok) { const d = await res.json().catch(() => ({})); setError(d?.error ?? 'Kunde inte radera produkten permanent.'); } else { setProducts((prev) => prev.filter((p) => p.id !== id)); } } catch { setError('Nätverksfel. Försök igen.'); } finally { setPendingId(null); } }; const filtered = products.filter((p) => p.name.toLowerCase().includes(search.toLowerCase()) || (p.canonicalName ?? '').toLowerCase().includes(search.toLowerCase()) ); if (loading) return

Laddar raderade produkter...

; return (

Här visas produkter som mjukraderats. Du kan återställa dem eller radera dem permanent.

{error && (
{error}
)}
setSearch(e.target.value)} style={{ padding: '0.4rem 0.75rem', borderRadius: 6, border: '1px solid #ccc', fontSize: '0.9rem', minWidth: 220 }} /> {filtered.length} av {products.length} produkter
{filtered.length === 0 ? (

Inga raderade produkter hittades.

) : (
{filtered.map((p) => ( ))}
ID Namn Canonical name Kategori Raderades Åtgärder
{p.id} {p.name} {p.canonicalName || '–'} {p.category || '–'} {p.deletedAt ? new Date(p.deletedAt).toLocaleDateString('sv-SE') : '–'}
)}
); }