diff --git a/packages/apps-electron/src/index.tsx b/packages/apps-electron/src/index.tsx index af68f7f2d6..e32d7fde04 100644 --- a/packages/apps-electron/src/index.tsx +++ b/packages/apps-electron/src/index.tsx @@ -24,6 +24,9 @@ if (!rootElement) { const store = new RemoteElectronStore(electronMainApi.accountStore); ReactDOM.render( - , + , rootElement ); diff --git a/packages/apps-electron/webpack.main.cjs b/packages/apps-electron/webpack.main.cjs index 7ff1ca729a..d0a8260ccb 100644 --- a/packages/apps-electron/webpack.main.cjs +++ b/packages/apps-electron/webpack.main.cjs @@ -46,6 +46,9 @@ function createWebpack () { new CopyWebpackPlugin({ patterns: [{ from: 'assets' }] }) ], resolve: { + alias: { + '@polkadot/hw-ledger-transports': require.resolve('@polkadot/hw-ledger-transports/node') + }, extensions: ['.js', '.jsx', '.json', '.mjs', '.ts', '.tsx'] }, target: 'electron-main' diff --git a/packages/apps/src/Root.tsx b/packages/apps/src/Root.tsx index 8223229759..ccf775dbd8 100644 --- a/packages/apps/src/Root.tsx +++ b/packages/apps/src/Root.tsx @@ -18,6 +18,7 @@ import { darkTheme, lightTheme } from './themes'; import WindowDimensions from './WindowDimensions'; interface Props { + isElectron: boolean; store?: KeyringStore; } @@ -32,7 +33,7 @@ function createTheme ({ uiTheme }: { uiTheme: string }): ThemeDef { : lightTheme; } -function Root ({ store }: Props): React.ReactElement { +function Root ({ isElectron, store }: Props): React.ReactElement { const [theme, setTheme] = useState(() => createTheme(settings)); useEffect((): void => { @@ -45,6 +46,7 @@ function Root ({ store }: Props): React.ReactElement { diff --git a/packages/apps/src/index.tsx b/packages/apps/src/index.tsx index c692cf928c..2271c333ab 100644 --- a/packages/apps/src/index.tsx +++ b/packages/apps/src/index.tsx @@ -19,6 +19,6 @@ if (!rootElement) { } ReactDOM.render( - , + , rootElement ); diff --git a/packages/page-accounts/src/CreateAccount.slow.spec.tsx b/packages/page-accounts/src/CreateAccount.slow.spec.tsx index f059f406ac..5cd18dab23 100644 --- a/packages/page-accounts/src/CreateAccount.slow.spec.tsx +++ b/packages/page-accounts/src/CreateAccount.slow.spec.tsx @@ -27,6 +27,7 @@ const renderAccounts = () => { diff --git a/packages/page-bounties/src/Bounties.slow.spec.tsx b/packages/page-bounties/src/Bounties.slow.spec.tsx index 89abc58e49..52d04b3758 100644 --- a/packages/page-bounties/src/Bounties.slow.spec.tsx +++ b/packages/page-bounties/src/Bounties.slow.spec.tsx @@ -29,6 +29,7 @@ const renderBounties = () => { diff --git a/packages/page-settings/src/General.tsx b/packages/page-settings/src/General.tsx index 5d8e05bf92..71e5623797 100644 --- a/packages/page-settings/src/General.tsx +++ b/packages/page-settings/src/General.tsx @@ -20,11 +20,11 @@ interface Props { className?: string; } -const ledgerConnOptions = settings.availableLedgerConn; +const _ledgerConnOptions = settings.availableLedgerConn; function General ({ className = '' }: Props): React.ReactElement { const { t } = useTranslation(); - const { api, isApiReady } = useApi(); + const { api, isApiReady, isElectron } = useApi(); const { isLedgerCapable } = useLedger(); // tri-state: null = nothing changed, false = no reload, true = reload required const [changed, setChanged] = useState(null); @@ -34,6 +34,11 @@ function General ({ className = '' }: Props): React.ReactElement { return { ...values, uiTheme: values.uiTheme === 'dark' ? 'dark' : 'light' }; }); + const ledgerConnOptions = useMemo( + () => _ledgerConnOptions.filter(({ value }) => !isElectron || value !== 'webusb'), + [isElectron] + ); + const iconOptions = useMemo( () => settings.availableIcons .map((o): Option => createIdenticon(o, ['default'])) diff --git a/packages/react-api/src/Api.tsx b/packages/react-api/src/Api.tsx index 867b2b6265..58b7678b7a 100644 --- a/packages/react-api/src/Api.tsx +++ b/packages/react-api/src/Api.tsx @@ -31,6 +31,7 @@ import { decodeUrlTypes } from './urlTypes'; interface Props { children: React.ReactNode; apiUrl: string; + isElectron: boolean; store?: KeyringStore; } @@ -178,7 +179,7 @@ async function loadOnReady (api: ApiPromise, injectedPromise: Promise | null { +function Api ({ apiUrl, children, isElectron, store }: Props): React.ReactElement | null { const { queuePayload, queueSetTxStatus } = useContext(StatusContext); const [state, setState] = useState({ hasInjectedAccounts: false, isApiReady: false } as unknown as ApiState); const [isApiConnected, setIsApiConnected] = useState(false); @@ -187,8 +188,8 @@ function Api ({ apiUrl, children, store }: Props): React.ReactElement | n const [extensions, setExtensions] = useState(); const value = useMemo( - () => ({ ...state, api, apiError, apiUrl, extensions, isApiConnected, isApiInitialized, isWaitingInjected: !extensions }), - [apiError, extensions, isApiConnected, isApiInitialized, state, apiUrl] + () => ({ ...state, api, apiError, apiUrl, extensions, isApiConnected, isApiInitialized, isElectron, isWaitingInjected: !extensions }), + [apiError, extensions, isApiConnected, isApiInitialized, isElectron, state, apiUrl] ); // initial initialization diff --git a/packages/react-api/src/types.ts b/packages/react-api/src/types.ts index fb7bf1b64c..f2b595d3a8 100644 --- a/packages/react-api/src/types.ts +++ b/packages/react-api/src/types.ts @@ -35,6 +35,7 @@ export interface ApiProps extends ApiState { extensions?: InjectedExtension[]; isApiConnected: boolean; isApiInitialized: boolean; + isElectron: boolean; isWaitingInjected: boolean; }