@arcblock/ux 2.9.61 → 2.9.62

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.
@@ -8,6 +8,7 @@ import Img from '../Img';
8
8
  import { mergeProps, isEthereumDid } from '../Util';
9
9
  import DIDMotif from './did-motif';
10
10
  import blockies from './etherscan-blockies';
11
+ import { DID_PREFIX } from '../Util/constant';
11
12
 
12
13
  /**
13
14
  * Avatar component
@@ -48,7 +49,7 @@ function Avatar(props) {
48
49
  const blockyIcon = useMemo(() => {
49
50
  if (isEthereumDid(did)) {
50
51
  return blockies.createIcon({
51
- seed: did.replace('did:abt:', '').toLowerCase(),
52
+ seed: did.replace(DID_PREFIX, '').toLowerCase(),
52
53
  size: 8,
53
54
  scale: 16
54
55
  }).toDataURL();
@@ -126,7 +127,7 @@ function Avatar(props) {
126
127
  if (did) {
127
128
  // 渲染 did motif
128
129
  return /*#__PURE__*/_jsx(DIDMotif, {
129
- did: did.replace('did:abt:', ''),
130
+ did: did.replace(DID_PREFIX, ''),
130
131
  size: size,
131
132
  animation: animation,
132
133
  shape: Shape[(shape || '').toUpperCase()],
package/es/DID/index.js CHANGED
@@ -4,20 +4,27 @@ import { getDIDMotifInfo } from '@arcblock/did-motif';
4
4
  import QRCode from 'qrcode.react';
5
5
  import { Icon } from '@iconify/react';
6
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';
7
+ import { Box, Dialog, DialogContent, DialogTitle, Typography } from '@mui/material';
8
+ import { useCreation, useMemoizedFn } from 'ahooks';
9
+ import { temp as colors } from '../Colors';
10
+ import { DID_PREFIX } from '../Util/constant';
9
11
  import Address from '../Address';
10
12
  import Avatar from '../Avatar';
11
13
  import { isEthereumDid, getFontSize, getDIDColor } from '../Util';
14
+ import { translate } from '../Locale/util';
12
15
  import { jsx as _jsx } from "react/jsx-runtime";
13
- import { jsxs as _jsxs } from "react/jsx-runtime";
14
16
  import { Fragment as _Fragment } from "react/jsx-runtime";
17
+ import { jsxs as _jsxs } from "react/jsx-runtime";
15
18
  const translations = {
16
19
  en: {
17
- scanQrcode: 'Scan with DID Wallet to transfer token to here'
20
+ scanQrcode: 'Scan with DID Wallet to transfer token to here',
21
+ download: 'Download',
22
+ downloadTips: "Don't have DID Wallet ?"
18
23
  },
19
24
  zh: {
20
- scanQrcode: '扫描此二维码,用 DID 钱包转账'
25
+ scanQrcode: '扫描此二维码,用 DID Wallet 转账',
26
+ download: '下载',
27
+ downloadTips: '没有 DID Wallet ?'
21
28
  }
22
29
  };
23
30
  const DIDPropTypes = {
@@ -79,10 +86,9 @@ const DID = /*#__PURE__*/forwardRef(({
79
86
  locale,
80
87
  ...rest
81
88
  }, ref) => {
82
- if (!translations[locale]) {
83
- // eslint-disable-next-line no-param-reassign
84
- locale = 'en';
85
- }
89
+ const t = useMemoizedFn((key, data = {}) => {
90
+ return translate(translations, key, locale, 'en', data);
91
+ });
86
92
  try {
87
93
  if (!chainId) {
88
94
  const chainHostUrl = window?.blocklet?.CHAIN_HOST;
@@ -132,11 +138,35 @@ const DID = /*#__PURE__*/forwardRef(({
132
138
  const openQrCode = useMemoizedFn(() => {
133
139
  setOpen(true);
134
140
  });
141
+ const downloadUrl = useCreation(() => {
142
+ if (['zh', 'en'].includes) {
143
+ return `https://www.didwallet.io/${locale}`;
144
+ }
145
+ return 'https://www.didwallet.io/en';
146
+ }, [locale]);
147
+ const downloadTips = useCreation(() => {
148
+ return /*#__PURE__*/_jsxs(_Fragment, {
149
+ children: [t('downloadTips'), ' ', /*#__PURE__*/_jsx(Box, {
150
+ component: "a",
151
+ href: downloadUrl,
152
+ target: "_blank",
153
+ rel: "noreferrer",
154
+ sx: {
155
+ color: colors.foregroundsFgInteractive,
156
+ textDecoration: 'none',
157
+ '&:hover': {
158
+ textDecoration: 'underline'
159
+ }
160
+ },
161
+ children: t('download')
162
+ })]
163
+ });
164
+ }, [downloadUrl]);
135
165
  return /*#__PURE__*/_jsxs(_Fragment, {
136
166
  children: [/*#__PURE__*/_jsx(Address, {
137
167
  ref: ref,
138
168
  locale: locale,
139
- content: `did:abt:${did}`,
169
+ content: `${DID_PREFIX}${did}`,
140
170
  ...rest,
141
171
  prepend: prepend,
142
172
  append: showQrcode ? /*#__PURE__*/_jsx(Box, {
@@ -156,22 +186,17 @@ const DID = /*#__PURE__*/forwardRef(({
156
186
  maxWidth: "sm",
157
187
  children: [/*#__PURE__*/_jsx(DialogTitle, {
158
188
  align: "center",
159
- children: /*#__PURE__*/_jsx(Box, {
160
- display: "inline-block",
161
- pt: 1.5,
162
- fontSize: {
163
- xs: 13,
164
- sm: 'inherit'
165
- },
166
- component: "span",
167
- children: translations[locale].scanQrcode
189
+ children: /*#__PURE__*/_jsx(Typography, {
190
+ variant: "h6",
191
+ component: "h3",
192
+ children: t('scanQrcode')
168
193
  })
169
194
  }), /*#__PURE__*/_jsxs(DialogContent, {
170
195
  align: "center",
171
196
  children: [/*#__PURE__*/_jsx(QRCode
172
197
  // eslint-disable-next-line max-len
173
198
  , {
174
- value: `abt://abtwallet.io/i?did=did:abt:${did}&action=didRecognize&chainID=${chainId || DEFAULT_CHAIN_ID}`,
199
+ value: `abt://abtwallet.io/i?did=${DID_PREFIX}${did}&action=didRecognize&chainID=${chainId || DEFAULT_CHAIN_ID}`,
175
200
  size: 256,
176
201
  renderAs: "svg",
177
202
  level: "M"
@@ -183,9 +208,18 @@ const DID = /*#__PURE__*/forwardRef(({
183
208
  children: /*#__PURE__*/_jsx(Address, {
184
209
  copyable: true,
185
210
  locale: locale,
186
- content: `did:abt:${did}`,
211
+ content: `${DID_PREFIX}${did}`,
212
+ prepend: prepend,
187
213
  children: did
188
214
  })
215
+ }), /*#__PURE__*/_jsx(Typography, {
216
+ variant: "body2",
217
+ sx: {
218
+ color: colors.textSubtitle,
219
+ fontSize: '12px',
220
+ mt: 1
221
+ },
222
+ children: downloadTips
189
223
  })]
190
224
  })]
191
225
  })]
@@ -8,6 +8,7 @@ export const API_DID_PREFIX = '/api/did';
8
8
  export const DASHBOARD_URL = `${AUTH_SERVICE_PREFIX}/admin`;
9
9
  export const PROFILE_URL = `${AUTH_SERVICE_PREFIX}/user`;
10
10
  export const NAVIGATION_URL = `${AUTH_SERVICE_PREFIX}/admin/navigation`;
11
+ export const DID_PREFIX = 'did:abt:';
11
12
  export const PASSPORT_STATUS = {
12
13
  VALID: 'valid',
13
14
  REVOKED: 'revoked'
package/es/Util/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable no-bitwise */
2
2
  import padStart from 'lodash/padStart';
3
3
  import { getDIDMotifInfo, colors } from '@arcblock/did-motif';
4
+ import { DID_PREFIX } from './constant';
4
5
  let dateTool = null;
5
6
  export function parseQuery(str) {
6
7
  return str.replace(/^\?/, '').split('&').map(x => x.split('=')).filter(([key]) => !!key).reduce((memo, x) => {
@@ -251,7 +252,7 @@ export const getFontSize = size => {
251
252
 
252
253
  // 参考: asset-chain @arcblock/did
253
254
  export const isEthereumDid = did => {
254
- const address = did.replace('did:abt:', '');
255
+ const address = did.replace(DID_PREFIX, '');
255
256
  // check if it has the basic requirements of an address
256
257
  if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) {
257
258
  return false;
@@ -13,6 +13,7 @@ var _Img = _interopRequireDefault(require("../Img"));
13
13
  var _Util = require("../Util");
14
14
  var _didMotif2 = _interopRequireDefault(require("./did-motif"));
15
15
  var _etherscanBlockies = _interopRequireDefault(require("./etherscan-blockies"));
16
+ var _constant = require("../Util/constant");
16
17
  var _jsxRuntime = require("react/jsx-runtime");
17
18
  const _excluded = ["did", "size", "src", "variant", "animation", "shape", "blockiesPadding", "responsive"];
18
19
  /* eslint-disable react/no-unused-prop-types */
@@ -61,7 +62,7 @@ function Avatar(props) {
61
62
  const blockyIcon = (0, _react.useMemo)(() => {
62
63
  if ((0, _Util.isEthereumDid)(did)) {
63
64
  return _etherscanBlockies.default.createIcon({
64
- seed: did.replace('did:abt:', '').toLowerCase(),
65
+ seed: did.replace(_constant.DID_PREFIX, '').toLowerCase(),
65
66
  size: 8,
66
67
  scale: 16
67
68
  }).toDataURL();
@@ -135,7 +136,7 @@ function Avatar(props) {
135
136
  if (did) {
136
137
  // 渲染 did motif
137
138
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_didMotif2.default, _objectSpread({
138
- did: did.replace('did:abt:', ''),
139
+ did: did.replace(_constant.DID_PREFIX, ''),
139
140
  size: size,
140
141
  animation: animation,
141
142
  shape: _didMotif.Shape[(shape || '').toUpperCase()],
package/lib/DID/index.js CHANGED
@@ -12,9 +12,12 @@ var _react2 = require("@iconify/react");
12
12
  var _qrCodeRounded = _interopRequireDefault(require("@iconify-icons/material-symbols/qr-code-rounded"));
13
13
  var _material = require("@mui/material");
14
14
  var _ahooks = require("ahooks");
15
+ var _Colors = require("../Colors");
16
+ var _constant = require("../Util/constant");
15
17
  var _Address = _interopRequireDefault(require("../Address"));
16
18
  var _Avatar = _interopRequireDefault(require("../Avatar"));
17
19
  var _Util = require("../Util");
20
+ var _util = require("../Locale/util");
18
21
  var _jsxRuntime = require("react/jsx-runtime");
19
22
  const _excluded = ["did", "showAvatar", "showQrcode", "chainId", "locale"];
20
23
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -27,10 +30,14 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return
27
30
  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
31
  const translations = {
29
32
  en: {
30
- scanQrcode: 'Scan with DID Wallet to transfer token to here'
33
+ scanQrcode: 'Scan with DID Wallet to transfer token to here',
34
+ download: 'Download',
35
+ downloadTips: "Don't have DID Wallet ?"
31
36
  },
32
37
  zh: {
33
- scanQrcode: '扫描此二维码,用 DID 钱包转账'
38
+ scanQrcode: '扫描此二维码,用 DID Wallet 转账',
39
+ download: '下载',
40
+ downloadTips: '没有 DID Wallet ?'
34
41
  }
35
42
  };
36
43
  const DIDPropTypes = {
@@ -93,10 +100,10 @@ const DID = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
93
100
  locale
94
101
  } = _ref,
95
102
  rest = _objectWithoutProperties(_ref, _excluded);
96
- if (!translations[locale]) {
97
- // eslint-disable-next-line no-param-reassign
98
- locale = 'en';
99
- }
103
+ const t = (0, _ahooks.useMemoizedFn)(function (key) {
104
+ let data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
105
+ return (0, _util.translate)(translations, key, locale, 'en', data);
106
+ });
100
107
  try {
101
108
  if (!chainId) {
102
109
  var _window, _window$blocklet;
@@ -147,11 +154,35 @@ const DID = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
147
154
  const openQrCode = (0, _ahooks.useMemoizedFn)(() => {
148
155
  setOpen(true);
149
156
  });
157
+ const downloadUrl = (0, _ahooks.useCreation)(() => {
158
+ if (['zh', 'en'].includes) {
159
+ return "https://www.didwallet.io/".concat(locale);
160
+ }
161
+ return 'https://www.didwallet.io/en';
162
+ }, [locale]);
163
+ const downloadTips = (0, _ahooks.useCreation)(() => {
164
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
165
+ children: [t('downloadTips'), ' ', /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Box, {
166
+ component: "a",
167
+ href: downloadUrl,
168
+ target: "_blank",
169
+ rel: "noreferrer",
170
+ sx: {
171
+ color: _Colors.temp.foregroundsFgInteractive,
172
+ textDecoration: 'none',
173
+ '&:hover': {
174
+ textDecoration: 'underline'
175
+ }
176
+ },
177
+ children: t('download')
178
+ })]
179
+ });
180
+ }, [downloadUrl]);
150
181
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
151
182
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Address.default, _objectSpread(_objectSpread({
152
183
  ref: ref,
153
184
  locale: locale,
154
- content: "did:abt:".concat(did)
185
+ content: "".concat(_constant.DID_PREFIX).concat(did)
155
186
  }, rest), {}, {
156
187
  prepend: prepend,
157
188
  append: showQrcode ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Box, {
@@ -171,22 +202,17 @@ const DID = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
171
202
  maxWidth: "sm",
172
203
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_material.DialogTitle, {
173
204
  align: "center",
174
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Box, {
175
- display: "inline-block",
176
- pt: 1.5,
177
- fontSize: {
178
- xs: 13,
179
- sm: 'inherit'
180
- },
181
- component: "span",
182
- children: translations[locale].scanQrcode
205
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Typography, {
206
+ variant: "h6",
207
+ component: "h3",
208
+ children: t('scanQrcode')
183
209
  })
184
210
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_material.DialogContent, {
185
211
  align: "center",
186
212
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_qrcode.default
187
213
  // eslint-disable-next-line max-len
188
214
  , {
189
- value: "abt://abtwallet.io/i?did=did:abt:".concat(did, "&action=didRecognize&chainID=").concat(chainId || DEFAULT_CHAIN_ID),
215
+ value: "abt://abtwallet.io/i?did=".concat(_constant.DID_PREFIX).concat(did, "&action=didRecognize&chainID=").concat(chainId || DEFAULT_CHAIN_ID),
190
216
  size: 256,
191
217
  renderAs: "svg",
192
218
  level: "M"
@@ -198,9 +224,18 @@ const DID = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
198
224
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Address.default, {
199
225
  copyable: true,
200
226
  locale: locale,
201
- content: "did:abt:".concat(did),
227
+ content: "".concat(_constant.DID_PREFIX).concat(did),
228
+ prepend: prepend,
202
229
  children: did
203
230
  })
231
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_material.Typography, {
232
+ variant: "body2",
233
+ sx: {
234
+ color: _Colors.temp.textSubtitle,
235
+ fontSize: '12px',
236
+ mt: 1
237
+ },
238
+ children: downloadTips
204
239
  })]
205
240
  })]
206
241
  })]
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.SESSION_TOKEN_STORAGE_KEY = exports.RELAY_SOCKET_PREFIX = exports.REFRESH_TOKEN_STORAGE_KEY = exports.PROFILE_URL = exports.PASSPORT_STATUS = exports.NAVIGATION_URL = exports.DEFAULT_WINDOW_TIMEOUT = exports.DEFAULT_TIMEOUT = exports.DASHBOARD_URL = exports.AUTH_SERVICE_PREFIX = exports.API_DID_PREFIX = void 0;
6
+ exports.SESSION_TOKEN_STORAGE_KEY = exports.RELAY_SOCKET_PREFIX = exports.REFRESH_TOKEN_STORAGE_KEY = exports.PROFILE_URL = exports.PASSPORT_STATUS = exports.NAVIGATION_URL = exports.DID_PREFIX = exports.DEFAULT_WINDOW_TIMEOUT = exports.DEFAULT_TIMEOUT = exports.DASHBOARD_URL = exports.AUTH_SERVICE_PREFIX = exports.API_DID_PREFIX = void 0;
7
7
  const DEFAULT_TIMEOUT = exports.DEFAULT_TIMEOUT = 5 * 60;
8
8
  const DEFAULT_WINDOW_TIMEOUT = exports.DEFAULT_WINDOW_TIMEOUT = 30 * 60;
9
9
  const AUTH_SERVICE_PREFIX = exports.AUTH_SERVICE_PREFIX = '/.well-known/service';
@@ -14,6 +14,7 @@ const API_DID_PREFIX = exports.API_DID_PREFIX = '/api/did';
14
14
  const DASHBOARD_URL = exports.DASHBOARD_URL = "".concat(AUTH_SERVICE_PREFIX, "/admin");
15
15
  const PROFILE_URL = exports.PROFILE_URL = "".concat(AUTH_SERVICE_PREFIX, "/user");
16
16
  const NAVIGATION_URL = exports.NAVIGATION_URL = "".concat(AUTH_SERVICE_PREFIX, "/admin/navigation");
17
+ const DID_PREFIX = exports.DID_PREFIX = 'did:abt:';
17
18
  const PASSPORT_STATUS = exports.PASSPORT_STATUS = {
18
19
  VALID: 'valid',
19
20
  REVOKED: 'revoked'
package/lib/Util/index.js CHANGED
@@ -21,6 +21,7 @@ exports.str2color = exports.sleep = exports.setVisitorId = void 0;
21
21
  exports.stringifyQuery = stringifyQuery;
22
22
  var _padStart = _interopRequireDefault(require("lodash/padStart"));
23
23
  var _didMotif = require("@arcblock/did-motif");
24
+ var _constant = require("./constant");
24
25
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
26
  /* eslint-disable no-bitwise */
26
27
 
@@ -292,7 +293,7 @@ const getFontSize = size => {
292
293
  // 参考: asset-chain @arcblock/did
293
294
  exports.getFontSize = getFontSize;
294
295
  const isEthereumDid = did => {
295
- const address = did.replace('did:abt:', '');
296
+ const address = did.replace(_constant.DID_PREFIX, '');
296
297
  // check if it has the basic requirements of an address
297
298
  if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) {
298
299
  return false;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arcblock/ux",
3
- "version": "2.9.61",
3
+ "version": "2.9.62",
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": "2349446884f18459b909c2dfe32f4411554f83da",
361
+ "gitHead": "0e898a48269d71e8e35a784f6c317211060cfae8",
362
362
  "dependencies": {
363
363
  "@arcblock/did-motif": "^1.1.13",
364
- "@arcblock/icons": "^2.9.61",
365
- "@arcblock/nft-display": "^2.9.61",
366
- "@arcblock/react-hooks": "^2.9.61",
364
+ "@arcblock/icons": "^2.9.62",
365
+ "@arcblock/nft-display": "^2.9.62",
366
+ "@arcblock/react-hooks": "^2.9.62",
367
367
  "@babel/plugin-syntax-dynamic-import": "^7.8.3",
368
368
  "@emotion/react": "^11.10.4",
369
369
  "@emotion/styled": "^11.10.4",
@@ -8,6 +8,7 @@ import Img from '../Img';
8
8
  import { mergeProps, isEthereumDid } from '../Util';
9
9
  import DIDMotif from './did-motif';
10
10
  import blockies from './etherscan-blockies';
11
+ import { DID_PREFIX } from '../Util/constant';
11
12
 
12
13
  /**
13
14
  * Avatar component
@@ -38,7 +39,7 @@ function Avatar(props) {
38
39
  if (isEthereumDid(did)) {
39
40
  return blockies
40
41
  .createIcon({
41
- seed: did.replace('did:abt:', '').toLowerCase(),
42
+ seed: did.replace(DID_PREFIX, '').toLowerCase(),
42
43
  size: 8,
43
44
  scale: 16,
44
45
  })
@@ -111,7 +112,7 @@ function Avatar(props) {
111
112
  // 渲染 did motif
112
113
  return (
113
114
  <DIDMotif
114
- did={did.replace('did:abt:', '')}
115
+ did={did.replace(DID_PREFIX, '')}
115
116
  size={size}
116
117
  animation={animation}
117
118
  shape={Shape[(shape || '').toUpperCase()]}
package/src/DID/index.jsx CHANGED
@@ -4,20 +4,27 @@ import { getDIDMotifInfo } from '@arcblock/did-motif';
4
4
  import QRCode from 'qrcode.react';
5
5
  import { Icon } from '@iconify/react';
6
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';
7
+ import { Box, Dialog, DialogContent, DialogTitle, Typography } from '@mui/material';
8
+ import { useCreation, useMemoizedFn } from 'ahooks';
9
9
 
10
+ import { temp as colors } from '../Colors';
11
+ import { DID_PREFIX } from '../Util/constant';
10
12
  import Address from '../Address';
11
13
  import Avatar from '../Avatar';
12
14
 
13
15
  import { isEthereumDid, getFontSize, getDIDColor } from '../Util';
16
+ import { translate } from '../Locale/util';
14
17
 
15
18
  const translations = {
16
19
  en: {
17
20
  scanQrcode: 'Scan with DID Wallet to transfer token to here',
21
+ download: 'Download',
22
+ downloadTips: "Don't have DID Wallet ?",
18
23
  },
19
24
  zh: {
20
- scanQrcode: '扫描此二维码,用 DID 钱包转账',
25
+ scanQrcode: '扫描此二维码,用 DID Wallet 转账',
26
+ download: '下载',
27
+ downloadTips: '没有 DID Wallet ?',
21
28
  },
22
29
  };
23
30
 
@@ -77,10 +84,9 @@ const getAvatarSize = (didMotifInfo, isEthDid, size) => {
77
84
  * @type React.ForwardRefRenderFunction<HTMLElement, typeof DIDPropTypes>
78
85
  */
79
86
  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
- }
87
+ const t = useMemoizedFn((key, data = {}) => {
88
+ return translate(translations, key, locale, 'en', data);
89
+ });
84
90
 
85
91
  try {
86
92
  if (!chainId) {
@@ -125,12 +131,41 @@ const DID = forwardRef(({ did, showAvatar, showQrcode, chainId, locale, ...rest
125
131
  setOpen(true);
126
132
  });
127
133
 
134
+ const downloadUrl = useCreation(() => {
135
+ if (['zh', 'en'].includes) {
136
+ return `https://www.didwallet.io/${locale}`;
137
+ }
138
+ return 'https://www.didwallet.io/en';
139
+ }, [locale]);
140
+
141
+ const downloadTips = useCreation(() => {
142
+ return (
143
+ <>
144
+ {t('downloadTips')}{' '}
145
+ <Box
146
+ component="a"
147
+ href={downloadUrl}
148
+ target="_blank"
149
+ rel="noreferrer"
150
+ sx={{
151
+ color: colors.foregroundsFgInteractive,
152
+ textDecoration: 'none',
153
+ '&:hover': {
154
+ textDecoration: 'underline',
155
+ },
156
+ }}>
157
+ {t('download')}
158
+ </Box>
159
+ </>
160
+ );
161
+ }, [downloadUrl]);
162
+
128
163
  return (
129
164
  <>
130
165
  <Address
131
166
  ref={ref}
132
167
  locale={locale}
133
- content={`did:abt:${did}`}
168
+ content={`${DID_PREFIX}${did}`}
134
169
  {...rest}
135
170
  prepend={prepend}
136
171
  append={
@@ -152,23 +187,34 @@ const DID = forwardRef(({ did, showAvatar, showQrcode, chainId, locale, ...rest
152
187
 
153
188
  <Dialog open={open} onClose={closeQrCode} maxWidth="sm">
154
189
  <DialogTitle align="center">
155
- <Box display="inline-block" pt={1.5} fontSize={{ xs: 13, sm: 'inherit' }} component="span">
156
- {translations[locale].scanQrcode}
157
- </Box>
190
+ <Typography variant="h6" component="h3">
191
+ {t('scanQrcode')}
192
+ </Typography>
158
193
  </DialogTitle>
159
194
  <DialogContent align="center">
160
195
  <QRCode
161
196
  // eslint-disable-next-line max-len
162
- value={`abt://abtwallet.io/i?did=did:abt:${did}&action=didRecognize&chainID=${chainId || DEFAULT_CHAIN_ID}`}
197
+ value={`abt://abtwallet.io/i?did=${DID_PREFIX}${did}&action=didRecognize&chainID=${
198
+ chainId || DEFAULT_CHAIN_ID
199
+ }`}
163
200
  size={256}
164
201
  renderAs="svg"
165
202
  level="M"
166
203
  />
167
204
  <Box sx={{ marginTop: 1, textAlign: 'center' }}>
168
- <Address copyable locale={locale} content={`did:abt:${did}`}>
205
+ <Address copyable locale={locale} content={`${DID_PREFIX}${did}`} prepend={prepend}>
169
206
  {did}
170
207
  </Address>
171
208
  </Box>
209
+ <Typography
210
+ variant="body2"
211
+ sx={{
212
+ color: colors.textSubtitle,
213
+ fontSize: '12px',
214
+ mt: 1,
215
+ }}>
216
+ {downloadTips}
217
+ </Typography>
172
218
  </DialogContent>
173
219
  </Dialog>
174
220
  </>
@@ -11,6 +11,8 @@ export const DASHBOARD_URL = `${AUTH_SERVICE_PREFIX}/admin`;
11
11
  export const PROFILE_URL = `${AUTH_SERVICE_PREFIX}/user`;
12
12
  export const NAVIGATION_URL = `${AUTH_SERVICE_PREFIX}/admin/navigation`;
13
13
 
14
+ export const DID_PREFIX = 'did:abt:';
15
+
14
16
  export const PASSPORT_STATUS = {
15
17
  VALID: 'valid',
16
18
  REVOKED: 'revoked',
package/src/Util/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable no-bitwise */
2
2
  import padStart from 'lodash/padStart';
3
3
  import { getDIDMotifInfo, colors } from '@arcblock/did-motif';
4
+ import { DID_PREFIX } from './constant';
4
5
 
5
6
  let dateTool = null;
6
7
 
@@ -276,7 +277,7 @@ export const getFontSize = (size) => {
276
277
 
277
278
  // 参考: asset-chain @arcblock/did
278
279
  export const isEthereumDid = (did) => {
279
- const address = did.replace('did:abt:', '');
280
+ const address = did.replace(DID_PREFIX, '');
280
281
  // check if it has the basic requirements of an address
281
282
  if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) {
282
283
  return false;