From 95b20107d73ba64ed0ed72cdb9b31f385d1ad778 Mon Sep 17 00:00:00 2001 From: stanlou Date: Mon, 13 Apr 2026 09:53:33 +0100 Subject: [PATCH 1/2] add timestamp to objects and views --- package-lock.json | 10 +++++ package.json | 1 + src/app/batches/[height]/page.tsx | 13 ++++++ src/app/blocks/[hash]/page.tsx | 42 ++++++++++++++++++- .../settlements/[transactionHash]/page.tsx | 21 +++++++++- src/app/transactions/[hash]/page.tsx | 9 ++++ src/components/batches/BatchesPageClient.tsx | 13 +++++- src/components/blocks/BlocksPageClient.tsx | 15 +++++-- src/components/dashboard/DashboardStats.tsx | 2 +- .../settlements/settlementsPageClient.tsx | 9 +++- .../transactions/TransactionsPageClient.tsx | 11 ++++- 11 files changed, 133 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5029598..19aa32e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,6 +28,7 @@ "react": "^18", "react-dom": "^18", "react-hook-form": "^7.52.0", + "react-timeago": "^8.3.0", "react-truncate-inside": "^1.0.3", "tailwind-merge": "^2.3.0", "tailwindcss-animate": "^1.0.7", @@ -6015,6 +6016,15 @@ } } }, + "node_modules/react-timeago": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/react-timeago/-/react-timeago-8.3.0.tgz", + "integrity": "sha512-BeR0hj/5qqTc2+zxzBSQZMky6MmqwOtKseU3CSmcjKR5uXerej2QY34v2d+cdz11PoeVfAdWLX+qjM/UdZkUUg==", + "license": "MIT", + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/react-truncate-inside": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/react-truncate-inside/-/react-truncate-inside-1.0.3.tgz", diff --git a/package.json b/package.json index f8237df..8a2e932 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "react": "^18", "react-dom": "^18", "react-hook-form": "^7.52.0", + "react-timeago": "^8.3.0", "react-truncate-inside": "^1.0.3", "tailwind-merge": "^2.3.0", "tailwindcss-animate": "^1.0.7", diff --git a/src/app/batches/[height]/page.tsx b/src/app/batches/[height]/page.tsx index 4944c2d..e83db53 100644 --- a/src/app/batches/[height]/page.tsx +++ b/src/app/batches/[height]/page.tsx @@ -4,6 +4,7 @@ import { useParams } from "next/navigation"; import { useCallback, useEffect, useState } from "react"; +import TimeAgo from "react-timeago"; import { DetailsLayout } from "@/components/details/layout"; import DataTable from "@/components/ui/DataTable"; @@ -18,6 +19,7 @@ export interface GetBatchQueryResponse { blocks: { height: string; hash: string; + createdAt: string; result: { stateRoot: string; }; @@ -27,6 +29,7 @@ export interface GetBatchQueryResponse { }[]; settlementTransactionHash: string; height: string; + createdAt: string; } | undefined; }; @@ -43,9 +46,11 @@ export default function BatchDetail() { batch(where: { height: $height }) { height settlementTransactionHash + createdAt blocks { height hash + createdAt result { stateRoot } _count { transactions } } @@ -90,6 +95,12 @@ export default function BatchDetail() { label: "Blocks", value: `${data?.batch?.blocks?.length ?? "—"}`, }, + { + label: "Created At", + value: data?.batch?.createdAt + ? + : "—", + }, ]; const blocks: TableItem[] = (data?.batch?.blocks || []).map((item) => ({ @@ -97,6 +108,7 @@ export default function BatchDetail() { hash: item.hash, transactions: item._count?.transactions?.toString(), stateRoot: item.result?.stateRoot, + createdAt: item.createdAt, })); return ( @@ -118,6 +130,7 @@ export default function BatchDetail() { loading={loading} navigationPath="/blocks/{hash}" copyKeys={["hash", "stateRoot"]} + columnRenderers={{ createdAt: (item) => }} /> ); diff --git a/src/app/blocks/[hash]/page.tsx b/src/app/blocks/[hash]/page.tsx index ed75f88..0d67c9a 100644 --- a/src/app/blocks/[hash]/page.tsx +++ b/src/app/blocks/[hash]/page.tsx @@ -2,6 +2,8 @@ import { useParams } from "next/navigation"; import { useCallback, useEffect, useState } from "react"; +import TimeAgo from "react-timeago"; +import { CircleCheck, CircleX } from "lucide-react"; import { DetailsLayout } from "@/components/details/layout"; import DataTable from "@/components/ui/DataTable"; @@ -18,6 +20,7 @@ export interface GetBlockQueryResponse { | { hash: string; height: string; + createdAt: string; result: { stateRoot: string; }; @@ -27,6 +30,7 @@ export interface GetBlockQueryResponse { sender: string; methodId: string; nonce: string; + createdAt: string; }; status: boolean; statusMessage?: string; @@ -48,9 +52,10 @@ export default function BlockDetail() { block(where: { hash: $hash }) { height hash + createdAt result { stateRoot } transactions { - tx { hash, methodId, sender, nonce } + tx { hash, methodId, sender, nonce, createdAt } status statusMessage } @@ -99,6 +104,14 @@ export default function BlockDetail() { label: "StateRoot", value: data?.block?.result.stateRoot ?? "—", }, + { + label: "Created At", + value: data?.block?.createdAt ? ( + + ) : ( + "—" + ), + }, ]; const transactions: TableItem[] = (data?.block?.transactions || []).map( @@ -108,9 +121,30 @@ export default function BlockDetail() { isSuccess: tx.status === true, message: tx.statusMessage, }, - }) + }), ); + const statusRenderer = (item: TableItem) => { + const { isSuccess, message } = item.status; + + return ( +
+ {isSuccess === true ? ( + + ) : ( + <> + + {message !== undefined && ( + + {message} + + )} + + )} +
+ ); + }; + return ( , + status: statusRenderer, + }} /> ); diff --git a/src/app/settlements/[transactionHash]/page.tsx b/src/app/settlements/[transactionHash]/page.tsx index e7f9d91..c4092c2 100644 --- a/src/app/settlements/[transactionHash]/page.tsx +++ b/src/app/settlements/[transactionHash]/page.tsx @@ -4,6 +4,7 @@ import { useParams } from "next/navigation"; import { useCallback, useEffect, useState } from "react"; +import TimeAgo from "react-timeago"; import Truncate from "react-truncate-inside/es"; import { DetailsLayout } from "@/components/details/layout"; @@ -19,12 +20,14 @@ export interface GetSettlementQueryResponse { batches: { height: string; settlementTransactionHash: string; + createdAt: string; _count: { blocks: number; }; }[]; transactionHash: string; promisedMessagesHash: string; + createdAt: string; } | undefined; }; @@ -42,10 +45,12 @@ export default function SettlementDetail() { batches { height settlementTransactionHash + createdAt _count { blocks } } transactionHash promisedMessagesHash + createdAt } }`; @@ -61,7 +66,7 @@ export default function SettlementDetail() { }); try { const response = typed( - await responseData.json() + await responseData.json(), ); setData(response.data); setLoading(false); @@ -89,6 +94,14 @@ export default function SettlementDetail() { label: "Batches", value: `${data?.settlement?.batches?.length ?? "—"}`, }, + { + label: "Created At", + value: data?.settlement?.createdAt ? ( + + ) : ( + "—" + ), + }, ]; const batches: TableItem[] = (data?.settlement?.batches || []).map( @@ -96,7 +109,8 @@ export default function SettlementDetail() { height: item.height, settlementTransactionHash: item.settlementTransactionHash, blocks: item._count?.blocks?.toString(), - }) + createdAt: item.createdAt, + }), ); return ( @@ -124,6 +138,9 @@ export default function SettlementDetail() { loading={loading} navigationPath="/batches/{height}" copyKeys={["settlementTransactionHash"]} + columnRenderers={{ + createdAt: (item) => , + }} /> ); diff --git a/src/app/transactions/[hash]/page.tsx b/src/app/transactions/[hash]/page.tsx index 255ada2..f688b5a 100644 --- a/src/app/transactions/[hash]/page.tsx +++ b/src/app/transactions/[hash]/page.tsx @@ -3,6 +3,7 @@ import { CircleCheck, CircleX } from "lucide-react"; import { useCallback, useEffect, useState } from "react"; import { useParams } from "next/navigation"; +import TimeAgo from "react-timeago"; import Truncate from "react-truncate-inside/es"; import { DetailsLayout } from "@/components/details/layout"; @@ -13,6 +14,7 @@ interface Transaction { sender: string; methodId: string; nonce: string; + createdAt: string; executionResult: { status: boolean; statusMessage?: string; @@ -44,6 +46,7 @@ export default function BlockDetail() { methodId sender nonce + createdAt executionResult { status statusMessage @@ -131,6 +134,12 @@ export default function BlockDetail() { label: "Sender", value: data?.transaction?.sender ?? "—", }, + { + label: "Created At", + value: data?.transaction?.createdAt + ? + : "—", + }, ]; return ( diff --git a/src/components/batches/BatchesPageClient.tsx b/src/components/batches/BatchesPageClient.tsx index 8236076..cbe36db 100644 --- a/src/components/batches/BatchesPageClient.tsx +++ b/src/components/batches/BatchesPageClient.tsx @@ -3,6 +3,7 @@ /* eslint-disable no-underscore-dangle */ import { useCallback, useEffect, useState } from "react"; +import TimeAgo from "react-timeago"; import { z } from "zod"; import useQueryParams from "@/hooks/use-query-params"; @@ -16,6 +17,7 @@ export interface TableItem { height: string; blocks: string; settlementTransactionHash: string; + createdAt: string; } export interface GetBatchesQueryResponse { @@ -23,6 +25,7 @@ export interface GetBatchesQueryResponse { batches: { height: string; settlementTransactionHash: string; + createdAt: string; _count: { blocks: number; }; @@ -39,6 +42,7 @@ export const columns: Record = { height: "Height", blocks: "Blocks", settlementTransactionHash: "Settlement Transaction Hash", + createdAt: "Created At", }; const formSchema = z.object({ @@ -70,6 +74,7 @@ const graphqlQuery = `query GetBatches($take: Int!, $skip: Int!, $where: BatchWh batches(take: $take, skip: $skip, orderBy: {height: desc}, where: $where) { settlementTransactionHash height + createdAt _count { blocks } } aggregateBatch(where: $where) { _count { _all } } @@ -78,7 +83,7 @@ const graphqlQuery = `query GetBatches($take: Int!, $skip: Int!, $where: BatchWh export default function BatchesPageClient() { const [page, view, filters, setPage, setView, setFilters] = useQueryParams( columns, - querySchema + querySchema, ); const [data, setData] = useState([]); @@ -110,11 +115,12 @@ export default function BatchesPageClient() { height: item.height, settlementTransactionHash: item.settlementTransactionHash, blocks: item._count?.blocks?.toString() || "0", + createdAt: item.createdAt, })); setData(mappedItems); setTotalCount( - result.data?.aggregateBatch?._count?._all?.toString() || "0" + result.data?.aggregateBatch?._count?._all?.toString() || "0", ); setLoading(false); } catch (error) { @@ -146,6 +152,9 @@ export default function BatchesPageClient() { onViewChange={setView} navigationPath="/batches/{height}" copyKeys={["settlementTransactionHash"]} + columnRenderers={{ + createdAt: (item) => , + }} /> ); } diff --git a/src/components/blocks/BlocksPageClient.tsx b/src/components/blocks/BlocksPageClient.tsx index a949c40..9042902 100644 --- a/src/components/blocks/BlocksPageClient.tsx +++ b/src/components/blocks/BlocksPageClient.tsx @@ -3,6 +3,7 @@ /* eslint-disable no-underscore-dangle */ import { useCallback, useEffect, useState } from "react"; +import TimeAgo from "react-timeago"; import { z } from "zod"; import DataTable from "@/components/ui/DataTable"; @@ -16,6 +17,7 @@ export interface TableItem { hash: string; transactions: string; stateRoot: string; + createdAt: string; } export interface GetBlocksQueryResponse { @@ -23,6 +25,7 @@ export interface GetBlocksQueryResponse { blocks: { height: string; hash: string; + createdAt: string; result: { stateRoot: string; }; @@ -43,6 +46,7 @@ export const columns: Record = { hash: "Hash", transactions: "Transactions", stateRoot: "State Root", + createdAt: "Created At", }; const formSchema = z.object({ @@ -83,6 +87,7 @@ const graphqlQuery = `query GetBlocks($take: Int!, $skip: Int!, $where: BlockWhe blocks(take: $take, skip: $skip, orderBy: {height: desc}, where: $where) { height hash + createdAt result { stateRoot } _count { transactions } } @@ -91,7 +96,7 @@ const graphqlQuery = `query GetBlocks($take: Int!, $skip: Int!, $where: BlockWhe const queryTransformer = ( filters: Record, - schema: Record + schema: Record, ) => { const where: Record = {}; Object.entries(filters).forEach(([key, value]) => { @@ -123,7 +128,7 @@ const queryTransformer = ( export default function BlocksPageClient() { const [page, view, filters, setPage, setView, setFilters] = useQueryParams( columns, - querySchema + querySchema, ); const [data, setData] = useState([]); const [totalCount, setTotalCount] = useState("0"); @@ -156,11 +161,12 @@ export default function BlocksPageClient() { hash: item.hash, transactions: item._count?.transactions?.toString(), stateRoot: item.result.stateRoot, + createdAt: item.createdAt, })); setData(mappedItems); setTotalCount( - result.data?.aggregateBlock?._count?._all?.toString() || "0" + result.data?.aggregateBlock?._count?._all?.toString() || "0", ); setLoading(false); } catch (error) { @@ -191,6 +197,9 @@ export default function BlocksPageClient() { onViewChange={setView} navigationPath="/blocks/{hash}" copyKeys={["hash", "stateRoot"]} + columnRenderers={{ + createdAt: (item) => , + }} /> ); } diff --git a/src/components/dashboard/DashboardStats.tsx b/src/components/dashboard/DashboardStats.tsx index 4be9887..caaf2bb 100644 --- a/src/components/dashboard/DashboardStats.tsx +++ b/src/components/dashboard/DashboardStats.tsx @@ -141,7 +141,7 @@ export default function DashboardStats() { height hash } - settlements(take: 1, orderBy: { transactionHash: desc }) { + settlements(take: 1, orderBy: { createdAt: desc }) { transactionHash promisedMessagesHash } diff --git a/src/components/settlements/settlementsPageClient.tsx b/src/components/settlements/settlementsPageClient.tsx index f769c69..662a228 100644 --- a/src/components/settlements/settlementsPageClient.tsx +++ b/src/components/settlements/settlementsPageClient.tsx @@ -3,6 +3,7 @@ /* eslint-disable no-underscore-dangle */ import { useCallback, useEffect, useState } from "react"; +import TimeAgo from "react-timeago"; import { z } from "zod"; import DataTable from "@/components/ui/DataTable"; @@ -16,6 +17,7 @@ export interface TableItem { transactionHash: string; promisedMessagesHash: string; batches: string; + createdAt: string; } export interface GetSettlementsQueryResponse { @@ -23,6 +25,7 @@ export interface GetSettlementsQueryResponse { settlements: { transactionHash: string; promisedMessagesHash: string; + createdAt: string; _count: { batches: number; }; @@ -39,6 +42,7 @@ export const columns: Record = { transactionHash: "Transaction Hash", promisedMessagesHash: "Promised Messages Hash", batches: "Batches", + createdAt: "Created At", }; const formSchema = z.object({ @@ -67,9 +71,10 @@ const fields: FilterFieldDef[] = [ ]; const graphqlQuery = `query GetSettlements($take: Int!, $skip: Int!, $where: SettlementWhereInput) { - settlements(take: $take, skip: $skip, where: $where) { + settlements(take: $take, skip: $skip, orderBy: { createdAt: desc }, where: $where) { transactionHash promisedMessagesHash + createdAt _count { batches } } aggregateSettlement(where: $where) { _count { _all } } @@ -112,6 +117,7 @@ export default function SettlementsPageClient() { transactionHash: item.transactionHash, promisedMessagesHash: item.promisedMessagesHash, batches: item._count?.batches?.toString() || "0", + createdAt: item.createdAt, })); setData(mappedItems); @@ -148,6 +154,7 @@ export default function SettlementsPageClient() { onViewChange={setView} navigationPath="/settlements/{transactionHash}" copyKeys={["transactionHash", "promisedMessagesHash"]} + columnRenderers={{ createdAt: (item) => }} /> ); } diff --git a/src/components/transactions/TransactionsPageClient.tsx b/src/components/transactions/TransactionsPageClient.tsx index f02206e..2c537be 100644 --- a/src/components/transactions/TransactionsPageClient.tsx +++ b/src/components/transactions/TransactionsPageClient.tsx @@ -3,6 +3,7 @@ /* eslint-disable no-underscore-dangle */ import { useCallback, useEffect, useState } from "react"; +import TimeAgo from "react-timeago"; import { z } from "zod"; import { CircleCheck, CircleX } from "lucide-react"; @@ -20,6 +21,7 @@ export interface GetTransactionsQueryResponse { sender: string; methodId: string; nonce: string; + createdAt: string; executionResult: { status: boolean; statusMessage?: string; @@ -38,6 +40,7 @@ export interface TableItem { methodId: string; sender: string; nonce: string; + createdAt: string; status: { isSuccess: boolean; message?: string }; } @@ -46,6 +49,7 @@ export const columns: Record = { methodId: "Method ID", sender: "Sender", nonce: "Nonce", + createdAt: "Created At", status: "Status", }; @@ -83,11 +87,12 @@ const fields: FilterFieldDef[] = [ ]; const graphqlQuery = `query GetTransactions($take: Int!, $skip: Int!, $where: TransactionWhereInput) { - transactions(take: $take, skip: $skip, where: $where) { + transactions(take: $take, skip: $skip, orderBy: { createdAt: desc }, where: $where) { methodId hash nonce sender + createdAt executionResult { status statusMessage @@ -116,6 +121,7 @@ const statusRenderer = (item: TableItem) => { ); }; + export default function TransactionsPageClient() { const [page, view, filters, setPage, setView, setFilters] = useQueryParams( columns, @@ -160,6 +166,7 @@ export default function TransactionsPageClient() { methodId: item.methodId, sender: item.sender, nonce: item.nonce, + createdAt: item.createdAt, status: statusDisplay, }; }); @@ -196,7 +203,7 @@ export default function TransactionsPageClient() { onViewChange={setView} navigationPath="/transactions/{hash}" copyKeys={["hash", "sender", "methodId"]} - columnRenderers={{ status: statusRenderer }} + columnRenderers={{ status: statusRenderer, createdAt: (item) => }} /> ); } From 3d1392cbbd844f785d21474e6bd2edc4a1aff7fb Mon Sep 17 00:00:00 2001 From: stanlou Date: Tue, 21 Apr 2026 22:47:50 +0100 Subject: [PATCH 2/2] update transaction timestamp --- src/app/batches/[height]/page.tsx | 2 +- src/app/blocks/[hash]/page.tsx | 6 +++--- src/app/settlements/[transactionHash]/page.tsx | 2 +- src/app/transactions/[hash]/page.tsx | 13 ++++++------- src/components/batches/BatchesPageClient.tsx | 2 +- src/components/blocks/BlocksPageClient.tsx | 2 +- .../settlements/settlementsPageClient.tsx | 2 +- .../transactions/TransactionsPageClient.tsx | 14 +++++++++----- 8 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/app/batches/[height]/page.tsx b/src/app/batches/[height]/page.tsx index e83db53..ba5c756 100644 --- a/src/app/batches/[height]/page.tsx +++ b/src/app/batches/[height]/page.tsx @@ -96,7 +96,7 @@ export default function BatchDetail() { value: `${data?.batch?.blocks?.length ?? "—"}`, }, { - label: "Created At", + label: "Created", value: data?.batch?.createdAt ? : "—", diff --git a/src/app/blocks/[hash]/page.tsx b/src/app/blocks/[hash]/page.tsx index 0d67c9a..a9a20da 100644 --- a/src/app/blocks/[hash]/page.tsx +++ b/src/app/blocks/[hash]/page.tsx @@ -30,7 +30,6 @@ export interface GetBlockQueryResponse { sender: string; methodId: string; nonce: string; - createdAt: string; }; status: boolean; statusMessage?: string; @@ -55,7 +54,7 @@ export default function BlockDetail() { createdAt result { stateRoot } transactions { - tx { hash, methodId, sender, nonce, createdAt } + tx { hash, methodId, sender, nonce } status statusMessage } @@ -105,7 +104,7 @@ export default function BlockDetail() { value: data?.block?.result.stateRoot ?? "—", }, { - label: "Created At", + label: "Created", value: data?.block?.createdAt ? ( ) : ( @@ -117,6 +116,7 @@ export default function BlockDetail() { const transactions: TableItem[] = (data?.block?.transactions || []).map( (tx) => ({ ...tx.tx, + createdAt: data?.block?.createdAt || "", status: { isSuccess: tx.status === true, message: tx.statusMessage, diff --git a/src/app/settlements/[transactionHash]/page.tsx b/src/app/settlements/[transactionHash]/page.tsx index c4092c2..1ec6cb6 100644 --- a/src/app/settlements/[transactionHash]/page.tsx +++ b/src/app/settlements/[transactionHash]/page.tsx @@ -95,7 +95,7 @@ export default function SettlementDetail() { value: `${data?.settlement?.batches?.length ?? "—"}`, }, { - label: "Created At", + label: "Created", value: data?.settlement?.createdAt ? ( ) : ( diff --git a/src/app/transactions/[hash]/page.tsx b/src/app/transactions/[hash]/page.tsx index f688b5a..5911ad7 100644 --- a/src/app/transactions/[hash]/page.tsx +++ b/src/app/transactions/[hash]/page.tsx @@ -14,11 +14,11 @@ interface Transaction { sender: string; methodId: string; nonce: string; - createdAt: string; executionResult: { status: boolean; statusMessage?: string; block: { + createdAt: string; batch: { proof: string | null; settlementTransactionHash: string | null; @@ -34,7 +34,7 @@ export interface GetTransactionQueryResponse { }; } -export default function BlockDetail() { +export default function TransactionDetail() { const params = useParams<{ hash: string }>(); const [data, setData] = useState(); const [loading, setLoading] = useState(true); @@ -46,11 +46,10 @@ export default function BlockDetail() { methodId sender nonce - createdAt executionResult { status statusMessage - block { batch { proof settlementTransactionHash } } + block { createdAt batch { proof settlementTransactionHash } } } } }`; @@ -135,9 +134,9 @@ export default function BlockDetail() { value: data?.transaction?.sender ?? "—", }, { - label: "Created At", - value: data?.transaction?.createdAt - ? + label: "Created", + value: data?.transaction?.executionResult?.block?.createdAt + ? : "—", }, ]; diff --git a/src/components/batches/BatchesPageClient.tsx b/src/components/batches/BatchesPageClient.tsx index cbe36db..81a297a 100644 --- a/src/components/batches/BatchesPageClient.tsx +++ b/src/components/batches/BatchesPageClient.tsx @@ -42,7 +42,7 @@ export const columns: Record = { height: "Height", blocks: "Blocks", settlementTransactionHash: "Settlement Transaction Hash", - createdAt: "Created At", + createdAt: "Created", }; const formSchema = z.object({ diff --git a/src/components/blocks/BlocksPageClient.tsx b/src/components/blocks/BlocksPageClient.tsx index 9042902..6dad5ef 100644 --- a/src/components/blocks/BlocksPageClient.tsx +++ b/src/components/blocks/BlocksPageClient.tsx @@ -46,7 +46,7 @@ export const columns: Record = { hash: "Hash", transactions: "Transactions", stateRoot: "State Root", - createdAt: "Created At", + createdAt: "Created", }; const formSchema = z.object({ diff --git a/src/components/settlements/settlementsPageClient.tsx b/src/components/settlements/settlementsPageClient.tsx index 662a228..6e1686e 100644 --- a/src/components/settlements/settlementsPageClient.tsx +++ b/src/components/settlements/settlementsPageClient.tsx @@ -42,7 +42,7 @@ export const columns: Record = { transactionHash: "Transaction Hash", promisedMessagesHash: "Promised Messages Hash", batches: "Batches", - createdAt: "Created At", + createdAt: "Created", }; const formSchema = z.object({ diff --git a/src/components/transactions/TransactionsPageClient.tsx b/src/components/transactions/TransactionsPageClient.tsx index 2c537be..c091175 100644 --- a/src/components/transactions/TransactionsPageClient.tsx +++ b/src/components/transactions/TransactionsPageClient.tsx @@ -21,10 +21,12 @@ export interface GetTransactionsQueryResponse { sender: string; methodId: string; nonce: string; - createdAt: string; executionResult: { status: boolean; statusMessage?: string; + block: { + createdAt: string; + }; }; }[]; aggregateTransaction: { @@ -49,7 +51,7 @@ export const columns: Record = { methodId: "Method ID", sender: "Sender", nonce: "Nonce", - createdAt: "Created At", + createdAt: "Created", status: "Status", }; @@ -87,15 +89,17 @@ const fields: FilterFieldDef[] = [ ]; const graphqlQuery = `query GetTransactions($take: Int!, $skip: Int!, $where: TransactionWhereInput) { - transactions(take: $take, skip: $skip, orderBy: { createdAt: desc }, where: $where) { + transactions(take: $take, skip: $skip, orderBy: { executionResult: { block: { createdAt: desc } } }, where: $where) { methodId hash nonce sender - createdAt executionResult { status statusMessage + block { + createdAt + } } } aggregateTransaction(where: $where) { @@ -166,7 +170,7 @@ export default function TransactionsPageClient() { methodId: item.methodId, sender: item.sender, nonce: item.nonce, - createdAt: item.createdAt, + createdAt: item.executionResult?.block?.createdAt || "-", status: statusDisplay, }; });