import Link from 'next/link'; import { t } from '@/i18n'; import { adminApi, adminErrorMessage } from '@/lib/admin-api'; import { grouped } from '@/lib/format'; import { routes } from '@/lib/site'; import { AdminSection, AdminTable, Pill, statusTone } from '@/components/admin/admin-ui'; export const dynamic = 'force-dynamic'; const SEVERITIES = ['error', 'warning', 'info']; export default async function AdminIssuesPage({ searchParams }: { searchParams: Promise<{ severity?: string; connector?: string; indicator?: string; code?: string; run_id?: string }> }) { const sp = await searchParams; try { const r = await adminApi.issues({ severity: sp.severity, connector: sp.connector, indicator: sp.indicator, code: sp.code, run_id: sp.run_id, limit: 300 }); const link = (patch: Record) => { const p = new URLSearchParams(); for (const [k, v] of Object.entries({ ...sp, ...patch })) if (v) p.set(k, v); const s = p.toString(); return `${routes.admin('issues')}${s ? `?${s}` : ''}`; }; return ( <> {t('admin.issues.all')} {SEVERITIES.map((s) => ( {s} ))} } > {r.summary.length ? ( ) : null} `${x.run_id}-${x.indicator_id}-${x.country_id}-${i}`} empty={t('admin.issues.none')} columns={[ { key: 'sev', header: t('admin.issues.severity'), cell: (x) => {x.severity ?? t('admin.na')} }, { key: 'code', header: t('admin.issues.code'), cell: (x) => {x.code} }, { key: 'c', header: t('admin.issues.connector'), cell: (x) => x.connector }, { key: 'i', header: t('admin.issues.indicator'), cell: (x) => (x.indicator_id ? {x.indicator_id} : t('admin.na')) }, { key: 'cty', header: t('admin.issues.country'), cell: (x) => x.country_id ?? t('admin.na') }, { key: 'p', header: t('admin.issues.period'), cell: (x) => x.period ?? t('admin.na') }, { key: 'v', header: t('admin.issues.value'), numeric: true, cell: (x) => (x.value != null ? String(x.value) : t('admin.na')) }, { key: 'm', header: t('admin.issues.message'), cell: (x) => {x.message ?? ''}, className: 'max-w-[28rem]' }, ]} /> ); } catch (e) { return

{adminErrorMessage(e)}

; } }