'use client' import { useEffect, useMemo, useState } from 'react' import { useRouter } from 'next/navigation' import { authFetch, clearToken, getApiBase, getToken } from '../../lib/auth' import AdminShell from '../../ui/AdminShell' type RequestRow = { id: number title?: string | null year?: number | null type?: string | null statusLabel?: string | null requestedBy?: string | null createdAt?: string | null } const formatDateTime = (value?: string | null) => { if (!value) return 'Unknown' const date = new Date(value) if (Number.isNaN(date.valueOf())) return value return date.toLocaleString() } export default function AdminRequestsAllPage() { const router = useRouter() const [rows, setRows] = useState([]) const [total, setTotal] = useState(0) const [loading, setLoading] = useState(false) const [error, setError] = useState(null) const [pageSize, setPageSize] = useState(50) const [page, setPage] = useState(1) const pageCount = useMemo(() => { if (!total || pageSize <= 0) return 1 return Math.max(1, Math.ceil(total / pageSize)) }, [total, pageSize]) const load = async () => { if (!getToken()) { router.push('/login') return } setLoading(true) setError(null) try { const baseUrl = getApiBase() const skip = (page - 1) * pageSize const response = await authFetch( `${baseUrl}/admin/requests/all?take=${pageSize}&skip=${skip}` ) if (!response.ok) { if (response.status === 401) { clearToken() router.push('/login') return } if (response.status === 403) { router.push('/') return } throw new Error(`Load failed: ${response.status}`) } const data = await response.json() setRows(Array.isArray(data?.results) ? data.results : []) setTotal(Number(data?.total ?? 0)) } catch (err) { console.error(err) setError('Unable to load requests.') } finally { setLoading(false) } } useEffect(() => { void load() }, [page, pageSize]) useEffect(() => { if (page > pageCount) { setPage(pageCount) } }, [pageCount, page]) return ( router.push('/admin')}> Back to settings } >
{total.toLocaleString()} total
{loading ? (
Loading requests…
) : error ? (
{error}
) : rows.length === 0 ? (
No requests found.
) : (
Request Status Requested by Created
{rows.map((row) => ( ))}
)}
Page {page} of {pageCount}
) }