@broxus/evm-connect 1.12.7 → 1.12.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +2 -2
- package/dist/index.esm.js +2 -2
- package/lib/cjs/components/EvmConnectButton/index.js +1 -1
- package/lib/cjs/components/EvmConnectDialog/index.js +4 -7
- package/lib/cjs/components/EvmConnector/index.js +3 -4
- package/lib/cjs/components/EvmProvidersDispatcher/ConnectionRequest/index.js +5 -4
- package/lib/cjs/components/EvmProvidersDispatcher/ProviderButton/index.js +8 -2
- package/lib/cjs/components/EvmProvidersDispatcher/index.js +10 -0
- package/lib/cjs/context/EvmWalletProvidersContext.js +7 -6
- package/lib/cjs/intl/index.js +4 -0
- package/lib/esm/components/EvmConnectButton/index.d.ts +0 -1
- package/lib/esm/components/EvmConnectButton/index.js +1 -1
- package/lib/esm/components/EvmConnectDialog/index.js +4 -7
- package/lib/esm/components/EvmConnector/index.js +4 -5
- package/lib/esm/components/EvmProvidersDispatcher/ConnectionRequest/index.d.ts +3 -1
- package/lib/esm/components/EvmProvidersDispatcher/ConnectionRequest/index.js +4 -3
- package/lib/esm/components/EvmProvidersDispatcher/ProviderButton/index.js +9 -3
- package/lib/esm/components/EvmProvidersDispatcher/index.js +7 -0
- package/lib/esm/context/EvmWalletProvidersContext.d.ts +5 -4
- package/lib/esm/context/EvmWalletProvidersContext.js +7 -6
- package/lib/esm/intl/index.js +4 -0
- package/package.json +4 -4
|
@@ -72,6 +72,6 @@ exports.EvmConnectButton = (0, mobx_react_lite_1.observer)(({ disabled, network,
|
|
|
72
72
|
typeof trigger === 'function'
|
|
73
73
|
? trigger({ connect: standalone ? connect : open, disabled: mergedDisabled })
|
|
74
74
|
: (React.createElement(react_uikit_1.Button, { "aria-disabled": mergedDisabled, disabled: mergedDisabled, ...restProps, onClick: standalone ? connect : open })),
|
|
75
|
-
!standalone && (React.createElement(context_1.EvmWalletProvidersProvider, { agreementsNote: walletProviders?.agreementsNote, network: network, onConnect: close },
|
|
75
|
+
!standalone && (React.createElement(context_1.EvmWalletProvidersProvider, { agreementsNote: walletProviders?.agreementsNote, network: network, recentMetaStorageKey: walletProviders?.recentMetaStorageKey, onConnect: close },
|
|
76
76
|
React.createElement(EvmConnectDialog_1.EvmConnectDialog, { className: popupClassName, open: isModalShown, type: popupType, onClose: close })))));
|
|
77
77
|
});
|
|
@@ -54,30 +54,27 @@ exports.EvmConnectDialog = (0, mobx_react_lite_1.observer)(({ className, open, t
|
|
|
54
54
|
(0, react_uikit_1.removeModalMode)('evm-modal-page');
|
|
55
55
|
walletProviders.reset();
|
|
56
56
|
};
|
|
57
|
-
const close = () => {
|
|
58
|
-
onClose?.();
|
|
59
|
-
};
|
|
60
57
|
React.useEffect(() => {
|
|
61
58
|
if (open) {
|
|
62
59
|
(0, react_uikit_1.addModalMode)('evm-modal-page');
|
|
63
60
|
}
|
|
64
61
|
}, [open]);
|
|
65
62
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
66
|
-
React.useEffect(() =>
|
|
63
|
+
React.useEffect(() => onClosed, []);
|
|
67
64
|
if (type === 'drawer') {
|
|
68
65
|
return (React.createElement(react_uikit_1.Drawer, { className: className, destroyOnClose: true, keyboard: !walletProviders.connectingProvider, maskClosable: !walletProviders.connectingProvider, motion: {
|
|
69
66
|
motionLeave: true,
|
|
70
67
|
removeOnLeave: true,
|
|
71
68
|
// eslint-disable-next-line sort-keys
|
|
72
69
|
onLeaveEnd: onClosed,
|
|
73
|
-
}, open: open, placement: "bottom", push: false, rootClassName: "evm-connect-drawer", onClose:
|
|
70
|
+
}, open: open, placement: "bottom", push: false, rootClassName: "evm-connect-drawer", onClose: onClose },
|
|
74
71
|
React.createElement(react_components_1.Close, { kind: "drawer", ratio: 0.9, onClick: onClose }),
|
|
75
72
|
React.createElement(react_uikit_1.Component, { className: "uk-drawer-header" },
|
|
76
73
|
React.createElement(react_uikit_1.Component, { className: "uk-drawer-title" }, intl.formatMessage(intl_1.default.EVM_CONNECT_DISPATCHER_POPUP_TITLE))),
|
|
77
74
|
React.createElement("div", { className: "uk-drawer-body" },
|
|
78
75
|
React.createElement(components_1.EvmProvidersDispatcher, null)),
|
|
79
|
-
React.createElement(react_uikit_1.Text, { align: "center", className: "uk-drawer-footer uk-margin-top", component: "footer", kind: "meta" }, walletProviders.agreementsNote || intl.formatMessage(intl_1.default.EVM_CONNECT_AGREEMENTS_NOTE))));
|
|
76
|
+
walletProviders.agreementsNote !== false && (React.createElement(react_uikit_1.Text, { align: "center", className: "uk-drawer-footer uk-margin-top", component: "footer", kind: "meta" }, walletProviders.agreementsNote || intl.formatMessage(intl_1.default.EVM_CONNECT_AGREEMENTS_NOTE)))));
|
|
80
77
|
}
|
|
81
|
-
return (React.createElement(react_uikit_1.Modal, { centered: true, className: (0, classnames_1.default)('evm-connect-modal', className), closeIcon: React.createElement(react_components_1.Close, { kind: "modal", ratio: 0.9, onClick:
|
|
78
|
+
return (React.createElement(react_uikit_1.Modal, { centered: true, className: (0, classnames_1.default)('evm-connect-modal', className), closeIcon: React.createElement(react_components_1.Close, { kind: "modal", ratio: 0.9, onClick: onClose }), destroyOnClose: true, footer: walletProviders.agreementsNote !== false && (React.createElement(react_uikit_1.Text, { align: "center", component: "div", kind: "meta" }, walletProviders.agreementsNote || intl.formatMessage(intl_1.default.EVM_CONNECT_AGREEMENTS_NOTE))), keyboard: !walletProviders.connectingProvider, maskClosable: !walletProviders.connectingProvider, title: intl.formatMessage(intl_1.default.EVM_CONNECT_DISPATCHER_POPUP_TITLE), visible: open, width: 380, onClose: onClose, onClosed: onClosed },
|
|
82
79
|
React.createElement(components_1.EvmProvidersDispatcher, null)));
|
|
83
80
|
});
|
|
@@ -53,7 +53,7 @@ exports.EvmConnector = (0, mobx_react_lite_1.observer)((props) => {
|
|
|
53
53
|
const intl = (0, react_intl_1.useIntl)();
|
|
54
54
|
const walletService = (0, context_1.useEvmWalletService)();
|
|
55
55
|
const walletProviders = (0, context_1.useEvmWalletProviders)();
|
|
56
|
-
const [, setRecentMeta] = (0, hooks_1.useRecentConnectionMeta)(walletProviders.recentMetaStorageKey);
|
|
56
|
+
const [recentMeta, setRecentMeta] = (0, hooks_1.useRecentConnectionMeta)(walletProviders.recentMetaStorageKey);
|
|
57
57
|
const drop = React.useRef(null);
|
|
58
58
|
const { changeWalletButtonText = intl.formatMessage(intl_1.default.EVM_CONNECT_CHANGE_WALLET_BTN_TEXT), className, connectButtonShape, connectButtonText = intl.formatMessage(intl_1.default.EVM_CONNECT_CONNECT_BTN_TEXT), connectButtonTrigger, connectButtonType, disconnectButtonText = intl.formatMessage(intl_1.default.EVM_CONNECT_DISCONNECT_BTN_TEXT), network = walletService.network, popupType, suffix, showDropMenu = true, showSubIcon = true, standalone = walletService.providers?.length === 1, warnUnsupportedNetwork = true, } = props;
|
|
59
59
|
const changeWallet = () => {
|
|
@@ -63,9 +63,8 @@ exports.EvmConnector = (0, mobx_react_lite_1.observer)((props) => {
|
|
|
63
63
|
if (walletService.hasProvider) {
|
|
64
64
|
drop.current?.close();
|
|
65
65
|
await walletService.disconnect();
|
|
66
|
-
const recentMeta = (0, hooks_1.getRecentConnectionMeta)();
|
|
67
66
|
if (recentMeta) {
|
|
68
|
-
setRecentMeta({ ...recentMeta, disconnected: true });
|
|
67
|
+
setRecentMeta({ ...recentMeta, disconnected: true }, walletProviders.recentMetaStorageKey);
|
|
69
68
|
}
|
|
70
69
|
}
|
|
71
70
|
};
|
|
@@ -105,7 +104,7 @@ exports.EvmConnector = (0, mobx_react_lite_1.observer)((props) => {
|
|
|
105
104
|
}) })) })),
|
|
106
105
|
React.createElement(react_uikit_1.Flex, { alignItems: "center", className: "evm-connect-connector-suffix" },
|
|
107
106
|
suffix,
|
|
108
|
-
|
|
107
|
+
!isDisconnected && showDropMenu && (React.createElement(react_uikit_1.Dropdown, { ref: drop, action: ['click'], hideAction: ['click'], overlayClassName: "evm-connect-dropdown", overlay: (React.createElement(react_uikit_1.List, { className: "uk-margin-remove", size: "large" },
|
|
109
108
|
!standalone && (React.createElement(react_uikit_1.List.Item, { key: "connect-wallet" },
|
|
110
109
|
React.createElement(EvmConnectButton_1.EvmConnectButton, { className: "evm-connect-change-wallet", network: network, popupType: popupType, type: "link", onOpen: changeWallet }, changeWalletButtonText))),
|
|
111
110
|
React.createElement(react_uikit_1.List.Item, null,
|
|
@@ -36,16 +36,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
36
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
exports.ConnectionRequest =
|
|
39
|
+
exports.ConnectionRequest = void 0;
|
|
40
40
|
const react_components_1 = require("@broxus/react-components");
|
|
41
41
|
const react_uikit_1 = require("@broxus/react-uikit");
|
|
42
42
|
const classnames_1 = __importDefault(require("classnames"));
|
|
43
|
+
const mobx_react_lite_1 = require("mobx-react-lite");
|
|
43
44
|
const React = __importStar(require("react"));
|
|
44
45
|
const react_intl_1 = require("react-intl");
|
|
45
46
|
const context_1 = require("../../../context");
|
|
46
47
|
const intl_1 = __importDefault(require("../../../intl"));
|
|
47
48
|
require("./index.css");
|
|
48
|
-
|
|
49
|
+
exports.ConnectionRequest = (0, mobx_react_lite_1.observer)(() => {
|
|
49
50
|
const intl = (0, react_intl_1.useIntl)();
|
|
50
51
|
const walletProviders = (0, context_1.useEvmWalletProviders)();
|
|
51
52
|
const tryAgain = async () => {
|
|
@@ -69,6 +70,6 @@ function ConnectionRequest() {
|
|
|
69
70
|
})),
|
|
70
71
|
React.createElement("div", null, intl.formatMessage(intl_1.default.EVM_CONNECT_DISPATCHER_POPUP_REQUEST_NOTE)))) : (React.createElement(react_uikit_1.Text, { align: "center" },
|
|
71
72
|
React.createElement("h4", { className: "evm-connect-connection-request-title uk-text-danger" }, intl.formatMessage(intl_1.default.EVM_CONNECT_DISPATCHER_POPUP_REQUEST_FAILED_TITLE)),
|
|
72
|
-
React.createElement("div", { className: "uk-margin-small-bottom" }, walletProviders.error.message ? (React.createElement(react_uikit_1.Text, { color: "danger" }, walletProviders.error.message)) : intl.formatMessage(intl_1.default.EVM_CONNECT_DISPATCHER_POPUP_REQUEST_FAILED_NOTE)),
|
|
73
|
+
React.createElement("div", { className: "uk-margin-small-bottom" }, walletProviders.error.message ? (React.createElement(react_uikit_1.Text, { color: "danger" }, walletProviders.error.message)) : (intl.formatMessage(intl_1.default.EVM_CONNECT_DISPATCHER_POPUP_REQUEST_FAILED_NOTE))),
|
|
73
74
|
React.createElement(react_uikit_1.Button, { className: "evm-connect-connection-request-button", type: "default", onClick: tryAgain }, intl.formatMessage(intl_1.default.EVM_CONNECT_DISPATCHER_POPUP_REQUEST_TRY_AGAIN_BTN_TEXT)))))));
|
|
74
|
-
}
|
|
75
|
+
});
|
|
@@ -66,13 +66,19 @@ exports.ProviderButton = (0, mobx_react_lite_1.observer)((props) => {
|
|
|
66
66
|
onSelectProvider?.(providerConfig);
|
|
67
67
|
}
|
|
68
68
|
};
|
|
69
|
+
// eslint-disable-next-line max-len
|
|
70
|
+
const isInitializing = providerConfig.connector.isInitializing === undefined || providerConfig.connector.isInitializing;
|
|
69
71
|
React.useEffect(() => (0, mobx_1.reaction)(() => providerConfig.connector, connector => {
|
|
70
72
|
if (connector.type !== types_1.EthereumConnectionType.WALLET_CONNECT_V2) {
|
|
71
73
|
setHasProvider(connector.provider != null);
|
|
72
74
|
}
|
|
73
75
|
}, { fireImmediately: true }), [providerConfig.connector]);
|
|
74
|
-
if (hasProvider
|
|
75
|
-
return (React.createElement(react_uikit_1.Button, { className: "evm-connect-provider-button", disabled: true },
|
|
76
|
+
if (!hasProvider && isInitializing) {
|
|
77
|
+
return (React.createElement(react_uikit_1.Button, { className: "evm-connect-provider-button", disabled: true },
|
|
78
|
+
React.createElement("span", { className: "tvm-connect-provider-icon" }, typeof providerConfig.info.icon === 'string' ? (React.createElement(react_components_1.TokenIcon, { iconUrl: providerConfig.info.icon, size: 28 })) : providerConfig.info.icon),
|
|
79
|
+
React.createElement("span", { className: "tvm-connect-provider-title" }, intl.formatMessage(intl_1.default.EVM_CONNECT_INITIALIZING_HINT)),
|
|
80
|
+
React.createElement("span", null,
|
|
81
|
+
React.createElement(react_uikit_1.Spinner, { ratio: 0.8 }))));
|
|
76
82
|
}
|
|
77
83
|
const ua = (0, js_utils_1.getUserAgent)();
|
|
78
84
|
const homepage = providerConfig.info.links?.homepage;
|
|
@@ -32,17 +32,23 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
32
32
|
return result;
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
35
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
39
|
exports.EvmProvidersDispatcher = void 0;
|
|
37
40
|
const react_uikit_1 = require("@broxus/react-uikit");
|
|
38
41
|
const mobx_react_lite_1 = require("mobx-react-lite");
|
|
39
42
|
const React = __importStar(require("react"));
|
|
43
|
+
const react_intl_1 = require("react-intl");
|
|
40
44
|
const ConnectionRequest_1 = require("../../components/EvmProvidersDispatcher/ConnectionRequest");
|
|
41
45
|
const ProviderButton_1 = require("../../components/EvmProvidersDispatcher/ProviderButton");
|
|
42
46
|
const context_1 = require("../../context");
|
|
43
47
|
const hooks_1 = require("../../hooks");
|
|
48
|
+
const intl_1 = __importDefault(require("../../intl"));
|
|
44
49
|
require("./index.css");
|
|
45
50
|
exports.EvmProvidersDispatcher = (0, mobx_react_lite_1.observer)(() => {
|
|
51
|
+
const intl = (0, react_intl_1.useIntl)();
|
|
46
52
|
const walletService = (0, context_1.useEvmWalletService)();
|
|
47
53
|
const walletProviders = (0, context_1.useEvmWalletProviders)();
|
|
48
54
|
const orderedProviders = (0, hooks_1.useOrderedConnections)(walletService.providers ?? []);
|
|
@@ -54,6 +60,10 @@ exports.EvmProvidersDispatcher = (0, mobx_react_lite_1.observer)(() => {
|
|
|
54
60
|
dispatcher.current.style.height = height ? `${height}px` : '';
|
|
55
61
|
}
|
|
56
62
|
}, [walletProviders.connectingProvider, walletProviders.error]);
|
|
63
|
+
if (walletService.providers.length === 0) {
|
|
64
|
+
return (React.createElement("div", { ref: dispatcher, className: "tvm-connect-providers-dispatcher" },
|
|
65
|
+
React.createElement("div", { className: "uk-padding-large" }, intl.formatMessage(intl_1.default.EVM_CONNECT_DISPATCHER_POPUP_NO_PROVIDERS_HINT))));
|
|
66
|
+
}
|
|
57
67
|
return (React.createElement("div", { ref: dispatcher, className: "evm-connect-providers-dispatcher" },
|
|
58
68
|
React.createElement("div", { ref: content }, walletProviders.connectingProvider ? (React.createElement(ConnectionRequest_1.ConnectionRequest, null)) : (React.createElement(react_uikit_1.List, { className: "evm-connect-providers-list" }, orderedProviders.map(providerConfig => (React.createElement(react_uikit_1.List.Item, { key: providerConfig.id },
|
|
59
69
|
React.createElement(ProviderButton_1.ProviderButton, { providerConfig: providerConfig })))))))));
|
|
@@ -58,15 +58,16 @@ exports.EvmWalletProvidersProvider = (0, mobx_react_lite_1.observer)(({ agreemen
|
|
|
58
58
|
const prevConnector = walletService.connector;
|
|
59
59
|
const recentMeta = (0, hooks_1.getRecentConnectionMeta)(recentMetaStorageKey);
|
|
60
60
|
// eslint-disable-next-line no-nested-ternary
|
|
61
|
-
const
|
|
61
|
+
const networkParams = network ?? (recentMeta?.chainId
|
|
62
62
|
? walletService.networks.find(_network => _network.chainId === recentMeta.chainId) ?? 1
|
|
63
63
|
: 1);
|
|
64
|
-
(0, js_utils_1.debug)(`Try to activate ${providerConfig.info.name} connection with chain`, typeof
|
|
65
|
-
await providerConfig.connector?.connect(typeof
|
|
66
|
-
|
|
67
|
-
|
|
64
|
+
(0, js_utils_1.debug)(`Try to activate ${providerConfig.info.name} connection with chain`, typeof networkParams === 'number' ? networkParams : networkParams?.chainId);
|
|
65
|
+
await providerConfig.connector?.connect(typeof networkParams === 'number'
|
|
66
|
+
? networkParams
|
|
67
|
+
: networkParams && (0, utils_1.convertNetworkToChainParams)(networkParams), { onConnect });
|
|
68
|
+
if (walletService.providerId && providerConfig.id !== walletService.providerId) {
|
|
69
|
+
await prevConnector?.disconnect({ force: true });
|
|
68
70
|
}
|
|
69
|
-
await onConnect?.(providerConfig.connector);
|
|
70
71
|
(0, hooks_1.storeRecentConnectionMeta)({
|
|
71
72
|
chainId: providerConfig.connector.chainId?.toString(),
|
|
72
73
|
disconnected: false,
|
package/lib/cjs/intl/index.js
CHANGED
|
@@ -111,4 +111,8 @@ exports.default = (0, react_intl_1.defineMessages)({
|
|
|
111
111
|
defaultMessage: 'Recent',
|
|
112
112
|
id: 'EVM_CONNECT_DISPATCHER_POPUP_RECENT_HINT',
|
|
113
113
|
},
|
|
114
|
+
EVM_CONNECT_DISPATCHER_POPUP_NO_PROVIDERS_HINT: {
|
|
115
|
+
defaultMessage: 'It seems that no provider was configured. Please ensure the service settings are correct.',
|
|
116
|
+
id: 'EVM_CONNECT_DISPATCHER_POPUP_NO_PROVIDERS_HINT',
|
|
117
|
+
},
|
|
114
118
|
});
|
|
@@ -36,6 +36,6 @@ export const EvmConnectButton = observer(({ disabled, network, popupClassName, p
|
|
|
36
36
|
typeof trigger === 'function'
|
|
37
37
|
? trigger({ connect: standalone ? connect : open, disabled: mergedDisabled })
|
|
38
38
|
: (React.createElement(Button, { "aria-disabled": mergedDisabled, disabled: mergedDisabled, ...restProps, onClick: standalone ? connect : open })),
|
|
39
|
-
!standalone && (React.createElement(EvmWalletProvidersProvider, { agreementsNote: walletProviders?.agreementsNote, network: network, onConnect: close },
|
|
39
|
+
!standalone && (React.createElement(EvmWalletProvidersProvider, { agreementsNote: walletProviders?.agreementsNote, network: network, recentMetaStorageKey: walletProviders?.recentMetaStorageKey, onConnect: close },
|
|
40
40
|
React.createElement(EvmConnectDialog, { className: popupClassName, open: isModalShown, type: popupType, onClose: close })))));
|
|
41
41
|
});
|
|
@@ -15,30 +15,27 @@ export const EvmConnectDialog = observer(({ className, open, type, onClose }) =>
|
|
|
15
15
|
removeModalMode('evm-modal-page');
|
|
16
16
|
walletProviders.reset();
|
|
17
17
|
};
|
|
18
|
-
const close = () => {
|
|
19
|
-
onClose?.();
|
|
20
|
-
};
|
|
21
18
|
React.useEffect(() => {
|
|
22
19
|
if (open) {
|
|
23
20
|
addModalMode('evm-modal-page');
|
|
24
21
|
}
|
|
25
22
|
}, [open]);
|
|
26
23
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
27
|
-
React.useEffect(() =>
|
|
24
|
+
React.useEffect(() => onClosed, []);
|
|
28
25
|
if (type === 'drawer') {
|
|
29
26
|
return (React.createElement(Drawer, { className: className, destroyOnClose: true, keyboard: !walletProviders.connectingProvider, maskClosable: !walletProviders.connectingProvider, motion: {
|
|
30
27
|
motionLeave: true,
|
|
31
28
|
removeOnLeave: true,
|
|
32
29
|
// eslint-disable-next-line sort-keys
|
|
33
30
|
onLeaveEnd: onClosed,
|
|
34
|
-
}, open: open, placement: "bottom", push: false, rootClassName: "evm-connect-drawer", onClose:
|
|
31
|
+
}, open: open, placement: "bottom", push: false, rootClassName: "evm-connect-drawer", onClose: onClose },
|
|
35
32
|
React.createElement(Close, { kind: "drawer", ratio: 0.9, onClick: onClose }),
|
|
36
33
|
React.createElement(Component, { className: "uk-drawer-header" },
|
|
37
34
|
React.createElement(Component, { className: "uk-drawer-title" }, intl.formatMessage(messages.EVM_CONNECT_DISPATCHER_POPUP_TITLE))),
|
|
38
35
|
React.createElement("div", { className: "uk-drawer-body" },
|
|
39
36
|
React.createElement(EvmProvidersDispatcher, null)),
|
|
40
|
-
React.createElement(Text, { align: "center", className: "uk-drawer-footer uk-margin-top", component: "footer", kind: "meta" }, walletProviders.agreementsNote || intl.formatMessage(messages.EVM_CONNECT_AGREEMENTS_NOTE))));
|
|
37
|
+
walletProviders.agreementsNote !== false && (React.createElement(Text, { align: "center", className: "uk-drawer-footer uk-margin-top", component: "footer", kind: "meta" }, walletProviders.agreementsNote || intl.formatMessage(messages.EVM_CONNECT_AGREEMENTS_NOTE)))));
|
|
41
38
|
}
|
|
42
|
-
return (React.createElement(Modal, { centered: true, className: classNames('evm-connect-modal', className), closeIcon: React.createElement(Close, { kind: "modal", ratio: 0.9, onClick:
|
|
39
|
+
return (React.createElement(Modal, { centered: true, className: classNames('evm-connect-modal', className), closeIcon: React.createElement(Close, { kind: "modal", ratio: 0.9, onClick: onClose }), destroyOnClose: true, footer: walletProviders.agreementsNote !== false && (React.createElement(Text, { align: "center", component: "div", kind: "meta" }, walletProviders.agreementsNote || intl.formatMessage(messages.EVM_CONNECT_AGREEMENTS_NOTE))), keyboard: !walletProviders.connectingProvider, maskClosable: !walletProviders.connectingProvider, title: intl.formatMessage(messages.EVM_CONNECT_DISPATCHER_POPUP_TITLE), visible: open, width: 380, onClose: onClose, onClosed: onClosed },
|
|
43
40
|
React.createElement(EvmProvidersDispatcher, null)));
|
|
44
41
|
});
|
|
@@ -7,14 +7,14 @@ import * as React from 'react';
|
|
|
7
7
|
import { useIntl } from 'react-intl';
|
|
8
8
|
import { EvmConnectButton } from '../../components/EvmConnectButton';
|
|
9
9
|
import { useEvmWalletProviders, useEvmWalletService } from '../../context';
|
|
10
|
-
import {
|
|
10
|
+
import { useRecentConnectionMeta } from '../../hooks';
|
|
11
11
|
import messages from '../../intl';
|
|
12
12
|
import './index.css';
|
|
13
13
|
export const EvmConnector = observer((props) => {
|
|
14
14
|
const intl = useIntl();
|
|
15
15
|
const walletService = useEvmWalletService();
|
|
16
16
|
const walletProviders = useEvmWalletProviders();
|
|
17
|
-
const [, setRecentMeta] = useRecentConnectionMeta(walletProviders.recentMetaStorageKey);
|
|
17
|
+
const [recentMeta, setRecentMeta] = useRecentConnectionMeta(walletProviders.recentMetaStorageKey);
|
|
18
18
|
const drop = React.useRef(null);
|
|
19
19
|
const { changeWalletButtonText = intl.formatMessage(messages.EVM_CONNECT_CHANGE_WALLET_BTN_TEXT), className, connectButtonShape, connectButtonText = intl.formatMessage(messages.EVM_CONNECT_CONNECT_BTN_TEXT), connectButtonTrigger, connectButtonType, disconnectButtonText = intl.formatMessage(messages.EVM_CONNECT_DISCONNECT_BTN_TEXT), network = walletService.network, popupType, suffix, showDropMenu = true, showSubIcon = true, standalone = walletService.providers?.length === 1, warnUnsupportedNetwork = true, } = props;
|
|
20
20
|
const changeWallet = () => {
|
|
@@ -24,9 +24,8 @@ export const EvmConnector = observer((props) => {
|
|
|
24
24
|
if (walletService.hasProvider) {
|
|
25
25
|
drop.current?.close();
|
|
26
26
|
await walletService.disconnect();
|
|
27
|
-
const recentMeta = getRecentConnectionMeta();
|
|
28
27
|
if (recentMeta) {
|
|
29
|
-
setRecentMeta({ ...recentMeta, disconnected: true });
|
|
28
|
+
setRecentMeta({ ...recentMeta, disconnected: true }, walletProviders.recentMetaStorageKey);
|
|
30
29
|
}
|
|
31
30
|
}
|
|
32
31
|
};
|
|
@@ -66,7 +65,7 @@ export const EvmConnector = observer((props) => {
|
|
|
66
65
|
}) })) })),
|
|
67
66
|
React.createElement(Flex, { alignItems: "center", className: "evm-connect-connector-suffix" },
|
|
68
67
|
suffix,
|
|
69
|
-
|
|
68
|
+
!isDisconnected && showDropMenu && (React.createElement(Dropdown, { ref: drop, action: ['click'], hideAction: ['click'], overlayClassName: "evm-connect-dropdown", overlay: (React.createElement(List, { className: "uk-margin-remove", size: "large" },
|
|
70
69
|
!standalone && (React.createElement(List.Item, { key: "connect-wallet" },
|
|
71
70
|
React.createElement(EvmConnectButton, { className: "evm-connect-change-wallet", network: network, popupType: popupType, type: "link", onOpen: changeWallet }, changeWalletButtonText))),
|
|
72
71
|
React.createElement(List.Item, null,
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { Icon } from '@broxus/react-components';
|
|
2
2
|
import { Button, Grid, Text } from '@broxus/react-uikit';
|
|
3
3
|
import classNames from 'classnames';
|
|
4
|
+
import { observer } from 'mobx-react-lite';
|
|
4
5
|
import * as React from 'react';
|
|
5
6
|
import { useIntl } from 'react-intl';
|
|
6
7
|
import { useEvmWalletProviders } from '../../../context';
|
|
7
8
|
import messages from '../../../intl';
|
|
8
9
|
import './index.css';
|
|
9
|
-
export
|
|
10
|
+
export const ConnectionRequest = observer(() => {
|
|
10
11
|
const intl = useIntl();
|
|
11
12
|
const walletProviders = useEvmWalletProviders();
|
|
12
13
|
const tryAgain = async () => {
|
|
@@ -30,6 +31,6 @@ export function ConnectionRequest() {
|
|
|
30
31
|
})),
|
|
31
32
|
React.createElement("div", null, intl.formatMessage(messages.EVM_CONNECT_DISPATCHER_POPUP_REQUEST_NOTE)))) : (React.createElement(Text, { align: "center" },
|
|
32
33
|
React.createElement("h4", { className: "evm-connect-connection-request-title uk-text-danger" }, intl.formatMessage(messages.EVM_CONNECT_DISPATCHER_POPUP_REQUEST_FAILED_TITLE)),
|
|
33
|
-
React.createElement("div", { className: "uk-margin-small-bottom" }, walletProviders.error.message ? (React.createElement(Text, { color: "danger" }, walletProviders.error.message)) : intl.formatMessage(messages.EVM_CONNECT_DISPATCHER_POPUP_REQUEST_FAILED_NOTE)),
|
|
34
|
+
React.createElement("div", { className: "uk-margin-small-bottom" }, walletProviders.error.message ? (React.createElement(Text, { color: "danger" }, walletProviders.error.message)) : (intl.formatMessage(messages.EVM_CONNECT_DISPATCHER_POPUP_REQUEST_FAILED_NOTE))),
|
|
34
35
|
React.createElement(Button, { className: "evm-connect-connection-request-button", type: "default", onClick: tryAgain }, intl.formatMessage(messages.EVM_CONNECT_DISPATCHER_POPUP_REQUEST_TRY_AGAIN_BTN_TEXT)))))));
|
|
35
|
-
}
|
|
36
|
+
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { camelToSnake, getUserAgent, isMobile } from '@broxus/js-utils';
|
|
2
2
|
import { TokenIcon } from '@broxus/react-components';
|
|
3
|
-
import { Button, Text } from '@broxus/react-uikit';
|
|
3
|
+
import { Button, Spinner, Text } from '@broxus/react-uikit';
|
|
4
4
|
import { reaction } from 'mobx';
|
|
5
5
|
import { observer } from 'mobx-react-lite';
|
|
6
6
|
import * as React from 'react';
|
|
@@ -27,13 +27,19 @@ export const ProviderButton = observer((props) => {
|
|
|
27
27
|
onSelectProvider?.(providerConfig);
|
|
28
28
|
}
|
|
29
29
|
};
|
|
30
|
+
// eslint-disable-next-line max-len
|
|
31
|
+
const isInitializing = providerConfig.connector.isInitializing === undefined || providerConfig.connector.isInitializing;
|
|
30
32
|
React.useEffect(() => reaction(() => providerConfig.connector, connector => {
|
|
31
33
|
if (connector.type !== EthereumConnectionType.WALLET_CONNECT_V2) {
|
|
32
34
|
setHasProvider(connector.provider != null);
|
|
33
35
|
}
|
|
34
36
|
}, { fireImmediately: true }), [providerConfig.connector]);
|
|
35
|
-
if (hasProvider
|
|
36
|
-
return (React.createElement(Button, { className: "evm-connect-provider-button", disabled: true },
|
|
37
|
+
if (!hasProvider && isInitializing) {
|
|
38
|
+
return (React.createElement(Button, { className: "evm-connect-provider-button", disabled: true },
|
|
39
|
+
React.createElement("span", { className: "tvm-connect-provider-icon" }, typeof providerConfig.info.icon === 'string' ? (React.createElement(TokenIcon, { iconUrl: providerConfig.info.icon, size: 28 })) : providerConfig.info.icon),
|
|
40
|
+
React.createElement("span", { className: "tvm-connect-provider-title" }, intl.formatMessage(messages.EVM_CONNECT_INITIALIZING_HINT)),
|
|
41
|
+
React.createElement("span", null,
|
|
42
|
+
React.createElement(Spinner, { ratio: 0.8 }))));
|
|
37
43
|
}
|
|
38
44
|
const ua = getUserAgent();
|
|
39
45
|
const homepage = providerConfig.info.links?.homepage;
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { List } from '@broxus/react-uikit';
|
|
2
2
|
import { observer } from 'mobx-react-lite';
|
|
3
3
|
import * as React from 'react';
|
|
4
|
+
import { useIntl } from 'react-intl';
|
|
4
5
|
import { ConnectionRequest } from '../../components/EvmProvidersDispatcher/ConnectionRequest';
|
|
5
6
|
import { ProviderButton } from '../../components/EvmProvidersDispatcher/ProviderButton';
|
|
6
7
|
import { useEvmWalletProviders, useEvmWalletService } from '../../context';
|
|
7
8
|
import { useOrderedConnections } from '../../hooks';
|
|
9
|
+
import messages from '../../intl';
|
|
8
10
|
import './index.css';
|
|
9
11
|
export const EvmProvidersDispatcher = observer(() => {
|
|
12
|
+
const intl = useIntl();
|
|
10
13
|
const walletService = useEvmWalletService();
|
|
11
14
|
const walletProviders = useEvmWalletProviders();
|
|
12
15
|
const orderedProviders = useOrderedConnections(walletService.providers ?? []);
|
|
@@ -18,6 +21,10 @@ export const EvmProvidersDispatcher = observer(() => {
|
|
|
18
21
|
dispatcher.current.style.height = height ? `${height}px` : '';
|
|
19
22
|
}
|
|
20
23
|
}, [walletProviders.connectingProvider, walletProviders.error]);
|
|
24
|
+
if (walletService.providers.length === 0) {
|
|
25
|
+
return (React.createElement("div", { ref: dispatcher, className: "tvm-connect-providers-dispatcher" },
|
|
26
|
+
React.createElement("div", { className: "uk-padding-large" }, intl.formatMessage(messages.EVM_CONNECT_DISPATCHER_POPUP_NO_PROVIDERS_HINT))));
|
|
27
|
+
}
|
|
21
28
|
return (React.createElement("div", { ref: dispatcher, className: "evm-connect-providers-dispatcher" },
|
|
22
29
|
React.createElement("div", { ref: content }, walletProviders.connectingProvider ? (React.createElement(ConnectionRequest, null)) : (React.createElement(List, { className: "evm-connect-providers-list" }, orderedProviders.map(providerConfig => (React.createElement(List.Item, { key: providerConfig.id },
|
|
23
30
|
React.createElement(ProviderButton, { providerConfig: providerConfig })))))))));
|
|
@@ -2,7 +2,7 @@ import * as React from 'react';
|
|
|
2
2
|
import { type EthereumConnector } from '../core';
|
|
3
3
|
import { type EvmNetworkConfig, type EvmWalletProviderConfig } from '../types';
|
|
4
4
|
export interface EvmWalletProvidersContextConsumer {
|
|
5
|
-
agreementsNote?: React.ReactNode;
|
|
5
|
+
agreementsNote?: React.ReactNode | false;
|
|
6
6
|
connect: (providerConfig: EvmWalletProviderConfig) => Promise<void>;
|
|
7
7
|
connectingProvider?: EvmWalletProviderConfig | null;
|
|
8
8
|
error?: Error | null;
|
|
@@ -11,12 +11,13 @@ export interface EvmWalletProvidersContextConsumer {
|
|
|
11
11
|
}
|
|
12
12
|
export declare const EvmWalletProvidersContext: React.Context<EvmWalletProvidersContextConsumer | null>;
|
|
13
13
|
export declare function useEvmWalletProviders(): EvmWalletProvidersContextConsumer;
|
|
14
|
-
|
|
14
|
+
interface EvmWalletProvidersProviderProps {
|
|
15
15
|
agreementsNote?: React.ReactNode;
|
|
16
16
|
network?: EvmNetworkConfig;
|
|
17
17
|
recentMetaStorageKey?: string;
|
|
18
18
|
onConnect?: (connector?: EthereumConnector) => Promise<void> | void;
|
|
19
|
-
}
|
|
20
|
-
export declare const EvmWalletProvidersProvider: (({ agreementsNote, children, network, recentMetaStorageKey, onConnect, }: EvmWalletProvidersProviderProps) => React.JSX.Element) & {
|
|
19
|
+
}
|
|
20
|
+
export declare const EvmWalletProvidersProvider: (({ agreementsNote, children, network, recentMetaStorageKey, onConnect, }: React.PropsWithChildren<EvmWalletProvidersProviderProps>) => React.JSX.Element) & {
|
|
21
21
|
displayName: string;
|
|
22
22
|
};
|
|
23
|
+
export {};
|
|
@@ -21,15 +21,16 @@ export const EvmWalletProvidersProvider = observer(({ agreementsNote, children,
|
|
|
21
21
|
const prevConnector = walletService.connector;
|
|
22
22
|
const recentMeta = getRecentConnectionMeta(recentMetaStorageKey);
|
|
23
23
|
// eslint-disable-next-line no-nested-ternary
|
|
24
|
-
const
|
|
24
|
+
const networkParams = network ?? (recentMeta?.chainId
|
|
25
25
|
? walletService.networks.find(_network => _network.chainId === recentMeta.chainId) ?? 1
|
|
26
26
|
: 1);
|
|
27
|
-
debug(`Try to activate ${providerConfig.info.name} connection with chain`, typeof
|
|
28
|
-
await providerConfig.connector?.connect(typeof
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
debug(`Try to activate ${providerConfig.info.name} connection with chain`, typeof networkParams === 'number' ? networkParams : networkParams?.chainId);
|
|
28
|
+
await providerConfig.connector?.connect(typeof networkParams === 'number'
|
|
29
|
+
? networkParams
|
|
30
|
+
: networkParams && convertNetworkToChainParams(networkParams), { onConnect });
|
|
31
|
+
if (walletService.providerId && providerConfig.id !== walletService.providerId) {
|
|
32
|
+
await prevConnector?.disconnect({ force: true });
|
|
31
33
|
}
|
|
32
|
-
await onConnect?.(providerConfig.connector);
|
|
33
34
|
storeRecentConnectionMeta({
|
|
34
35
|
chainId: providerConfig.connector.chainId?.toString(),
|
|
35
36
|
disconnected: false,
|
package/lib/esm/intl/index.js
CHANGED
|
@@ -109,4 +109,8 @@ export default defineMessages({
|
|
|
109
109
|
defaultMessage: 'Recent',
|
|
110
110
|
id: 'EVM_CONNECT_DISPATCHER_POPUP_RECENT_HINT',
|
|
111
111
|
},
|
|
112
|
+
EVM_CONNECT_DISPATCHER_POPUP_NO_PROVIDERS_HINT: {
|
|
113
|
+
defaultMessage: 'It seems that no provider was configured. Please ensure the service settings are correct.',
|
|
114
|
+
id: 'EVM_CONNECT_DISPATCHER_POPUP_NO_PROVIDERS_HINT',
|
|
115
|
+
},
|
|
112
116
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@broxus/evm-connect",
|
|
3
|
-
"version": "1.12.
|
|
3
|
+
"version": "1.12.9",
|
|
4
4
|
"description": "Ethereum wallets connector.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
@@ -78,8 +78,8 @@
|
|
|
78
78
|
"dependencies": {
|
|
79
79
|
"@broxus/js-core": "^0.32.1",
|
|
80
80
|
"@broxus/js-utils": "^1.3.16",
|
|
81
|
-
"@broxus/react-components": "^0.23.
|
|
82
|
-
"@broxus/react-uikit": "^0.19.
|
|
81
|
+
"@broxus/react-components": "^0.23.4",
|
|
82
|
+
"@broxus/react-uikit": "^0.19.3",
|
|
83
83
|
"@metamask/detect-provider": "^2.0.0",
|
|
84
84
|
"@walletconnect/ethereum-provider": "^2.20.2",
|
|
85
85
|
"classnames": "^2.5.1"
|
|
@@ -96,5 +96,5 @@
|
|
|
96
96
|
"web3-types": "^1.x",
|
|
97
97
|
"web3-utils": "^4.x"
|
|
98
98
|
},
|
|
99
|
-
"gitHead": "
|
|
99
|
+
"gitHead": "0d38ed5de484717a5fcbc4c831055da0e43a81b7"
|
|
100
100
|
}
|