From d65f7ff887b996a4991c7922de7db17740ef92df Mon Sep 17 00:00:00 2001 From: tekprecious Date: Sun, 27 Sep 2026 23:31:03 +0100 Subject: [PATCH 1/2] feat: implement platform-wide emergency pause UI (#1026) --- src/App.tsx | 2 + src/components/common/BuySellKeyFlow.tsx | 49 +++++++------ src/components/common/GlobalPauseBanner.tsx | 13 ++-- src/components/common/PortfolioHoldingRow.tsx | 45 +++++++----- .../common/StakingRewardsSection.tsx | 12 +++- src/components/common/TradeDialog.tsx | 56 ++++++++------- src/hooks/useGlobalPause.ts | 72 ++++++++++++------- src/pages/AtomicSwapCreatePage.tsx | 27 ++++--- 8 files changed, 165 insertions(+), 111 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index ba8a9bca..4ca505bc 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -4,6 +4,7 @@ import { Toaster } from 'react-hot-toast'; import { createBrowserRouter, RouterProvider } from 'react-router'; import AppErrorBoundary from './components/common/AppErrorBoundary'; import OfflineBanner from './components/common/OfflineBanner'; +import GlobalPauseBanner from './components/common/GlobalPauseBanner'; import SessionExpiryWatcher from './components/common/SessionExpiryWatcher'; import { routes } from './routes'; import { useRouteChangeLogging } from './hooks/useRouteChangeLogging'; @@ -29,6 +30,7 @@ function App() { return ( + = ({ >(null); const [confirmationOpen, setConfirmationOpen] = useState(false); const [internalSubmitting, setInternalSubmitting] = useState(false); + const { paused } = useGlobalPause(); const isSubmitting = externalIsSubmitting || internalSubmitting; @@ -489,27 +491,30 @@ export const BuySellKeyFlow: React.FC = ({ )} {/* Review / Proceed to Confirmation Button */} - + + + {/* Confirmation Modal */} { + const { paused, pauseActivatedAt } = useGlobalPause(); + + if (!paused) return null; -const GlobalPauseBanner: React.FC = ({ - pauseActivatedAt, -}) => { const formatted = pauseActivatedAt ? new Date(pauseActivatedAt).toLocaleString() : null; @@ -20,7 +19,7 @@ const GlobalPauseBanner: React.FC = ({