Skip to content

Commit 7c60ca5

Browse files
committed
refactor
1 parent 1557f18 commit 7c60ca5

File tree

1 file changed

+29
-46
lines changed

1 file changed

+29
-46
lines changed

components/RPCList/index.js

Lines changed: 29 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { renderProviderText } from "../../utils";
1010
import { Tooltip } from "../../components/Tooltip";
1111
import useAccount from "../../hooks/useAccount";
1212
import { Popover, PopoverDisclosure, usePopoverStore } from "@ariakit/react/popover";
13+
import { useQuery } from "@tanstack/react-query";
1314

1415
// Test functions for trace and archive support
1516
const testTraceSupport = async (rpcUrl) => {
@@ -63,45 +64,11 @@ const testArchiveSupport = async (rpcUrl) => {
6364

6465
export default function RPCList({ chain, lang }) {
6566
const [sortChains, setSorting] = useState(true);
66-
const [supportCache, setSupportCache] = useState({});
6767

6868
const urlToData = chain.rpc.reduce((all, c) => ({ ...all, [c.url]: c }), {});
6969

7070
const chains = useRPCData(chain.rpc);
7171

72-
// Test trace and archive support for each RPC
73-
useEffect(() => {
74-
const testSupport = async () => {
75-
const newCache = { ...supportCache };
76-
77-
for (const chain of chains || []) {
78-
if (chain.data?.url && !supportCache[chain.data.url]) {
79-
newCache[chain.data.url] = {
80-
trace: "testing",
81-
archive: "testing"
82-
};
83-
84-
// Test both features in parallel
85-
const [traceResult, archiveResult] = await Promise.all([
86-
testTraceSupport(chain.data.url),
87-
testArchiveSupport(chain.data.url)
88-
]);
89-
90-
newCache[chain.data.url] = {
91-
trace: traceResult,
92-
archive: archiveResult
93-
};
94-
}
95-
}
96-
97-
setSupportCache(newCache);
98-
};
99-
100-
if (chains?.length > 0) {
101-
testSupport();
102-
}
103-
}, [chains]);
104-
10572
const data = useMemo(() => {
10673
const sortedData = sortChains
10774
? chains?.sort((a, b) => {
@@ -154,23 +121,18 @@ export default function RPCList({ chain, lang }) {
154121

155122
const lat = latency ? (latency / 1000).toFixed(3) + "s" : null;
156123

157-
// Add trace and archive support data
158-
const support = supportCache[url] || { trace: "unknown", archive: "unknown" };
159-
160124
return {
161125
...rest,
162126
data: {
163127
...data,
164128
height,
165129
latency: lat,
166130
trust,
167-
disableConnect,
168-
traceSupport: support.trace,
169-
archiveSupport: support.archive
131+
disableConnect
170132
},
171133
};
172134
});
173-
}, [chains, supportCache]);
135+
}, [chains]);
174136

175137
const { rpcData, hasLlamaNodesRpc } = useLlamaNodesRpcData(chain.chainId, data);
176138

@@ -296,7 +258,28 @@ const Row = ({ values, chain, privacy, lang, className }) => {
296258

297259
const { mutate: addToNetwork } = useAddToNetwork();
298260

299-
const getTooltipContent = (support, type) => {
261+
262+
const traceSupport = useQuery({
263+
queryKey: ["support", data?.url],
264+
queryFn: () => testTraceSupport(data?.url),
265+
staleTime: 1000 * 60 * 60,
266+
refetchInterval: 1000 * 60 * 60,
267+
refetchOnMount: false,
268+
refetchOnWindowFocus: false,
269+
enabled: !!data?.url,
270+
})
271+
272+
const archiveSupport = useQuery({
273+
queryKey: ["support", data?.url],
274+
queryFn: () => testArchiveSupport(data?.url),
275+
staleTime: 1000 * 60 * 60,
276+
refetchInterval: 1000 * 60 * 60,
277+
refetchOnMount: false,
278+
refetchOnWindowFocus: false,
279+
enabled: !!data?.url,
280+
})
281+
282+
const getSupportTooltipContent = (support, type) => {
300283
switch (support) {
301284
case "supported":
302285
return `${type} methods are supported`;
@@ -339,13 +322,13 @@ const Row = ({ values, chain, privacy, lang, className }) => {
339322
</Tooltip>
340323
</td>
341324
<td className="px-3 py-1 text-sm border">
342-
<Tooltip content={getTooltipContent(data?.traceSupport, "Trace")}>
343-
{isLoading ? <Shimmer /> : <SupportIcon support={data?.traceSupport} />}
325+
<Tooltip content={getSupportTooltipContent(traceSupport.isLoading ? 'testing' : traceSupport?.data ?? 'unknown', "Trace")}>
326+
{isLoading ? <Shimmer /> : <SupportIcon support={traceSupport.isLoading ? 'testing' : traceSupport?.data ?? 'unknown'} />}
344327
</Tooltip>
345328
</td>
346329
<td className="px-3 py-1 text-sm border">
347-
<Tooltip content={getTooltipContent(data?.archiveSupport, "Archive")}>
348-
{isLoading ? <Shimmer /> : <SupportIcon support={data?.archiveSupport} />}
330+
<Tooltip content={getSupportTooltipContent(archiveSupport.isLoading ? 'testing' : archiveSupport?.data ?? 'unknown', "Archive")}>
331+
{isLoading ? <Shimmer /> : <SupportIcon support={archiveSupport.isLoading ? 'testing' : archiveSupport?.data ?? 'unknown'} />}
349332
</Tooltip>
350333
</td>
351334
<td className="px-3 py-1 text-sm text-center border">

0 commit comments

Comments
 (0)