Add caching on tanstack queries
This commit is contained in:
@@ -239,6 +239,7 @@ export const fetchObservatoryNodes = async (): Promise<IObservatoryNode[]> => {
|
||||
page++; // Move to the next page
|
||||
}
|
||||
}
|
||||
console.log("fetching nodes")
|
||||
|
||||
return allNodes;
|
||||
};
|
||||
|
||||
@@ -70,6 +70,9 @@ export const AccountBalancesCard = (props: IAccountBalancesCardProps) => {
|
||||
queryKey: ["accountBalance", address],
|
||||
queryFn: () => fetchAccountBalance(address),
|
||||
enabled: !!address,
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
|
||||
const {
|
||||
@@ -79,6 +82,9 @@ export const AccountBalancesCard = (props: IAccountBalancesCardProps) => {
|
||||
} = useQuery({
|
||||
queryKey: ["nymPrice"],
|
||||
queryFn: fetchNymPrice,
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
|
||||
if (isLoading || isLoadingPrice) {
|
||||
@@ -120,9 +126,9 @@ export const AccountBalancesCard = (props: IAccountBalancesCardProps) => {
|
||||
const spendableAllocation =
|
||||
accountInfo.balances.length > 0
|
||||
? getAllocation(
|
||||
Number(accountInfo.balances[0].amount),
|
||||
Number(accountInfo.total_value.amount),
|
||||
)
|
||||
Number(accountInfo.balances[0].amount),
|
||||
Number(accountInfo.total_value.amount),
|
||||
)
|
||||
: 0;
|
||||
|
||||
const delegationsNYM = getNymsFormated(
|
||||
|
||||
@@ -18,6 +18,9 @@ export const AccountInfoCard = (props: IAccountInfoCardProps) => {
|
||||
queryKey: ["accountBalance", address],
|
||||
queryFn: () => fetchAccountBalance(address),
|
||||
enabled: !!address,
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
|
||||
if (isLoading) {
|
||||
|
||||
@@ -15,6 +15,9 @@ export const NetworkStakeCard = () => {
|
||||
} = useQuery({
|
||||
queryKey: ["noise"],
|
||||
queryFn: fetchNoise,
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
|
||||
if (isStakingLoading) {
|
||||
@@ -46,20 +49,20 @@ export const NetworkStakeCard = () => {
|
||||
packetsAndStaking[packetsAndStaking.length - 1]?.total_stake / 1_000_000;
|
||||
|
||||
|
||||
const startDate = new Date("2025-02-26").getTime(); // Convert to timestamp
|
||||
const startDate = new Date("2025-02-26").getTime(); // Convert to timestamp
|
||||
|
||||
const data = packetsAndStakingData
|
||||
.slice(0, -1) // Exclude the last element
|
||||
.filter((item: IPacketsAndStakingData) => {
|
||||
const itemDate = new Date(item.date_utc).getTime(); // Convert each date to timestamp
|
||||
return itemDate >= startDate; // Compare timestamps
|
||||
})
|
||||
.map((item: IPacketsAndStakingData) => ({
|
||||
date_utc: item.date_utc,
|
||||
numericData: item.total_stake / 1000000,
|
||||
}));
|
||||
|
||||
|
||||
const data = packetsAndStakingData
|
||||
.slice(0, -1) // Exclude the last element
|
||||
.filter((item: IPacketsAndStakingData) => {
|
||||
const itemDate = new Date(item.date_utc).getTime(); // Convert each date to timestamp
|
||||
return itemDate >= startDate; // Compare timestamps
|
||||
})
|
||||
.map((item: IPacketsAndStakingData) => ({
|
||||
date_utc: item.date_utc,
|
||||
numericData: item.total_stake / 1000000,
|
||||
}));
|
||||
|
||||
|
||||
|
||||
const stakeLineGraphData = {
|
||||
color: "#00CA33",
|
||||
|
||||
@@ -13,6 +13,9 @@ export const NoiseCard = () => {
|
||||
const { data, isLoading, isError } = useQuery({
|
||||
queryKey: ["noise"],
|
||||
queryFn: fetchNoise,
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
|
||||
if (isLoading) {
|
||||
@@ -43,7 +46,7 @@ export const NoiseCard = () => {
|
||||
const noiseLast24H =
|
||||
todaysData.total_packets_sent + todaysData.total_packets_received;
|
||||
|
||||
|
||||
|
||||
|
||||
const noisePrevious24H =
|
||||
yesterdaysData.total_packets_sent + yesterdaysData.total_packets_received;
|
||||
|
||||
@@ -7,12 +7,15 @@ import ExplorerCard from "../cards/ExplorerCard";
|
||||
|
||||
export const RewardsCard = () => {
|
||||
const {
|
||||
data: observatoryNodes,
|
||||
data: nymNodes,
|
||||
isLoading,
|
||||
isError,
|
||||
} = useQuery({
|
||||
queryKey: ["observatoryNodes"],
|
||||
queryKey: ["nymNodes"],
|
||||
queryFn: () => fetchObservatoryNodes(),
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
|
||||
if (isLoading) {
|
||||
@@ -23,7 +26,7 @@ export const RewardsCard = () => {
|
||||
);
|
||||
}
|
||||
|
||||
if (isError || !observatoryNodes) {
|
||||
if (isError || !nymNodes) {
|
||||
return (
|
||||
<ExplorerCard label="Number of delegations">
|
||||
<Typography variant="h3" sx={{ color: "pine.950" }}>
|
||||
@@ -38,7 +41,7 @@ export const RewardsCard = () => {
|
||||
0,
|
||||
);
|
||||
};
|
||||
const allStakers = getActiveStakersNumber(observatoryNodes);
|
||||
const allStakers = getActiveStakersNumber(nymNodes);
|
||||
|
||||
return (
|
||||
<ExplorerCard label="Number of delegations">
|
||||
|
||||
@@ -16,6 +16,9 @@ export const TokenomicsCard = () => {
|
||||
} = useQuery({
|
||||
queryKey: ["nymPrice"],
|
||||
queryFn: fetchNymPrice,
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
|
||||
const {
|
||||
@@ -25,6 +28,9 @@ export const TokenomicsCard = () => {
|
||||
} = useQuery({
|
||||
queryKey: ["epochRewards"],
|
||||
queryFn: fetchEpochRewards,
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
|
||||
const {
|
||||
@@ -34,6 +40,9 @@ export const TokenomicsCard = () => {
|
||||
} = useQuery({
|
||||
queryKey: ["noise"],
|
||||
queryFn: fetchNoise,
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
|
||||
if (isLoading || isEpochLoading || isStakingLoading) {
|
||||
|
||||
@@ -66,6 +66,9 @@ const NodeTableWithAction = () => {
|
||||
} = useQuery({
|
||||
queryKey: ["epochRewards"],
|
||||
queryFn: fetchEpochRewards,
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
|
||||
// Use React Query to fetch Nym nodes
|
||||
@@ -76,6 +79,9 @@ const NodeTableWithAction = () => {
|
||||
} = useQuery({
|
||||
queryKey: ["nymNodes"],
|
||||
queryFn: fetchObservatoryNodes,
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
|
||||
// Handle loading state
|
||||
|
||||
@@ -20,6 +20,9 @@ export const BasicInfoCard = ({ id }: IBasicInfoCardProps) => {
|
||||
} = useQuery({
|
||||
queryKey: ["nodeInfo", id],
|
||||
queryFn: () => fetchNodeInfo(id),
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
|
||||
if (isLoading) {
|
||||
|
||||
@@ -20,6 +20,9 @@ export const NodeDataCard = ({ id }: INodeMetricsCardProps) => {
|
||||
} = useQuery({
|
||||
queryKey: ["epochRewards"],
|
||||
queryFn: fetchEpochRewards,
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
|
||||
// Fetch node information
|
||||
@@ -30,6 +33,9 @@ export const NodeDataCard = ({ id }: INodeMetricsCardProps) => {
|
||||
} = useQuery({
|
||||
queryKey: ["nodeInfo", id],
|
||||
queryFn: () => fetchNodeInfo(id),
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
|
||||
if (isEpochLoading || isNodeLoading) {
|
||||
|
||||
@@ -18,6 +18,9 @@ const NodeDelegationsCard = ({ id }: NodeDelegationsCardProps) => {
|
||||
} = useQuery({
|
||||
queryKey: ["nodeDelegations", id],
|
||||
queryFn: () => fetchNodeDelegations(id),
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
|
||||
if (isLoading) {
|
||||
|
||||
@@ -21,6 +21,9 @@ export const NodeParametersCard = ({ id }: INodeParametersCardProps) => {
|
||||
} = useQuery({
|
||||
queryKey: ["epochRewards"],
|
||||
queryFn: fetchEpochRewards,
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
|
||||
// Fetch node information
|
||||
@@ -31,6 +34,9 @@ export const NodeParametersCard = ({ id }: INodeParametersCardProps) => {
|
||||
} = useQuery({
|
||||
queryKey: ["nodeInfo", id],
|
||||
queryFn: () => fetchNodeInfo(id),
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
|
||||
if (isEpochLoading || isNodeLoading) {
|
||||
|
||||
@@ -42,6 +42,9 @@ export const NodeProfileCard = ({ id }: INodeProfileCardProps) => {
|
||||
} = useQuery({
|
||||
queryKey: ["nodeInfo", id],
|
||||
queryFn: () => fetchNodeInfo(id),
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
|
||||
const handleStakeOnNode = async ({
|
||||
|
||||
@@ -152,6 +152,9 @@ export const NodeRoleCard = ({ id }: INodeRoleCardProps) => {
|
||||
} = useQuery({
|
||||
queryKey: ["nodeInfo", id],
|
||||
queryFn: () => fetchNodeInfo(id),
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
const {
|
||||
data: epochRewardsData,
|
||||
@@ -160,6 +163,9 @@ export const NodeRoleCard = ({ id }: INodeRoleCardProps) => {
|
||||
} = useQuery({
|
||||
queryKey: ["epochRewards"],
|
||||
queryFn: fetchEpochRewards,
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
|
||||
// Extract node roles once `nodeInfo` is available
|
||||
@@ -177,6 +183,9 @@ export const NodeRoleCard = ({ id }: INodeRoleCardProps) => {
|
||||
queryKey: ["gatewayStatus", nodeInfo?.identity_key],
|
||||
queryFn: () => fetchGatewayStatus(nodeInfo?.identity_key || ""),
|
||||
enabled: !!nodeInfo?.identity_key && shouldFetchGatewayStatus, // ✅ Only fetch if needed
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
|
||||
if (isLoading || isEpochLoading) {
|
||||
|
||||
@@ -19,6 +19,9 @@ const OriginalStakeCard = () => {
|
||||
queryKey: ["originalStake", address],
|
||||
queryFn: () => fetchOriginalStake(address || ""),
|
||||
enabled: !!address, // Only fetch if address exists
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
|
||||
if (!address) {
|
||||
|
||||
@@ -64,6 +64,9 @@ const StakeTableWithAction = () => {
|
||||
} = useQuery({
|
||||
queryKey: ["epochRewards"],
|
||||
queryFn: fetchEpochRewards,
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
|
||||
// Use React Query to fetch Nym nodes
|
||||
@@ -74,6 +77,9 @@ const StakeTableWithAction = () => {
|
||||
} = useQuery({
|
||||
queryKey: ["nymNodes"],
|
||||
queryFn: fetchObservatoryNodes,
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
|
||||
// Handle loading state
|
||||
|
||||
@@ -59,6 +59,9 @@ const SubHeaderRowActions = () => {
|
||||
queryKey: ["totalStakerRewards", address],
|
||||
queryFn: () => fetchTotalStakerRewards(address || ""),
|
||||
enabled: !!address, // Only fetch if address is available
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
|
||||
const handleRefetch = useCallback(async () => {
|
||||
|
||||
@@ -19,6 +19,9 @@ const TotalRewardsCard = () => {
|
||||
queryKey: ["totalStakerRewards", address],
|
||||
queryFn: () => fetchTotalStakerRewards(address || ""),
|
||||
enabled: !!address, // Only fetch if address exists
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
|
||||
if (!address) {
|
||||
|
||||
@@ -19,6 +19,9 @@ const TotalStakeCard = () => {
|
||||
queryKey: ["totalStake", address],
|
||||
queryFn: () => fetchBalances(address || ""),
|
||||
enabled: !!address, // Only fetch if address exists
|
||||
staleTime: 10 * 60 * 1000, // 10 minutes
|
||||
refetchOnWindowFocus: false, // Prevents unnecessary refetching
|
||||
refetchOnReconnect: false,
|
||||
});
|
||||
|
||||
if (!address) {
|
||||
|
||||
@@ -11,7 +11,6 @@ interface QueryProviderProps {
|
||||
export const QueryProvider = ({ children }: QueryProviderProps) => {
|
||||
// Create QueryClient instance
|
||||
const [queryClient] = useState(() => new QueryClient());
|
||||
|
||||
return (
|
||||
<QueryClientProvider client={queryClient}>
|
||||
{children}
|
||||
|
||||
Reference in New Issue
Block a user