import { useMemo } from 'react'; import { useParams } from 'react-router-dom'; import { ChevronDown } from 'lucide-react'; import { useLogs } from '../hooks/useLogs'; import { Button, Checkbox, DropdownMenu, DropdownMenuContent, DropdownMenuTrigger, EmptyState, SearchInput, } from '@/components'; import { LogsDataGrid, type LogsColumnDef } from '../components/LogsDataGrid'; import { SeverityBadge } from '../components/SeverityBadge'; import { SEVERITY_OPTIONS, LOGS_PAGE_SIZE } from '../helpers'; import { formatTime } from '@/lib/utils/utils'; import { LogSchema } from '@insforge/shared-schemas'; export default function LogsPage() { // Get the source from the URL params const { source = 'insforge.logs' } = useParams<{ source?: string }>(); const { logs: paginatedLogs, filteredLogs, searchQuery: logsSearchQuery, setSearchQuery: setLogsSearchQuery, severityFilter, setSeverityFilter, currentPage, setCurrentPage, totalPages, isLoading: logsLoading, error: logsError, getSeverity, } = useLogs(source); const logsColumns: LogsColumnDef[] = useMemo( () => [ { key: 'event_message', name: 'Logs', width: '10fr', renderCell: ({ row }) => (

{String(row.eventMessage ?? '')}

), }, { key: 'severity', name: 'Severity', width: '120px', renderCell: ({ row }) => ( ), }, { key: 'timestamp', name: 'Time', width: 'minmax(200px, 1fr)', renderCell: ({ row }) => (

{formatTime(String(row.timestamp ?? ''))}

), }, ], [getSeverity] ); return (
{/* Header */}

{source}

e.preventDefault()} > {SEVERITY_OPTIONS.map(({ value, label, color }) => (
{ e.preventDefault(); setSeverityFilter( severityFilter.includes(value) ? severityFilter.filter((s) => s !== value) : [...severityFilter, value] ); }} > {}} /> ● {label}
))}
{/* Table with Pagination */}
{logsError ? (
) : ( {logsSearchQuery || severityFilter.length < 3 ? 'No logs match your search criteria' : 'No logs found'}
} /> )}
); }