Skip to content

Commit f1b890b

Browse files
committed
add state to query filters
1 parent 004349f commit f1b890b

1 file changed

Lines changed: 24 additions & 24 deletions

File tree

packages/explorer/src/app/(explorer)/[chainName]/worlds/[worldAddress]/observe/TransactionsTable.tsx

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"use client";
22

33
import { BoxIcon, CheckCheckIcon, ReceiptTextIcon, UserPenIcon, XIcon } from "lucide-react";
4+
import { parseAsString, useQueryState } from "nuqs";
45
import React, { useEffect, useMemo, useState } from "react";
56
import { useInView } from "react-intersection-observer";
67
import { ExpandedState, flexRender, getCoreRowModel, getExpandedRowModel, useReactTable } from "@tanstack/react-table";
@@ -122,13 +123,12 @@ export function TransactionsTable() {
122123
const { data: indexedTransactions, fetchNextPage } = useTransactionsQuery();
123124
const loadedInitialTransactions = Array.isArray(indexedTransactions) && indexedTransactions.length > 0;
124125
const [expanded, setExpanded] = useState<ExpandedState>({});
125-
const [filters, setFilters] = useState({
126-
blockNumber: "",
127-
from: "",
128-
calls: "",
129-
hash: "",
130-
timestamp: "",
131-
});
126+
127+
const [blockNumberFilter, setBlockNumberFilter] = useQueryState("blockNumber", parseAsString.withDefault(""));
128+
const [fromFilter, setFromFilter] = useQueryState("from", parseAsString.withDefault(""));
129+
const [callsFilter, setCallsFilter] = useQueryState("calls", parseAsString.withDefault(""));
130+
const [hashFilter, setHashFilter] = useQueryState("hash", parseAsString.withDefault(""));
131+
const [timestampFilter, setTimestampFilter] = useQueryState("timestamp", parseAsString.withDefault(""));
132132

133133
useEffect(() => {
134134
if (inView) {
@@ -139,27 +139,27 @@ export function TransactionsTable() {
139139
// Filter transactions based on filter values
140140
const filteredTransactions = useMemo(() => {
141141
return transactions.filter((transaction) => {
142-
if (filters.blockNumber && !transaction.blockNumber?.toString().includes(filters.blockNumber)) {
142+
if (blockNumberFilter && !transaction.blockNumber?.toString().includes(blockNumberFilter)) {
143143
return false;
144144
}
145-
if (filters.from && !transaction.from?.toLowerCase().includes(filters.from.toLowerCase())) {
145+
if (fromFilter && !transaction.from?.toLowerCase().includes(fromFilter.toLowerCase())) {
146146
return false;
147147
}
148148
if (
149-
filters.calls &&
150-
!transaction.calls?.some((call) => call.functionName?.toLowerCase().includes(filters.calls.toLowerCase()))
149+
callsFilter &&
150+
!transaction.calls?.some((call) => call.functionName?.toLowerCase().includes(callsFilter.toLowerCase()))
151151
) {
152152
return false;
153153
}
154-
if (filters.hash && !transaction.hash?.toLowerCase().includes(filters.hash.toLowerCase())) {
154+
if (hashFilter && !transaction.hash?.toLowerCase().includes(hashFilter.toLowerCase())) {
155155
return false;
156156
}
157-
if (filters.timestamp && !transaction.timestamp?.toString().includes(filters.timestamp)) {
157+
if (timestampFilter && !transaction.timestamp?.toString().includes(timestampFilter)) {
158158
return false;
159159
}
160160
return true;
161161
});
162-
}, [transactions, filters]);
162+
}, [transactions, blockNumberFilter, fromFilter, callsFilter, hashFilter, timestampFilter]);
163163

164164
const table = useReactTable({
165165
data: filteredTransactions,
@@ -181,44 +181,44 @@ export function TransactionsTable() {
181181
<label className="text-xs font-medium uppercase text-muted-foreground">Block</label>
182182
<Input
183183
placeholder="Filter block..."
184-
value={filters.blockNumber}
185-
onChange={(e) => setFilters((prev) => ({ ...prev, blockNumber: e.target.value }))}
184+
value={blockNumberFilter}
185+
onChange={(e) => setBlockNumberFilter(e.target.value)}
186186
className="h-8 text-xs"
187187
/>
188188
</div>
189189
<div className="space-y-2">
190190
<label className="text-xs font-medium uppercase text-muted-foreground">From</label>
191191
<Input
192192
placeholder="Filter address..."
193-
value={filters.from}
194-
onChange={(e) => setFilters((prev) => ({ ...prev, from: e.target.value }))}
193+
value={fromFilter}
194+
onChange={(e) => setFromFilter(e.target.value)}
195195
className="h-8 text-xs"
196196
/>
197197
</div>
198198
<div className="space-y-2">
199199
<label className="text-xs font-medium uppercase text-muted-foreground">Functions</label>
200200
<Input
201201
placeholder="Filter functions..."
202-
value={filters.calls}
203-
onChange={(e) => setFilters((prev) => ({ ...prev, calls: e.target.value }))}
202+
value={callsFilter}
203+
onChange={(e) => setCallsFilter(e.target.value)}
204204
className="h-8 text-xs"
205205
/>
206206
</div>
207207
<div className="space-y-2">
208208
<label className="text-xs font-medium uppercase text-muted-foreground">Tx Hash</label>
209209
<Input
210210
placeholder="Filter hash..."
211-
value={filters.hash}
212-
onChange={(e) => setFilters((prev) => ({ ...prev, hash: e.target.value }))}
211+
value={hashFilter}
212+
onChange={(e) => setHashFilter(e.target.value)}
213213
className="h-8 text-xs"
214214
/>
215215
</div>
216216
<div className="space-y-2">
217217
<label className="text-xs font-medium uppercase text-muted-foreground">Time</label>
218218
<Input
219219
placeholder="Filter time..."
220-
value={filters.timestamp}
221-
onChange={(e) => setFilters((prev) => ({ ...prev, timestamp: e.target.value }))}
220+
value={timestampFilter}
221+
onChange={(e) => setTimestampFilter(e.target.value)}
222222
className="h-8 text-xs"
223223
/>
224224
</div>

0 commit comments

Comments
 (0)