'use client' import { useCallback, useEffect, useState } from 'react' import { Card, Table, Address } from '@/libs/frontend-ui-primitives' import Link from 'next/link' import { transactionsApi, Transaction } from '@/services/api/transactions' import { formatWeiAsEth } from '@/utils/format' export default function TransactionsPage() { const pageSize = 20 const [transactions, setTransactions] = useState([]) const [loading, setLoading] = useState(true) const [page, setPage] = useState(1) const chainId = parseInt(process.env.NEXT_PUBLIC_CHAIN_ID || '138') const loadTransactions = useCallback(async () => { setLoading(true) try { const { ok, data } = await transactionsApi.listSafe(chainId, page, pageSize) setTransactions(ok ? data : []) } catch (error) { console.error('Failed to load transactions:', error) setTransactions([]) } finally { setLoading(false) } }, [chainId, page, pageSize]) useEffect(() => { loadTransactions() }, [loadTransactions]) const showPagination = page > 1 || transactions.length > 0 const canGoNext = transactions.length === pageSize const columns = [ { header: 'Hash', accessor: (tx: Transaction) => (
), }, { header: 'Block', accessor: (tx: Transaction) => ( {tx.block_number} ), }, { header: 'From', accessor: (tx: Transaction) => (
), }, { header: 'To', accessor: (tx: Transaction) => tx.to_address ? (
) : Contract Creation, }, { header: 'Value', accessor: (tx: Transaction) => formatWeiAsEth(tx.value), }, { header: 'Status', accessor: (tx: Transaction) => ( {tx.status === 1 ? 'Success' : 'Failed'} ), }, ] return (

Transactions

{loading ? (

Loading transactions...

) : ( tx.hash} /> )} {showPagination && (
Page {page}
)} ) }