@arcblock/ux 2.9.49 → 2.9.50

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/es/DID/index.js CHANGED
@@ -1,10 +1,25 @@
1
- import React, { forwardRef } from 'react';
1
+ import { forwardRef, useState } from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { getDIDMotifInfo } from '@arcblock/did-motif';
4
+ import QRCode from 'qrcode.react';
5
+ import { Icon } from '@iconify/react';
6
+ import IconQrCode from '@iconify-icons/material-symbols/qr-code-rounded';
7
+ import { Box, Dialog, DialogContent, DialogTitle } from '@mui/material';
8
+ import { useMemoizedFn } from 'ahooks';
4
9
  import Address from '../Address';
5
10
  import Avatar from '../Avatar';
6
11
  import { isEthereumDid, getFontSize, getDIDColor } from '../Util';
7
12
  import { jsx as _jsx } from "react/jsx-runtime";
13
+ import { jsxs as _jsxs } from "react/jsx-runtime";
14
+ import { Fragment as _Fragment } from "react/jsx-runtime";
15
+ const translations = {
16
+ en: {
17
+ scanQrcode: 'Scan with DID Wallet to transfer token to here'
18
+ },
19
+ zh: {
20
+ scanQrcode: '扫描此二维码,用 DID 钱包转账'
21
+ }
22
+ };
8
23
  const DIDPropTypes = {
9
24
  did: PropTypes.string.isRequired,
10
25
  size: PropTypes.number,
@@ -13,12 +28,19 @@ const DIDPropTypes = {
13
28
  responsive: PropTypes.bool,
14
29
  showCopyButtonInTooltip: PropTypes.bool,
15
30
  showAvatar: PropTypes.bool,
31
+ showQrcode: PropTypes.bool,
16
32
  inline: PropTypes.bool,
17
33
  append: PropTypes.any,
18
34
  compact: PropTypes.bool,
19
35
  startChars: PropTypes.number,
20
36
  endChars: PropTypes.number,
21
- locale: PropTypes.oneOf(['en', 'zh'])
37
+ locale: PropTypes.oneOf(['en', 'zh']),
38
+ chainId: PropTypes.string
39
+ };
40
+ const DEFAULT_CHAIN_ID = 'xenon-2020-01-15';
41
+ const CHAIN_ID_MAP = {
42
+ 'main.abtnetwork.io': DEFAULT_CHAIN_ID,
43
+ 'beta.abtnetwork.io': 'beta'
22
44
  };
23
45
  const getFontColor = (did, didMotifInfo, isEthDid) => {
24
46
  if (isEthDid) {
@@ -52,8 +74,30 @@ const getAvatarSize = (didMotifInfo, isEthDid, size) => {
52
74
  const DID = /*#__PURE__*/forwardRef(({
53
75
  did,
54
76
  showAvatar,
77
+ showQrcode,
78
+ chainId,
79
+ locale,
55
80
  ...rest
56
81
  }, ref) => {
82
+ if (!translations[locale]) {
83
+ // eslint-disable-next-line no-param-reassign
84
+ locale = 'en';
85
+ }
86
+ try {
87
+ if (!chainId) {
88
+ const chainHostUrl = window?.blocklet?.CHAIN_HOST;
89
+ if (chainHostUrl) {
90
+ const chainHost = new URL(chainHostUrl).hostname;
91
+ if (chainHost) {
92
+ // eslint-disable-next-line no-param-reassign
93
+ chainId = CHAIN_ID_MAP[chainHost];
94
+ }
95
+ }
96
+ }
97
+ } catch {
98
+ console.warn('Failed to parse chainHost');
99
+ }
100
+ const [open, setOpen] = useState(false);
57
101
  const isEthDid = isEthereumDid(did);
58
102
  const didMotifInfo = isEthDid ? undefined : getDIDMotifInfo(did);
59
103
  const fontSize = getFontSize(rest.size);
@@ -82,11 +126,67 @@ const DID = /*#__PURE__*/forwardRef(({
82
126
  blockiesPadding: false,
83
127
  className: "did-address-avatar"
84
128
  }, "avatar")];
85
- return /*#__PURE__*/_jsx(Address, {
86
- ref: ref,
87
- ...rest,
88
- prepend: prepend,
89
- children: did
129
+ const closeQrCode = useMemoizedFn(() => {
130
+ setOpen(false);
131
+ });
132
+ const openQrCode = useMemoizedFn(() => {
133
+ setOpen(true);
134
+ });
135
+ return /*#__PURE__*/_jsxs(_Fragment, {
136
+ children: [/*#__PURE__*/_jsx(Address, {
137
+ ref: ref,
138
+ locale: locale,
139
+ ...rest,
140
+ prepend: prepend,
141
+ append: showQrcode ? /*#__PURE__*/_jsx(Box, {
142
+ component: Icon,
143
+ icon: IconQrCode,
144
+ onClick: openQrCode,
145
+ sx: {
146
+ cursor: 'pointer',
147
+ ml: rest.copyable ? 0.5 : 0,
148
+ color: 'grey.500'
149
+ }
150
+ }) : null,
151
+ children: did
152
+ }), /*#__PURE__*/_jsxs(Dialog, {
153
+ open: open,
154
+ onClose: closeQrCode,
155
+ maxWidth: "sm",
156
+ children: [/*#__PURE__*/_jsx(DialogTitle, {
157
+ align: "center",
158
+ children: /*#__PURE__*/_jsx(Box, {
159
+ display: "inline-block",
160
+ pt: 1.5,
161
+ fontSize: {
162
+ xs: 13,
163
+ sm: 'inherit'
164
+ },
165
+ component: "span",
166
+ children: translations[locale].scanQrcode
167
+ })
168
+ }), /*#__PURE__*/_jsxs(DialogContent, {
169
+ align: "center",
170
+ children: [/*#__PURE__*/_jsx(QRCode
171
+ // eslint-disable-next-line max-len
172
+ , {
173
+ value: `abt://abtwallet.io/i?did=did:abt:${did}&action=didRecognize&chainID=${chainId || DEFAULT_CHAIN_ID}`,
174
+ size: 256,
175
+ renderAs: "svg",
176
+ level: "M"
177
+ }), /*#__PURE__*/_jsx(Box, {
178
+ sx: {
179
+ marginTop: 1,
180
+ textAlign: 'center'
181
+ },
182
+ children: /*#__PURE__*/_jsx(Address, {
183
+ copyable: true,
184
+ locale: locale,
185
+ children: did
186
+ })
187
+ })]
188
+ })]
189
+ })]
90
190
  });
91
191
  });
92
192
  export default DID;
@@ -98,10 +198,12 @@ DID.defaultProps = {
98
198
  responsive: true,
99
199
  showCopyButtonInTooltip: false,
100
200
  showAvatar: true,
201
+ showQrcode: false,
101
202
  inline: false,
102
203
  append: null,
103
204
  compact: false,
104
205
  startChars: 6,
105
206
  endChars: 6,
106
- locale: 'en'
207
+ locale: 'en',
208
+ chainId: ''
107
209
  };
package/lib/DID/index.js CHANGED
@@ -4,17 +4,20 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _react = _interopRequireWildcard(require("react"));
7
+ var _react = require("react");
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
  var _didMotif = require("@arcblock/did-motif");
10
+ var _qrcode = _interopRequireDefault(require("qrcode.react"));
11
+ var _react2 = require("@iconify/react");
12
+ var _qrCodeRounded = _interopRequireDefault(require("@iconify-icons/material-symbols/qr-code-rounded"));
13
+ var _material = require("@mui/material");
14
+ var _ahooks = require("ahooks");
10
15
  var _Address = _interopRequireDefault(require("../Address"));
11
16
  var _Avatar = _interopRequireDefault(require("../Avatar"));
12
17
  var _Util = require("../Util");
13
18
  var _jsxRuntime = require("react/jsx-runtime");
14
- const _excluded = ["did", "showAvatar"];
19
+ const _excluded = ["did", "showAvatar", "showQrcode", "chainId", "locale"];
15
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
17
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
18
21
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
19
22
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
20
23
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
@@ -22,6 +25,14 @@ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol"
22
25
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
23
26
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
24
27
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
28
+ const translations = {
29
+ en: {
30
+ scanQrcode: 'Scan with DID Wallet to transfer token to here'
31
+ },
32
+ zh: {
33
+ scanQrcode: '扫描此二维码,用 DID 钱包转账'
34
+ }
35
+ };
25
36
  const DIDPropTypes = {
26
37
  did: _propTypes.default.string.isRequired,
27
38
  size: _propTypes.default.number,
@@ -30,12 +41,19 @@ const DIDPropTypes = {
30
41
  responsive: _propTypes.default.bool,
31
42
  showCopyButtonInTooltip: _propTypes.default.bool,
32
43
  showAvatar: _propTypes.default.bool,
44
+ showQrcode: _propTypes.default.bool,
33
45
  inline: _propTypes.default.bool,
34
46
  append: _propTypes.default.any,
35
47
  compact: _propTypes.default.bool,
36
48
  startChars: _propTypes.default.number,
37
49
  endChars: _propTypes.default.number,
38
- locale: _propTypes.default.oneOf(['en', 'zh'])
50
+ locale: _propTypes.default.oneOf(['en', 'zh']),
51
+ chainId: _propTypes.default.string
52
+ };
53
+ const DEFAULT_CHAIN_ID = 'xenon-2020-01-15';
54
+ const CHAIN_ID_MAP = {
55
+ 'main.abtnetwork.io': DEFAULT_CHAIN_ID,
56
+ 'beta.abtnetwork.io': 'beta'
39
57
  };
40
58
  const getFontColor = (did, didMotifInfo, isEthDid) => {
41
59
  if (isEthDid) {
@@ -69,9 +87,32 @@ const getAvatarSize = (didMotifInfo, isEthDid, size) => {
69
87
  const DID = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
70
88
  let {
71
89
  did,
72
- showAvatar
90
+ showAvatar,
91
+ showQrcode,
92
+ chainId,
93
+ locale
73
94
  } = _ref,
74
95
  rest = _objectWithoutProperties(_ref, _excluded);
96
+ if (!translations[locale]) {
97
+ // eslint-disable-next-line no-param-reassign
98
+ locale = 'en';
99
+ }
100
+ try {
101
+ if (!chainId) {
102
+ var _window, _window$blocklet;
103
+ const chainHostUrl = (_window = window) === null || _window === void 0 ? void 0 : (_window$blocklet = _window.blocklet) === null || _window$blocklet === void 0 ? void 0 : _window$blocklet.CHAIN_HOST;
104
+ if (chainHostUrl) {
105
+ const chainHost = new URL(chainHostUrl).hostname;
106
+ if (chainHost) {
107
+ // eslint-disable-next-line no-param-reassign
108
+ chainId = CHAIN_ID_MAP[chainHost];
109
+ }
110
+ }
111
+ }
112
+ } catch (_unused) {
113
+ console.warn('Failed to parse chainHost');
114
+ }
115
+ const [open, setOpen] = (0, _react.useState)(false);
75
116
  const isEthDid = (0, _Util.isEthereumDid)(did);
76
117
  const didMotifInfo = isEthDid ? undefined : (0, _didMotif.getDIDMotifInfo)(did);
77
118
  const fontSize = (0, _Util.getFontSize)(rest.size);
@@ -100,12 +141,68 @@ const DID = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
100
141
  blockiesPadding: false,
101
142
  className: "did-address-avatar"
102
143
  }, "avatar")];
103
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Address.default, _objectSpread(_objectSpread({
104
- ref: ref
105
- }, rest), {}, {
106
- prepend: prepend,
107
- children: did
108
- }));
144
+ const closeQrCode = (0, _ahooks.useMemoizedFn)(() => {
145
+ setOpen(false);
146
+ });
147
+ const openQrCode = (0, _ahooks.useMemoizedFn)(() => {
148
+ setOpen(true);
149
+ });
150
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
151
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Address.default, _objectSpread(_objectSpread({
152
+ ref: ref,
153
+ locale: locale
154
+ }, rest), {}, {
155
+ prepend: prepend,
156
+ append: showQrcode ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Box, {
157
+ component: _react2.Icon,
158
+ icon: _qrCodeRounded.default,
159
+ onClick: openQrCode,
160
+ sx: {
161
+ cursor: 'pointer',
162
+ ml: rest.copyable ? 0.5 : 0,
163
+ color: 'grey.500'
164
+ }
165
+ }) : null,
166
+ children: did
167
+ })), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.Dialog, {
168
+ open: open,
169
+ onClose: closeQrCode,
170
+ maxWidth: "sm",
171
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_material.DialogTitle, {
172
+ align: "center",
173
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Box, {
174
+ display: "inline-block",
175
+ pt: 1.5,
176
+ fontSize: {
177
+ xs: 13,
178
+ sm: 'inherit'
179
+ },
180
+ component: "span",
181
+ children: translations[locale].scanQrcode
182
+ })
183
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.DialogContent, {
184
+ align: "center",
185
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_qrcode.default
186
+ // eslint-disable-next-line max-len
187
+ , {
188
+ value: "abt://abtwallet.io/i?did=did:abt:".concat(did, "&action=didRecognize&chainID=").concat(chainId || DEFAULT_CHAIN_ID),
189
+ size: 256,
190
+ renderAs: "svg",
191
+ level: "M"
192
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Box, {
193
+ sx: {
194
+ marginTop: 1,
195
+ textAlign: 'center'
196
+ },
197
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Address.default, {
198
+ copyable: true,
199
+ locale: locale,
200
+ children: did
201
+ })
202
+ })]
203
+ })]
204
+ })]
205
+ });
109
206
  });
110
207
  var _default = exports.default = DID;
111
208
  DID.propTypes = DIDPropTypes;
@@ -116,10 +213,12 @@ DID.defaultProps = {
116
213
  responsive: true,
117
214
  showCopyButtonInTooltip: false,
118
215
  showAvatar: true,
216
+ showQrcode: false,
119
217
  inline: false,
120
218
  append: null,
121
219
  compact: false,
122
220
  startChars: 6,
123
221
  endChars: 6,
124
- locale: 'en'
222
+ locale: 'en',
223
+ chainId: ''
125
224
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arcblock/ux",
3
- "version": "2.9.49",
3
+ "version": "2.9.50",
4
4
  "description": "Common used react components for arcblock products",
5
5
  "keywords": [
6
6
  "react",
@@ -358,12 +358,12 @@
358
358
  "@mui/material": "^5.15.0",
359
359
  "react": ">=18.2.0"
360
360
  },
361
- "gitHead": "d4579f3d5648e2f935e5efe75380e574e119cc73",
361
+ "gitHead": "6e3bcb0e1a2a80b56a17ca055c44da8396b46273",
362
362
  "dependencies": {
363
363
  "@arcblock/did-motif": "^1.1.13",
364
- "@arcblock/icons": "^2.9.49",
365
- "@arcblock/nft-display": "^2.9.49",
366
- "@arcblock/react-hooks": "^2.9.49",
364
+ "@arcblock/icons": "^2.9.50",
365
+ "@arcblock/nft-display": "^2.9.50",
366
+ "@arcblock/react-hooks": "^2.9.50",
367
367
  "@babel/plugin-syntax-dynamic-import": "^7.8.3",
368
368
  "@emotion/react": "^11.10.4",
369
369
  "@emotion/styled": "^11.10.4",
@@ -392,6 +392,7 @@
392
392
  "mui-datatables": "^4.3.0",
393
393
  "notistack": "^2.0.5",
394
394
  "pako": "^2.1.0",
395
+ "qrcode.react": "^3.1.0",
395
396
  "react-cookie-consent": "^6.4.1",
396
397
  "react-error-boundary": "^3.1.4",
397
398
  "react-helmet": "^6.1.0",
package/src/DID/index.jsx CHANGED
@@ -1,12 +1,26 @@
1
- import React, { forwardRef } from 'react';
1
+ import { forwardRef, useState } from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { getDIDMotifInfo } from '@arcblock/did-motif';
4
+ import QRCode from 'qrcode.react';
5
+ import { Icon } from '@iconify/react';
6
+ import IconQrCode from '@iconify-icons/material-symbols/qr-code-rounded';
7
+ import { Box, Dialog, DialogContent, DialogTitle } from '@mui/material';
8
+ import { useMemoizedFn } from 'ahooks';
4
9
 
5
10
  import Address from '../Address';
6
11
  import Avatar from '../Avatar';
7
12
 
8
13
  import { isEthereumDid, getFontSize, getDIDColor } from '../Util';
9
14
 
15
+ const translations = {
16
+ en: {
17
+ scanQrcode: 'Scan with DID Wallet to transfer token to here',
18
+ },
19
+ zh: {
20
+ scanQrcode: '扫描此二维码,用 DID 钱包转账',
21
+ },
22
+ };
23
+
10
24
  const DIDPropTypes = {
11
25
  did: PropTypes.string.isRequired,
12
26
  size: PropTypes.number,
@@ -15,12 +29,21 @@ const DIDPropTypes = {
15
29
  responsive: PropTypes.bool,
16
30
  showCopyButtonInTooltip: PropTypes.bool,
17
31
  showAvatar: PropTypes.bool,
32
+ showQrcode: PropTypes.bool,
18
33
  inline: PropTypes.bool,
19
34
  append: PropTypes.any,
20
35
  compact: PropTypes.bool,
21
36
  startChars: PropTypes.number,
22
37
  endChars: PropTypes.number,
23
38
  locale: PropTypes.oneOf(['en', 'zh']),
39
+ chainId: PropTypes.string,
40
+ };
41
+
42
+ const DEFAULT_CHAIN_ID = 'xenon-2020-01-15';
43
+
44
+ const CHAIN_ID_MAP = {
45
+ 'main.abtnetwork.io': DEFAULT_CHAIN_ID,
46
+ 'beta.abtnetwork.io': 'beta',
24
47
  };
25
48
 
26
49
  const getFontColor = (did, didMotifInfo, isEthDid) => {
@@ -53,7 +76,27 @@ const getAvatarSize = (didMotifInfo, isEthDid, size) => {
53
76
  /**
54
77
  * @type React.ForwardRefRenderFunction<HTMLElement, typeof DIDPropTypes>
55
78
  */
56
- const DID = forwardRef(({ did, showAvatar, ...rest }, ref) => {
79
+ const DID = forwardRef(({ did, showAvatar, showQrcode, chainId, locale, ...rest }, ref) => {
80
+ if (!translations[locale]) {
81
+ // eslint-disable-next-line no-param-reassign
82
+ locale = 'en';
83
+ }
84
+
85
+ try {
86
+ if (!chainId) {
87
+ const chainHostUrl = window?.blocklet?.CHAIN_HOST;
88
+ if (chainHostUrl) {
89
+ const chainHost = new URL(chainHostUrl).hostname;
90
+ if (chainHost) {
91
+ // eslint-disable-next-line no-param-reassign
92
+ chainId = CHAIN_ID_MAP[chainHost];
93
+ }
94
+ }
95
+ }
96
+ } catch {
97
+ console.warn('Failed to parse chainHost');
98
+ }
99
+ const [open, setOpen] = useState(false);
57
100
  const isEthDid = isEthereumDid(did);
58
101
  const didMotifInfo = isEthDid ? undefined : getDIDMotifInfo(did);
59
102
  const fontSize = getFontSize(rest.size);
@@ -75,11 +118,59 @@ const DID = forwardRef(({ did, showAvatar, ...rest }, ref) => {
75
118
  />
76
119
  ),
77
120
  ];
121
+ const closeQrCode = useMemoizedFn(() => {
122
+ setOpen(false);
123
+ });
124
+ const openQrCode = useMemoizedFn(() => {
125
+ setOpen(true);
126
+ });
78
127
 
79
128
  return (
80
- <Address ref={ref} {...rest} prepend={prepend}>
81
- {did}
82
- </Address>
129
+ <>
130
+ <Address
131
+ ref={ref}
132
+ locale={locale}
133
+ {...rest}
134
+ prepend={prepend}
135
+ append={
136
+ showQrcode ? (
137
+ <Box
138
+ component={Icon}
139
+ icon={IconQrCode}
140
+ onClick={openQrCode}
141
+ sx={{
142
+ cursor: 'pointer',
143
+ ml: rest.copyable ? 0.5 : 0,
144
+ color: 'grey.500',
145
+ }}
146
+ />
147
+ ) : null
148
+ }>
149
+ {did}
150
+ </Address>
151
+
152
+ <Dialog open={open} onClose={closeQrCode} maxWidth="sm">
153
+ <DialogTitle align="center">
154
+ <Box display="inline-block" pt={1.5} fontSize={{ xs: 13, sm: 'inherit' }} component="span">
155
+ {translations[locale].scanQrcode}
156
+ </Box>
157
+ </DialogTitle>
158
+ <DialogContent align="center">
159
+ <QRCode
160
+ // eslint-disable-next-line max-len
161
+ value={`abt://abtwallet.io/i?did=did:abt:${did}&action=didRecognize&chainID=${chainId || DEFAULT_CHAIN_ID}`}
162
+ size={256}
163
+ renderAs="svg"
164
+ level="M"
165
+ />
166
+ <Box sx={{ marginTop: 1, textAlign: 'center' }}>
167
+ <Address copyable locale={locale}>
168
+ {did}
169
+ </Address>
170
+ </Box>
171
+ </DialogContent>
172
+ </Dialog>
173
+ </>
83
174
  );
84
175
  });
85
176
 
@@ -94,10 +185,12 @@ DID.defaultProps = {
94
185
  responsive: true,
95
186
  showCopyButtonInTooltip: false,
96
187
  showAvatar: true,
188
+ showQrcode: false,
97
189
  inline: false,
98
190
  append: null,
99
191
  compact: false,
100
192
  startChars: 6,
101
193
  endChars: 6,
102
194
  locale: 'en',
195
+ chainId: '',
103
196
  };