@@ -10,6 +10,7 @@ import { renderProviderText } from "../../utils";
1010import { Tooltip } from "../../components/Tooltip" ;
1111import useAccount from "../../hooks/useAccount" ;
1212import { Popover , PopoverDisclosure , usePopoverStore } from "@ariakit/react/popover" ;
13+ import { useQuery } from "@tanstack/react-query" ;
1314
1415// Test functions for trace and archive support
1516const testTraceSupport = async ( rpcUrl ) => {
@@ -63,45 +64,11 @@ const testArchiveSupport = async (rpcUrl) => {
6364
6465export 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