From 03abc2f7823382fe82c5bc25cd0241b5e06f5d06 Mon Sep 17 00:00:00 2001 From: eth2353 <70237279+eth2353@users.noreply.github.com> Date: Tue, 23 Sep 2025 19:52:03 +0200 Subject: [PATCH] Add Ledger Live support --- src/components/Image/util/images.ts | 1 + .../images/connector/ledgerLive.svg | 8 +++++ src/components/ImagesProvider/images/index.ts | 2 ++ .../config/util/useWallet/useAutoConnect.ts | 4 +++ src/config/core/wallets/index.ts | 3 +- src/config/core/wallets/injected/index.ts | 1 + .../core/wallets/injected/ledgerLive.ts | 35 +++++++++++++++++++ .../Account/AccountMenu/AccountMenu.tsx | 9 +++-- .../util/useChangeChainDisabled.ts | 1 + 9 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 src/components/ImagesProvider/images/connector/ledgerLive.svg create mode 100644 src/config/core/wallets/injected/ledgerLive.ts diff --git a/src/components/Image/util/images.ts b/src/components/Image/util/images.ts index 99d2a9b1..c7e3fe06 100644 --- a/src/components/Image/util/images.ts +++ b/src/components/Image/util/images.ts @@ -41,6 +41,7 @@ export const logos = [ 'connector/taho', 'connector/zengo', 'connector/ledger', + 'connector/ledgerLive', 'connector/portis', 'connector/binance', 'connector/coinbase', diff --git a/src/components/ImagesProvider/images/connector/ledgerLive.svg b/src/components/ImagesProvider/images/connector/ledgerLive.svg new file mode 100644 index 00000000..c15cecd2 --- /dev/null +++ b/src/components/ImagesProvider/images/connector/ledgerLive.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/src/components/ImagesProvider/images/index.ts b/src/components/ImagesProvider/images/index.ts index a50c00fe..c668b917 100644 --- a/src/components/ImagesProvider/images/index.ts +++ b/src/components/ImagesProvider/images/index.ts @@ -37,6 +37,7 @@ import taho from './connector/taho.svg' import rabby from './connector/rabby.svg' import zengo from './connector/zengo.svg' import ledger from './connector/ledger.svg' +import ledgerLive from './connector/ledgerLive.svg' import portis from './connector/portis.svg' import binance from './connector/binance.svg' import coinbase from './connector/coinbase.svg' @@ -131,6 +132,7 @@ export default { 'connector/taho': taho.src, 'connector/zengo': zengo.src, 'connector/ledger': ledger.src, + 'connector/ledgerLive': ledgerLive.src, 'connector/portis': portis.src, 'connector/binance': binance.src, 'connector/coinbase': coinbase.src, diff --git a/src/config/core/config/util/useWallet/useAutoConnect.ts b/src/config/core/config/util/useWallet/useAutoConnect.ts index 876003c0..89cbac14 100644 --- a/src/config/core/config/util/useWallet/useAutoConnect.ts +++ b/src/config/core/config/util/useWallet/useAutoConnect.ts @@ -89,6 +89,7 @@ const useAutoConnect = (values: UseAutoConnectProps) => { catch {} const isDesktop = window.innerWidth >= 1000 + const isLedgerLive = window.ethereum?.isLedgerLive const isDAppBrowser = !isDesktop && hasInjectedProvider const isLedger = activeWallet === wallets.ledger.id const isBinance = hasInjectedProvider && window.ethereum?.isBinance @@ -107,6 +108,9 @@ const useAutoConnect = (values: UseAutoConnectProps) => { else if (isBinance) { connect(wallets.binance.id) } + else if (isLedgerLive) { + connect(wallets.ledgerLive.id) + } else if (isDAppBrowser) { connect(wallets.dAppBrowser.id) } diff --git a/src/config/core/wallets/index.ts b/src/config/core/wallets/index.ts index 96ff4e9c..4c96fc99 100644 --- a/src/config/core/wallets/index.ts +++ b/src/config/core/wallets/index.ts @@ -6,7 +6,7 @@ import coinbase from './coinbase' import gnosisSafe from './gnosisSafe' import walletConnect from './walletConnect' import monitorAddress from './monitorAddress' -import { braveWallet, dAppBrowser, trustWallet, metaMask, rabby, taho, okx } from './injected' +import { braveWallet, dAppBrowser, trustWallet, metaMask, rabby, taho, okx, ledgerLive } from './injected' // ATTN The order here is equal to the order in the UI not counting filters @@ -19,6 +19,7 @@ const wallets = { dAppBrowser, okx, taho, + ledgerLive, walletConnect, ledger, diff --git a/src/config/core/wallets/injected/index.ts b/src/config/core/wallets/injected/index.ts index 50bd1fbf..b3a0d4a3 100644 --- a/src/config/core/wallets/injected/index.ts +++ b/src/config/core/wallets/injected/index.ts @@ -5,3 +5,4 @@ export { default as metaMask } from './metaMask' export { default as rabby } from './rabby' export { default as taho } from './taho' export { default as okx } from './okx' +export { default as ledgerLive } from './ledgerLive' diff --git a/src/config/core/wallets/injected/ledgerLive.ts b/src/config/core/wallets/injected/ledgerLive.ts new file mode 100644 index 00000000..0940d3f1 --- /dev/null +++ b/src/config/core/wallets/injected/ledgerLive.ts @@ -0,0 +1,35 @@ +import { Network } from 'sdk' + +import { Location, IsDisabled } from '../types' + +import messages from '../../messages' + + +const getConnector = async () => { + const InjectedConnector = (await import('../../connectors/InjectedConnector')).default + + const connector = new InjectedConnector({ shimDisconnect: false }) + + return connector +} + +const ledgerLive = { + id: 'ledgerLive', + title: 'Ledger Live', + logo: 'connector/ledgerLive', + isAddTokenEnabled: false, + isInjectedWallet: true, + isLocalStorageSave: true, + activationMessage: messages.authMessages.waitingAuth, + networks: [ + Network.Mainnet, + Network.Hoodi, + ] as ChainIds[], + location: [ 'desktop', 'mobile' ] as Location, + isDisabled: (() => !window.ethereum?.isLedgerLive) as IsDisabled, + getProvider: () => window.ethereum, + getConnector, +} as const + + +export default ledgerLive diff --git a/src/layouts/AppLayout/Header/Connect/Account/AccountMenu/AccountMenu.tsx b/src/layouts/AppLayout/Header/Connect/Account/AccountMenu/AccountMenu.tsx index 7e211f64..822c8334 100644 --- a/src/layouts/AppLayout/Header/Connect/Account/AccountMenu/AccountMenu.tsx +++ b/src/layouts/AppLayout/Header/Connect/Account/AccountMenu/AccountMenu.tsx @@ -21,7 +21,12 @@ const AccountMenu: React.FC = (props) => { const { activeWallet } = useConfig() const claimsTotal = useClaimsTotal() - const isDappBrowser = activeWallet === wallets.dAppBrowser.id + const NON_DISCONNECTABLE_WALLET_IDS = new Set([ + wallets.dAppBrowser.id, + wallets.ledgerLive.id, + ]) + + const shouldShowDisconnect = activeWallet !== null && !NON_DISCONNECTABLE_WALLET_IDS.has(activeWallet) return ( <> @@ -40,7 +45,7 @@ const AccountMenu: React.FC = (props) => { } { - !isDappBrowser && ( + shouldShowDisconnect && ( ) } diff --git a/src/layouts/AppLayout/Header/Connect/NetworkSelect/util/useChangeChainDisabled.ts b/src/layouts/AppLayout/Header/Connect/NetworkSelect/util/useChangeChainDisabled.ts index 76cdad4f..36feb1a4 100644 --- a/src/layouts/AppLayout/Header/Connect/NetworkSelect/util/useChangeChainDisabled.ts +++ b/src/layouts/AppLayout/Header/Connect/NetworkSelect/util/useChangeChainDisabled.ts @@ -13,6 +13,7 @@ const useChangeChainDisabled = () => { const disabledChainSwitchWallets: WalletIds[] = [ wallets.dAppBrowser.id, wallets.gnosisSafe.id, + wallets.ledgerLive.id, wallets.zenGo.id, ]