From 91f5b89eb62abbff5d0654451db9ba998ad8fc09 Mon Sep 17 00:00:00 2001 From: Bill Date: Mon, 29 Jan 2024 15:12:06 -0800 Subject: [PATCH] Coinbase Deposit (#251) * Coinbase Deposit * bump packages * fix lock * add testflag * Address feedback * fix chain select --- public/configs/exchanges.json | 8 ++ public/exchanges/coinbase.png | Bin 0 -> 2922 bytes src/components/QrCode.tsx | 5 +- src/components/TimeoutButton.tsx | 4 + src/hooks/useAccounts.tsx | 8 ++ src/lib/testFlags.ts | 4 + .../AccountManagementForms/DepositForm.tsx | 100 +++++++------ ...ainSelectMenu.tsx => SourceSelectMenu.tsx} | 50 +++++-- .../AccountManagementForms/WithdrawForm.tsx | 6 +- src/views/forms/NobleDeposit.tsx | 131 ++++++++++++++++++ 10 files changed, 262 insertions(+), 54 deletions(-) create mode 100644 public/configs/exchanges.json create mode 100644 public/exchanges/coinbase.png rename src/views/forms/AccountManagementForms/{ChainSelectMenu.tsx => SourceSelectMenu.tsx} (55%) create mode 100644 src/views/forms/NobleDeposit.tsx diff --git a/public/configs/exchanges.json b/public/configs/exchanges.json new file mode 100644 index 0000000..5a2a824 --- /dev/null +++ b/public/configs/exchanges.json @@ -0,0 +1,8 @@ +[ + { + "name": "coinbase", + "label": "Coinbase", + "icon": "/exchanges/coinbase.png", + "depositType": "noble" + } +] \ No newline at end of file diff --git a/public/exchanges/coinbase.png b/public/exchanges/coinbase.png new file mode 100644 index 0000000000000000000000000000000000000000..081a89e81749921aa7ee0ff0fc78e3db1e7bf96a GIT binary patch literal 2922 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 lHTx2Dt?G-`5%Cfr@- { +export const QrCode = ({ className, value, hasLogo, size = 300 }: ElementProps & StyleProps) => { const ref = useRef(null); const appTheme: AppTheme = useSelector(getAppTheme); @@ -74,7 +75,7 @@ export const QrCode = ({ value, hasLogo, size = 300 }: ElementProps & StyleProps } }, [appTheme, hasLogo]); - return ; + return ; }; const Styled: Record = {}; diff --git a/src/components/TimeoutButton.tsx b/src/components/TimeoutButton.tsx index df0a7f7..4e0c4e6 100644 --- a/src/components/TimeoutButton.tsx +++ b/src/components/TimeoutButton.tsx @@ -8,6 +8,7 @@ import { Button, type ButtonStateConfig, type ButtonProps } from '@/components/B type ElementProps = { timeoutInSeconds: number; + slotFinal?: ReactNode; } & ButtonProps; export type TimeoutButtonProps = ElementProps; @@ -15,6 +16,7 @@ export type TimeoutButtonProps = ElementProps; export const TimeoutButton = ({ children, timeoutInSeconds, + slotFinal, ...otherProps }: TimeoutButtonProps) => { const [timeoutDeadline] = useState(Date.now() + timeoutInSeconds * 1000); @@ -23,6 +25,8 @@ export const TimeoutButton = ({ const secondsLeft = Math.max(0, (timeoutDeadline - now) / 1000); + if (slotFinal && secondsLeft <= 0) return slotFinal; + return (