@arcblock/ux 2.9.61 → 2.9.62

Sign up to get free protection for your applications and to get access to all the features.
@@ -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;