diff --git a/packages/apps/src/overlays/Connecting.tsx b/packages/apps/src/overlays/Connecting.tsx index 6064a14930..105abb7060 100644 --- a/packages/apps/src/overlays/Connecting.tsx +++ b/packages/apps/src/overlays/Connecting.tsx @@ -19,13 +19,23 @@ interface Props { function Connecting ({ className }: Props): React.ReactElement | null { const { t } = useTranslation(); - const { isApiConnected, isApiReady, isWaitingInjected } = useApi(); + const { apiError, isApiConnected, isApiReady, isWaitingInjected } = useApi(); - if (!isApiReady) { + if (apiError) { return ( +
{apiError}
+
+ ); + } else if (!isApiReady) { + return ( +
{t('Waiting to make a connection to the remote endpoint and finishing API initialization.')}
diff --git a/packages/react-api/src/Api.tsx b/packages/react-api/src/Api.tsx index 8d6f3271b9..0908fe2337 100644 --- a/packages/react-api/src/Api.tsx +++ b/packages/react-api/src/Api.tsx @@ -182,10 +182,12 @@ function Api ({ children, store, url }: Props): React.ReactElement | null const [state, setState] = useState({ hasInjectedAccounts: false, isApiReady: false } as unknown as ApiState); const [isApiConnected, setIsApiConnected] = useState(false); const [isApiInitialized, setIsApiInitialized] = useState(false); + const [apiError, setApiError] = useState(null); const [extensions, setExtensions] = useState(); + const value = useMemo( - () => ({ ...state, api, extensions, isApiConnected, isApiInitialized, isWaitingInjected: !extensions }), - [extensions, isApiConnected, isApiInitialized, state] + () => ({ ...state, api, apiError, extensions, isApiConnected, isApiInitialized, isWaitingInjected: !extensions }), + [apiError, extensions, isApiConnected, isApiInitialized, state] ); // initial initialization @@ -198,6 +200,7 @@ function Api ({ children, store, url }: Props): React.ReactElement | null api.on('connected', () => setIsApiConnected(true)); api.on('disconnected', () => setIsApiConnected(false)); + api.on('error', (error: Error) => setApiError(error.message)); api.on('ready', (): void => { const injectedPromise = web3Enable('polkadot-js/apps'); @@ -207,7 +210,11 @@ function Api ({ children, store, url }: Props): React.ReactElement | null loadOnReady(api, injectedPromise, store, types) .then(setState) - .catch(console.error); + .catch((error): void => { + console.error(error); + + setApiError((error as Error).message); + }); }); setIsApiInitialized(true); diff --git a/packages/react-api/src/types.ts b/packages/react-api/src/types.ts index 859a708c5b..2d1431d28f 100644 --- a/packages/react-api/src/types.ts +++ b/packages/react-api/src/types.ts @@ -29,6 +29,7 @@ export interface ApiState { export interface ApiProps extends ApiState { api: ApiPromise; + apiError: string | null; extensions?: InjectedExtension[]; isApiConnected: boolean; isApiInitialized: boolean;