import { useState, useEffect } from 'react' import { getEvents } from '../api' import { formatRelativeTime } from '../utils' import { Spinner, EmptyState, HashBadge, Pagination } from './Common' export default function Events() { const [data, setData] = useState>([]) const [expanded, setExpanded] = useState>(new Set()) const [refFilter, setRefFilter] = useState('') const [error, setError] = useState('') const [loading, setLoading] = useState(true) const [total, setTotal] = useState(0) const [limit, setLimit] = useState(50) const [offset, setOffset] = useState(0) const load = () => { setLoading(true) getEvents(refFilter || undefined, limit, offset) .then((res) => { setData(res.events) setTotal(res.total) }) .catch((e) => setError(e.message)) .finally(() => setLoading(false)) } useEffect(() => { load() }, [limit, offset]) const handleSearch = () => { setOffset(0) // reset to first page load() } const toggleExpand = (id: string) => { setExpanded((prev) => { const next = new Set(prev) if (next.has(id)) { next.delete(id) } else { next.add(id) } return next }) } if (loading) return if (error) return
Error: {error}
return (

Events

setRefFilter(e.target.value)} />
{data.length === 0 ? ( ) : ( {data.map((event, i) => ( ))}
ID Type Hash Created Payload
{event.id} {formatRelativeTime(event.created_at)} {expanded.has(event.id) && (
                        {JSON.stringify(event.payload, null, 2)
                          .split('\n')
                          .map((line, i) => {
                            if (line.includes(':')) {
                              const [key, ...rest] = line.split(':')
                              return (
                                
{key}: {rest.join(':')}
) } return (
{line}
) })}
)}
)}
) }