import { useState, useEffect, useCallback } from 'react' import type { NextPage } from 'next' import Head from 'next/head' import Link from 'next/link' interface Report { id: number source_url: string source_domain: string reporter_email?: string reporter_name?: string category_suggestions: string[] description: string priority: string status: string created_at: string } const ReportsManagement: NextPage = () => { const [reports, setReports] = useState([]) const [loading, setLoading] = useState(true) const [filter, setFilter] = useState('pending') const fetchReports = useCallback(async () => { try { const response = await fetch(`/api/admin/reports?status=${filter}`) if (response.ok) { const data = await response.json() setReports(data) } } catch (error) { console.error('Failed to fetch reports:', error) } finally { setLoading(false) } }, [filter]) useEffect(() => { fetchReports() }, [fetchReports]) const updateReport = async (id: number, status: string, notes?: string) => { try { const response = await fetch(`/api/admin/reports/${id}`, { method: 'PATCH', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ status, admin_notes: notes, }), }) if (response.ok) { fetchReports() } } catch (error) { console.error('Failed to update report:', error) } } const getPriorityColor = (priority: string) => { switch (priority) { case 'urgent': return '#dc2626' case 'high': return '#ea580c' case 'medium': return '#d97706' default: return '#6b7280' } } return (
Správa hlásení - Infohliadka

Správa hlásení

{loading ? (
Loading...
) : (
{reports.map((report) => ( ))}
Doména Kategórie Priorita Status Dátum Akcie
{report.source_domain}
{report.reporter_name || 'Anonymous'}
{report.category_suggestions.join(', ')} {report.priority} {report.status} {new Date(report.created_at).toLocaleDateString('sk-SK')} {report.status === 'pending' && (
)}
)}
← Späť na dashboard
) } export default ReportsManagement