From 6db1321f45974f1d26c08ece2ed66bbd3ebe596e Mon Sep 17 00:00:00 2001 From: Jon Ator Date: Mon, 8 Jul 2024 19:13:05 -0400 Subject: [PATCH] pause remaining time when quote loading or tx pending --- packages/web/components/bridge/amount-screen.tsx | 2 ++ .../bridge/bridge-quote-remaining-time.tsx | 15 ++++++++++++--- packages/web/components/bridge/quote-detail.tsx | 3 +++ packages/web/components/bridge/review-screen.tsx | 3 +++ 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/packages/web/components/bridge/amount-screen.tsx b/packages/web/components/bridge/amount-screen.tsx index f9cc0fe5f6..47dcddf02d 100644 --- a/packages/web/components/bridge/amount-screen.tsx +++ b/packages/web/components/bridge/amount-screen.tsx @@ -1232,6 +1232,7 @@ const TransferDetails: FunctionComponent<{ successfulQuotes, setSelectedBridgeProvider, isRefetchingQuote, + isTxPending, } = quote; return ( @@ -1264,6 +1265,7 @@ const TransferDetails: FunctionComponent<{ refetchInterval={refetchInterval} selectedQuote={selectedQuote} open={open} + isRemainingTimePaused={isRefetchingQuote || isTxPending} showRemainingTime /> diff --git a/packages/web/components/bridge/bridge-quote-remaining-time.tsx b/packages/web/components/bridge/bridge-quote-remaining-time.tsx index de476de2a7..f44cf57345 100644 --- a/packages/web/components/bridge/bridge-quote-remaining-time.tsx +++ b/packages/web/components/bridge/bridge-quote-remaining-time.tsx @@ -13,16 +13,25 @@ export const BridgeQuoteRemainingTime: FunctionComponent< className?: string; refetchInterval: number; dataUpdatedAt: number; + isPaused?: boolean; strokeWidth?: number; }> -> = ({ className, refetchInterval, dataUpdatedAt, children, strokeWidth }) => { +> = ({ + className, + refetchInterval, + dataUpdatedAt, + isPaused = false, + children, + strokeWidth, +}) => { const [progress, setProgress] = useState(100); useEffect(() => { if (!dataUpdatedAt) return; const updateProgress = () => { - const elapsed = Date.now() - dataUpdatedAt; + const now = isPaused ? dataUpdatedAt : Date.now(); + const elapsed = now - dataUpdatedAt; const percentage = Math.max((1 - elapsed / refetchInterval) * 100, 0); setProgress(percentage); }; @@ -37,7 +46,7 @@ export const BridgeQuoteRemainingTime: FunctionComponent< ); return () => clearInterval(intervalId); - }, [dataUpdatedAt, refetchInterval]); + }, [dataUpdatedAt, refetchInterval, isPaused]); return (
diff --git a/packages/web/components/bridge/quote-detail.tsx b/packages/web/components/bridge/quote-detail.tsx index 1459052d93..db7ea9978f 100644 --- a/packages/web/components/bridge/quote-detail.tsx +++ b/packages/web/components/bridge/quote-detail.tsx @@ -173,6 +173,7 @@ export const ExpandDetailsControlContent: FunctionComponent<{ selectedQuoteUpdatedAt: number | undefined; refetchInterval: number; open: boolean; + isRemainingTimePaused: boolean; showRemainingTime?: boolean; }> = ({ selectedQuote, @@ -181,6 +182,7 @@ export const ExpandDetailsControlContent: FunctionComponent<{ selectedQuoteUpdatedAt, refetchInterval, open, + isRemainingTimePaused, showRemainingTime = false, }) => { const totalFees = calcSelectedQuoteTotalFee(selectedQuote); @@ -191,6 +193,7 @@ export const ExpandDetailsControlContent: FunctionComponent<{ )}
diff --git a/packages/web/components/bridge/review-screen.tsx b/packages/web/components/bridge/review-screen.tsx index d2e59998be..d689cb2fe2 100644 --- a/packages/web/components/bridge/review-screen.tsx +++ b/packages/web/components/bridge/review-screen.tsx @@ -299,6 +299,8 @@ const TransferDetails: FunctionComponent< fromDisplayChain, selectedQuoteUpdatedAt, refetchInterval, + isRefetchingQuote, + isTxPending, } = quote; if (!selectedQuote) return null; @@ -328,6 +330,7 @@ const TransferDetails: FunctionComponent< className="flex !h-12 !w-12 items-center justify-center rounded-full md:!h-8 md:!w-8" dataUpdatedAt={selectedQuoteUpdatedAt} refetchInterval={refetchInterval} + isPaused={isRefetchingQuote || isTxPending} strokeWidth={2} >