From 3b2c21f1c4b69c3926c69f92d21e8e9a7f126316 Mon Sep 17 00:00:00 2001 From: bigboydiamonds <57741810+bigboydiamonds@users.noreply.github.com> Date: Thu, 9 May 2024 17:09:18 -0700 Subject: [PATCH 01/11] Track BridgeQuote by initiated timestamp --- packages/synapse-interface/constants/bridge.ts | 2 ++ packages/synapse-interface/pages/state-managed-bridge/index.tsx | 2 ++ packages/synapse-interface/utils/types/index.tsx | 1 + 3 files changed, 5 insertions(+) diff --git a/packages/synapse-interface/constants/bridge.ts b/packages/synapse-interface/constants/bridge.ts index f263f93a6c..7653b64d94 100644 --- a/packages/synapse-interface/constants/bridge.ts +++ b/packages/synapse-interface/constants/bridge.ts @@ -16,6 +16,7 @@ export const EMPTY_BRIDGE_QUOTE = { estimatedTime: null, bridgeModuleName: null, gasDropAmount: 0n, + timestamp: null, } export const EMPTY_BRIDGE_QUOTE_ZERO = { @@ -31,6 +32,7 @@ export const EMPTY_BRIDGE_QUOTE_ZERO = { estimatedTime: null, bridgeModuleName: null, gasDropAmount: 0n, + timestamp: null, } /** * ETH Only Bridge Config used to calculate swap fees diff --git a/packages/synapse-interface/pages/state-managed-bridge/index.tsx b/packages/synapse-interface/pages/state-managed-bridge/index.tsx index b80bf8c787..895b793c4e 100644 --- a/packages/synapse-interface/pages/state-managed-bridge/index.tsx +++ b/packages/synapse-interface/pages/state-managed-bridge/index.tsx @@ -153,6 +153,7 @@ const StateManagedBridge = () => { try { dispatch(setIsLoading(true)) + const currentTimestamp: number = getTimeMinutesFromNow(0) const allQuotes = await synapseSDK.allBridgeQuotes( fromChainId, @@ -273,6 +274,7 @@ const StateManagedBridge = () => { estimatedTime: estimatedTime, bridgeModuleName: bridgeModuleName, gasDropAmount: BigInt(gasDropAmount.toString()), + timestamp: currentTimestamp, }) ) diff --git a/packages/synapse-interface/utils/types/index.tsx b/packages/synapse-interface/utils/types/index.tsx index d5733c32b8..4c65d19fa0 100644 --- a/packages/synapse-interface/utils/types/index.tsx +++ b/packages/synapse-interface/utils/types/index.tsx @@ -82,6 +82,7 @@ export type BridgeQuote = { estimatedTime: number bridgeModuleName: string gasDropAmount: bigint + timestamp: number } interface TokensByChain { From 7807989b830d5f3bfb200d61e4d7e56c8582a04b Mon Sep 17 00:00:00 2001 From: bigboydiamonds <57741810+bigboydiamonds@users.noreply.github.com> Date: Thu, 9 May 2024 18:05:52 -0700 Subject: [PATCH 02/11] useStaleQuoteRefresher to manage refreshing stale bridge quotes --- .../pages/state-managed-bridge/index.tsx | 3 +++ .../utils/hooks/useStaleQuoteRefresher.ts | 24 +++++++++++++++++++ packages/synapse-interface/utils/time.ts | 7 ++++++ 3 files changed, 34 insertions(+) create mode 100644 packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts diff --git a/packages/synapse-interface/pages/state-managed-bridge/index.tsx b/packages/synapse-interface/pages/state-managed-bridge/index.tsx index 895b793c4e..a59f7a544d 100644 --- a/packages/synapse-interface/pages/state-managed-bridge/index.tsx +++ b/packages/synapse-interface/pages/state-managed-bridge/index.tsx @@ -74,6 +74,7 @@ import { getBridgeModuleNames, } from '@/components/Maintenance/Maintenance' import { wagmiConfig } from '@/wagmiConfig' +import { useStaleQuoteRefresher } from '../../utils/hooks/useStaleQuoteRefresher' const StateManagedBridge = () => { const { address } = useAccount() @@ -316,6 +317,8 @@ const StateManagedBridge = () => { } } + useRefresher(bridgeQuote, getAndSetBridgeQuote) + const approveTxn = async () => { try { const tx = approveToken( diff --git a/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts b/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts new file mode 100644 index 0000000000..fb8ff7fa11 --- /dev/null +++ b/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts @@ -0,0 +1,24 @@ +import { useEffect } from 'react' + +import { BridgeQuote } from '@/utils/types' +import { calculateTimeBetween } from '@/utils/time' +import { useIntervalTimer } from '@/utils/hooks/useIntervalTimer' + +export const useStaleQuoteRefresher = ( + quote: BridgeQuote, + refreshQuoteCallback: () => Promise, + staleTimeout: number = 15000 +) => { + const currentTime = useIntervalTimer(staleTimeout, false) + + useEffect(() => { + if (quote) { + const timeDifference = calculateTimeBetween(currentTime, quote?.timestamp) + + if (timeDifference >= staleTimeout) { + console.log('refresh quote') + refreshQuoteCallback() + } + } + }, [quote, refreshQuoteCallback, currentTime]) +} diff --git a/packages/synapse-interface/utils/time.ts b/packages/synapse-interface/utils/time.ts index 5807273387..43b2f806a6 100644 --- a/packages/synapse-interface/utils/time.ts +++ b/packages/synapse-interface/utils/time.ts @@ -13,6 +13,13 @@ export const getTimeMinutesBeforeNow = (minutesBeforeNow) => { return Math.round(currentTimeSeconds - 60 * minutesBeforeNow) } +export const calculateTimeBetween = ( + timeBefore: number, + timeAfter: number +): number => { + return (timeBefore - timeAfter) * 1000 +} + export const formatDate = (date) => { return new Intl.DateTimeFormat('en-US', { year: 'numeric', From 486aeab7e8d5a11320e188ddced90f63f3a303c1 Mon Sep 17 00:00:00 2001 From: bigboydiamonds <57741810+bigboydiamonds@users.noreply.github.com> Date: Thu, 9 May 2024 18:14:10 -0700 Subject: [PATCH 03/11] Prevent stack overflow when invalid quote --- .../pages/state-managed-bridge/index.tsx | 2 +- .../utils/hooks/useStaleQuoteRefresher.ts | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/synapse-interface/pages/state-managed-bridge/index.tsx b/packages/synapse-interface/pages/state-managed-bridge/index.tsx index a59f7a544d..76d70e2de8 100644 --- a/packages/synapse-interface/pages/state-managed-bridge/index.tsx +++ b/packages/synapse-interface/pages/state-managed-bridge/index.tsx @@ -317,7 +317,7 @@ const StateManagedBridge = () => { } } - useRefresher(bridgeQuote, getAndSetBridgeQuote) + useStaleQuoteRefresher(bridgeQuote, getAndSetBridgeQuote) const approveTxn = async () => { try { diff --git a/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts b/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts index fb8ff7fa11..8ca409c455 100644 --- a/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts +++ b/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts @@ -1,3 +1,4 @@ +import { isNull, isNumber } from 'lodash' import { useEffect } from 'react' import { BridgeQuote } from '@/utils/types' @@ -9,11 +10,13 @@ export const useStaleQuoteRefresher = ( refreshQuoteCallback: () => Promise, staleTimeout: number = 15000 ) => { - const currentTime = useIntervalTimer(staleTimeout, false) + const quoteTime = quote?.timestamp + const isValidQuote = isNumber(quoteTime) && !isNull(quoteTime) + const currentTime = useIntervalTimer(staleTimeout, isValidQuote) useEffect(() => { - if (quote) { - const timeDifference = calculateTimeBetween(currentTime, quote?.timestamp) + if (isValidQuote) { + const timeDifference = calculateTimeBetween(currentTime, quoteTime) if (timeDifference >= staleTimeout) { console.log('refresh quote') From 491ddc43e1dc684d4abdd199998954f66c19f32c Mon Sep 17 00:00:00 2001 From: bigboydiamonds <57741810+bigboydiamonds@users.noreply.github.com> Date: Thu, 9 May 2024 18:24:17 -0700 Subject: [PATCH 04/11] Prevent quote refetch is one is already loading --- .../pages/state-managed-bridge/index.tsx | 3 ++- .../utils/hooks/useStaleQuoteRefresher.ts | 10 +++++++--- packages/synapse-interface/utils/time.ts | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/synapse-interface/pages/state-managed-bridge/index.tsx b/packages/synapse-interface/pages/state-managed-bridge/index.tsx index 76d70e2de8..136b8688da 100644 --- a/packages/synapse-interface/pages/state-managed-bridge/index.tsx +++ b/packages/synapse-interface/pages/state-managed-bridge/index.tsx @@ -92,6 +92,7 @@ const StateManagedBridge = () => { fromToken, toToken, bridgeQuote, + isLoading: isLoadingQuote, debouncedFromValue, destinationAddress, }: BridgeState = useBridgeState() @@ -317,7 +318,7 @@ const StateManagedBridge = () => { } } - useStaleQuoteRefresher(bridgeQuote, getAndSetBridgeQuote) + useStaleQuoteRefresher(bridgeQuote, isLoadingQuote, getAndSetBridgeQuote) const approveTxn = async () => { try { diff --git a/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts b/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts index 8ca409c455..b4bf549051 100644 --- a/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts +++ b/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts @@ -7,21 +7,25 @@ import { useIntervalTimer } from '@/utils/hooks/useIntervalTimer' export const useStaleQuoteRefresher = ( quote: BridgeQuote, + isLoadingQuote: boolean, refreshQuoteCallback: () => Promise, staleTimeout: number = 15000 ) => { const quoteTime = quote?.timestamp const isValidQuote = isNumber(quoteTime) && !isNull(quoteTime) - const currentTime = useIntervalTimer(staleTimeout, isValidQuote) + const currentTime = useIntervalTimer(staleTimeout, !isValidQuote) useEffect(() => { - if (isValidQuote) { + if (isValidQuote && !isLoadingQuote) { const timeDifference = calculateTimeBetween(currentTime, quoteTime) + console.log('timeDifference: ', timeDifference) + console.log('staleTimeout: ', staleTimeout) + if (timeDifference >= staleTimeout) { console.log('refresh quote') refreshQuoteCallback() } } - }, [quote, refreshQuoteCallback, currentTime]) + }, [currentTime, refreshQuoteCallback]) } diff --git a/packages/synapse-interface/utils/time.ts b/packages/synapse-interface/utils/time.ts index 43b2f806a6..eeec7d7d9e 100644 --- a/packages/synapse-interface/utils/time.ts +++ b/packages/synapse-interface/utils/time.ts @@ -17,7 +17,7 @@ export const calculateTimeBetween = ( timeBefore: number, timeAfter: number ): number => { - return (timeBefore - timeAfter) * 1000 + return Math.abs(timeBefore - timeAfter) * 1000 } export const formatDate = (date) => { From bfe83d592db5d1a5908015934c0afb81eb9f6f05 Mon Sep 17 00:00:00 2001 From: bigboydiamonds <57741810+bigboydiamonds@users.noreply.github.com> Date: Thu, 9 May 2024 18:32:47 -0700 Subject: [PATCH 05/11] Fix build --- .../synapse-interface/pages/state-managed-bridge/index.tsx | 2 +- packages/synapse-interface/utils/actions/fetchBridgeQuotes.tsx | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/synapse-interface/pages/state-managed-bridge/index.tsx b/packages/synapse-interface/pages/state-managed-bridge/index.tsx index 136b8688da..7ae7405736 100644 --- a/packages/synapse-interface/pages/state-managed-bridge/index.tsx +++ b/packages/synapse-interface/pages/state-managed-bridge/index.tsx @@ -92,9 +92,9 @@ const StateManagedBridge = () => { fromToken, toToken, bridgeQuote, - isLoading: isLoadingQuote, debouncedFromValue, destinationAddress, + isLoading: isLoadingQuote, }: BridgeState = useBridgeState() const { showSettingsSlideOver, showDestinationAddress } = useSelector( (state: RootState) => state.bridgeDisplay diff --git a/packages/synapse-interface/utils/actions/fetchBridgeQuotes.tsx b/packages/synapse-interface/utils/actions/fetchBridgeQuotes.tsx index 4a575705a0..98f4a334cc 100644 --- a/packages/synapse-interface/utils/actions/fetchBridgeQuotes.tsx +++ b/packages/synapse-interface/utils/actions/fetchBridgeQuotes.tsx @@ -3,6 +3,7 @@ import { BridgeQuote, Token } from '@/utils/types' import { formatBigIntToString } from '../bigint/format' import { commify } from '@ethersproject/units' import { calculateExchangeRate } from '../calculateExchangeRate' +import { getTimeMinutesFromNow } from '../time' export interface BridgeQuoteResponse extends BridgeQuote { destinationToken: Token @@ -23,6 +24,7 @@ export async function fetchBridgeQuote( synapseSDK: any ): Promise { if (request && synapseSDK) { + const currentTimestamp: number = getTimeMinutesFromNow(0) try { const { originChainId, @@ -93,6 +95,7 @@ export async function fetchBridgeQuote( estimatedTime: estimatedTime, bridgeModuleName: bridgeModuleName, gasDropAmount: BigInt(gasDropAmount.toString()), + timestamp: currentTimestamp, } } catch (error) { console.error('Error fetching bridge quote:', error) From a9827ff11c570fe1c1b2f6c1e68df3ac3f53a967 Mon Sep 17 00:00:00 2001 From: bigboydiamonds <57741810+bigboydiamonds@users.noreply.github.com> Date: Thu, 9 May 2024 18:42:06 -0700 Subject: [PATCH 06/11] Prevent b2b callbacks if time difference is too great --- .../synapse-interface/utils/hooks/useStaleQuoteRefresher.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts b/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts index b4bf549051..aee3d24624 100644 --- a/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts +++ b/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts @@ -27,5 +27,5 @@ export const useStaleQuoteRefresher = ( refreshQuoteCallback() } } - }, [currentTime, refreshQuoteCallback]) + }, [refreshQuoteCallback]) } From d8b0eced10b95adc74718ff483c25eb79495088f Mon Sep 17 00:00:00 2001 From: bigboydiamonds <57741810+bigboydiamonds@users.noreply.github.com> Date: Fri, 10 May 2024 09:21:15 -0700 Subject: [PATCH 07/11] Pause formatAmount error logging, only retrigger useEffect for stale quote refresher when currentTime changes --- packages/synapse-interface/utils/formatAmount.ts | 2 +- .../synapse-interface/utils/hooks/useStaleQuoteRefresher.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/synapse-interface/utils/formatAmount.ts b/packages/synapse-interface/utils/formatAmount.ts index 3f881cee4b..ffb757417e 100644 --- a/packages/synapse-interface/utils/formatAmount.ts +++ b/packages/synapse-interface/utils/formatAmount.ts @@ -20,7 +20,7 @@ export const formatAmount = ( throw new TypeError(`"${amount}" is not a finite number`) } } catch ({ name, message }) { - console.error(name, message) + // console.error(name, message) return amount } diff --git a/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts b/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts index aee3d24624..e567aaf34f 100644 --- a/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts +++ b/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts @@ -27,5 +27,5 @@ export const useStaleQuoteRefresher = ( refreshQuoteCallback() } } - }, [refreshQuoteCallback]) + }, [currentTime]) } From 223f0d7f9cbef6a8a0cc8ae9b86672cc08a3119e Mon Sep 17 00:00:00 2001 From: bigboydiamonds <57741810+bigboydiamonds@users.noreply.github.com> Date: Fri, 10 May 2024 14:19:45 -0700 Subject: [PATCH 08/11] Wrap refresh quote callback with mousedown event to reduce resource usage for idle pages --- .../utils/hooks/useStaleQuoteRefresher.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts b/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts index e567aaf34f..09ce1fe231 100644 --- a/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts +++ b/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts @@ -18,13 +18,15 @@ export const useStaleQuoteRefresher = ( useEffect(() => { if (isValidQuote && !isLoadingQuote) { const timeDifference = calculateTimeBetween(currentTime, quoteTime) + const isStaleQuote = timeDifference >= staleTimeout console.log('timeDifference: ', timeDifference) console.log('staleTimeout: ', staleTimeout) - if (timeDifference >= staleTimeout) { - console.log('refresh quote') - refreshQuoteCallback() + if (isStaleQuote) { + document.addEventListener('mousemove', refreshQuoteCallback, { + once: true, + }) } } }, [currentTime]) From fe2ee9f5e2d84bbc69a2a291f33565d2d09a70d1 Mon Sep 17 00:00:00 2001 From: bigboydiamonds <57741810+bigboydiamonds@users.noreply.github.com> Date: Fri, 10 May 2024 14:22:12 -0700 Subject: [PATCH 09/11] Clean --- .../synapse-interface/pages/state-managed-bridge/index.tsx | 4 +--- .../synapse-interface/utils/hooks/useStaleQuoteRefresher.ts | 4 ---- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/packages/synapse-interface/pages/state-managed-bridge/index.tsx b/packages/synapse-interface/pages/state-managed-bridge/index.tsx index 7ae7405736..85c8d707e2 100644 --- a/packages/synapse-interface/pages/state-managed-bridge/index.tsx +++ b/packages/synapse-interface/pages/state-managed-bridge/index.tsx @@ -11,7 +11,6 @@ import { getPublicClient, waitForTransactionReceipt, } from '@wagmi/core' - import { InputContainer } from '@/components/StateManagedBridge/InputContainer' import { OutputContainer } from '@/components/StateManagedBridge/OutputContainer' import { BridgeExchangeRateInfo } from '@/components/StateManagedBridge/BridgeExchangeRateInfo' @@ -54,7 +53,6 @@ import { Token } from '@/utils/types' import { txErrorHandler } from '@/utils/txErrorHandler' import { approveToken } from '@/utils/approveToken' import { stringToBigInt } from '@/utils/bigint/format' - import { fetchAndStoreSingleNetworkPortfolioBalances } from '@/slices/portfolio/hooks' import { updatePendingBridgeTransaction, @@ -74,7 +72,7 @@ import { getBridgeModuleNames, } from '@/components/Maintenance/Maintenance' import { wagmiConfig } from '@/wagmiConfig' -import { useStaleQuoteRefresher } from '../../utils/hooks/useStaleQuoteRefresher' +import { useStaleQuoteRefresher } from '@/utils/hooks/useStaleQuoteRefresher' const StateManagedBridge = () => { const { address } = useAccount() diff --git a/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts b/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts index 09ce1fe231..db87b20d23 100644 --- a/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts +++ b/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts @@ -19,10 +19,6 @@ export const useStaleQuoteRefresher = ( if (isValidQuote && !isLoadingQuote) { const timeDifference = calculateTimeBetween(currentTime, quoteTime) const isStaleQuote = timeDifference >= staleTimeout - - console.log('timeDifference: ', timeDifference) - console.log('staleTimeout: ', staleTimeout) - if (isStaleQuote) { document.addEventListener('mousemove', refreshQuoteCallback, { once: true, From 938b3c2261aa6a27fbae97eaf71edd2ce9016709 Mon Sep 17 00:00:00 2001 From: bigboydiamonds <57741810+bigboydiamonds@users.noreply.github.com> Date: Fri, 10 May 2024 14:55:34 -0700 Subject: [PATCH 10/11] Prevent refresh quote if browser wallet prompts are open as async callback has already initiated --- .../pages/state-managed-bridge/index.tsx | 15 ++++++++++++--- .../utils/hooks/useStaleQuoteRefresher.ts | 11 ++++++++--- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/packages/synapse-interface/pages/state-managed-bridge/index.tsx b/packages/synapse-interface/pages/state-managed-bridge/index.tsx index 85c8d707e2..0156f7d71c 100644 --- a/packages/synapse-interface/pages/state-managed-bridge/index.tsx +++ b/packages/synapse-interface/pages/state-managed-bridge/index.tsx @@ -92,13 +92,14 @@ const StateManagedBridge = () => { bridgeQuote, debouncedFromValue, destinationAddress, - isLoading: isLoadingQuote, + isLoading: isQuoteLoading, }: BridgeState = useBridgeState() const { showSettingsSlideOver, showDestinationAddress } = useSelector( (state: RootState) => state.bridgeDisplay ) - const [isApproved, setIsApproved] = useState(false) + const [isWalletPending, setIsWalletPending] = useState(false) + const [isApproved, setIsApproved] = useState(false) const dispatch = useAppDispatch() @@ -316,7 +317,12 @@ const StateManagedBridge = () => { } } - useStaleQuoteRefresher(bridgeQuote, isLoadingQuote, getAndSetBridgeQuote) + useStaleQuoteRefresher( + bridgeQuote, + getAndSetBridgeQuote, + isQuoteLoading, + isWalletPending + ) const approveTxn = async () => { try { @@ -370,6 +376,7 @@ const StateManagedBridge = () => { }) ) try { + setIsWalletPending(true) const wallet = await getWalletClient(wagmiConfig, { chainId: fromChainId, }) @@ -511,6 +518,8 @@ const StateManagedBridge = () => { } return txErrorHandler(error) + } finally { + setIsWalletPending(false) } } diff --git a/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts b/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts index db87b20d23..c2115d0edb 100644 --- a/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts +++ b/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts @@ -5,18 +5,23 @@ import { BridgeQuote } from '@/utils/types' import { calculateTimeBetween } from '@/utils/time' import { useIntervalTimer } from '@/utils/hooks/useIntervalTimer' +/** + * Refreshes quotes based on selected stale timeout duration. + * Will refresh quote when browser is active and wallet prompt is not pending. + */ export const useStaleQuoteRefresher = ( quote: BridgeQuote, - isLoadingQuote: boolean, refreshQuoteCallback: () => Promise, - staleTimeout: number = 15000 + isQuoteLoading: boolean, + isWalletPending: boolean, + staleTimeout: number = 15000 // 15_000ms or 15s ) => { const quoteTime = quote?.timestamp const isValidQuote = isNumber(quoteTime) && !isNull(quoteTime) const currentTime = useIntervalTimer(staleTimeout, !isValidQuote) useEffect(() => { - if (isValidQuote && !isLoadingQuote) { + if (isValidQuote && !isQuoteLoading && !isWalletPending) { const timeDifference = calculateTimeBetween(currentTime, quoteTime) const isStaleQuote = timeDifference >= staleTimeout if (isStaleQuote) { From f8fadd6fc5f2cd75378403a7841e702864e29a2c Mon Sep 17 00:00:00 2001 From: bigboydiamonds <57741810+bigboydiamonds@users.noreply.github.com> Date: Thu, 13 Jun 2024 09:52:17 -0700 Subject: [PATCH 11/11] Listen to stale timeout value --- .../synapse-interface/utils/hooks/useStaleQuoteRefresher.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts b/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts index c2115d0edb..a2073c2ecf 100644 --- a/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts +++ b/packages/synapse-interface/utils/hooks/useStaleQuoteRefresher.ts @@ -30,5 +30,5 @@ export const useStaleQuoteRefresher = ( }) } } - }, [currentTime]) + }, [currentTime, staleTimeout]) }