@abtnode/ux 1.16.5 → 1.16.6-beta-4562aa60
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/lib/blocklet/actions.js +24 -12
- package/lib/blocklet/configuration.js +33 -0
- package/lib/blocklet/preferences/index.js +25 -22
- package/lib/blocklet/transfer-owner.js +201 -0
- package/lib/exchange-passport.js +100 -0
- package/lib/locales/en.js +55 -1
- package/lib/locales/zh.js +55 -2
- package/lib/team/passports/index.js +29 -9
- package/lib/team/passports/trusted-factories.js +240 -0
- package/lib/team/passports/trusted-factory.js +194 -0
- package/lib/team/passports/trusted-issuer.js +2 -2
- package/lib/team/passports/trusted-issuers.js +7 -3
- package/lib/util/index.js +21 -7
- package/package.json +15 -14
package/lib/locales/zh.js
CHANGED
|
@@ -57,6 +57,17 @@ module.exports = {
|
|
|
57
57
|
title: '使用 Owner NFT 接收节点',
|
|
58
58
|
tooltip: '如果你收到了 Owner NFT,你可以通过这个链接申请你的节点所有者通行证'
|
|
59
59
|
},
|
|
60
|
+
exchangePassport: {
|
|
61
|
+
title: '用 NFT 来换取通行证',
|
|
62
|
+
success: '你已经成功换取通行证,并自动登录',
|
|
63
|
+
tooltip: '如果你拥有来自 {collections} 集合的 NFT,点击这里换取通行证',
|
|
64
|
+
dialog: {
|
|
65
|
+
title: '用 NFT 来换取通行证',
|
|
66
|
+
scan: '连接 DID 钱包出示 NFT 以换取通行证',
|
|
67
|
+
confirm: '在钱包中选择 NFT',
|
|
68
|
+
success: '通行证换取成功'
|
|
69
|
+
}
|
|
70
|
+
},
|
|
60
71
|
sidebar: {
|
|
61
72
|
dashboard: '仪表盘',
|
|
62
73
|
blocklets: '基石程序',
|
|
@@ -124,7 +135,7 @@ module.exports = {
|
|
|
124
135
|
dAddress: '去中心化地址(DID)',
|
|
125
136
|
dataStorage: '数据存储',
|
|
126
137
|
delConfirm: '删除',
|
|
127
|
-
delConfirmDescription: '
|
|
138
|
+
delConfirmDescription: '确认删除 {data}?',
|
|
128
139
|
delete: '删除',
|
|
129
140
|
dependents: '被依赖',
|
|
130
141
|
description: '描述',
|
|
@@ -315,6 +326,7 @@ module.exports = {
|
|
|
315
326
|
statusTip: 'Blocklet {status}',
|
|
316
327
|
initialUptime: '少于1分钟',
|
|
317
328
|
dashboard: 'Blocklet 控制台',
|
|
329
|
+
noComponent: '应用没有组件,无法启动',
|
|
318
330
|
action: {
|
|
319
331
|
stopDescription: '停止该基石程序将会使页面不可以访问,可能会导致使用它的用户出现错误',
|
|
320
332
|
confirmStop: '是的,停止',
|
|
@@ -698,7 +710,7 @@ module.exports = {
|
|
|
698
710
|
accessKeyId: 'Access Key',
|
|
699
711
|
lastUsed: '最后使用',
|
|
700
712
|
tip: '请给 Access Key 起个名字',
|
|
701
|
-
saveSecretTip: '你的 Access Secret
|
|
713
|
+
saveSecretTip: '你的 Access Secret 只会展示一次,关闭此窗口后将无法再次查看,不过你可以随时重新创建新的 Access Key',
|
|
702
714
|
iKnow: '我已复制保存好该 Access Secret',
|
|
703
715
|
showSecret: '展示 Secret',
|
|
704
716
|
hideSecret: '隐藏 Secret',
|
|
@@ -977,6 +989,36 @@ module.exports = {
|
|
|
977
989
|
success: '授权成功'
|
|
978
990
|
}
|
|
979
991
|
},
|
|
992
|
+
transferApp: {
|
|
993
|
+
name: '转移所有者',
|
|
994
|
+
transferDialog: {
|
|
995
|
+
title: '转移应用',
|
|
996
|
+
tips: {
|
|
997
|
+
progress: '转移应用需要对方接受后才能完成转移操作,对方一旦接受,无法再使用当前应用所有者凭据登录应用。',
|
|
998
|
+
newOwnerPermissions: '新 Owner 将有权管理成员、通行证,以及设置等所有操作。'
|
|
999
|
+
},
|
|
1000
|
+
createTransferLink: '生成转移链接',
|
|
1001
|
+
createSuccessTip1: '创建转移链接成功,被邀请人必须使用 <a style="color: rgb(29, 193, 199)" target="_blank" href="https://www.didwallet.io/">DID Wallet</a> 接收应用所有权',
|
|
1002
|
+
createSuccessTip2: '请复制并发送给被邀请人。该链接只能使用一次,并将在 {expireDate} 过期。你的转移链接只会展示一次,关闭此窗口后将无法再次查看',
|
|
1003
|
+
createSuccessTip3: '转移成功之后应用会自动重启以使变更生效',
|
|
1004
|
+
link: '邀请链接',
|
|
1005
|
+
iKnow: '我已复制保存好该链接'
|
|
1006
|
+
},
|
|
1007
|
+
connectDialog: {
|
|
1008
|
+
title: '需要授权',
|
|
1009
|
+
scan: '用 DID 钱包扫描下面的二维码,授权应用转让所有权',
|
|
1010
|
+
confirm: '在您的 DID 钱包上确认',
|
|
1011
|
+
success: '授权成功'
|
|
1012
|
+
},
|
|
1013
|
+
receiveDialog: {
|
|
1014
|
+
title: '接收应用程序所有权',
|
|
1015
|
+
scan: '用 DID 钱包扫描下面的二维码,获得应用程序所有权。',
|
|
1016
|
+
confirm: '在您的 DID 钱包上确认',
|
|
1017
|
+
success: '成功获得所有权'
|
|
1018
|
+
},
|
|
1019
|
+
successTitle: '你已成为应用的所有者',
|
|
1020
|
+
visitDashboard: '访问应用控制台'
|
|
1021
|
+
},
|
|
980
1022
|
permission: {
|
|
981
1023
|
create: {
|
|
982
1024
|
title: '创建权限',
|
|
@@ -1034,6 +1076,16 @@ module.exports = {
|
|
|
1034
1076
|
enableIssuanceTip: '“颁发通行证”,“邀请成员” 等操作将被允许',
|
|
1035
1077
|
trustedPassportIssuers: '信任的通行证颁发者',
|
|
1036
1078
|
trustedIssuers: '信任的颁发者',
|
|
1079
|
+
trustedFactories: '信任的 NFT 集合',
|
|
1080
|
+
trustedFactoriesTip: '管理信任的 NFT 集合,持有这些集合中 NFT 的用户可以领取指定通行证',
|
|
1081
|
+
searchFactoryAddress: '搜索集合 DID',
|
|
1082
|
+
configFactories: '配置信任的 NFT 集合',
|
|
1083
|
+
configFactoriesTip: '允许用户用特定 NFT 来换取通行证',
|
|
1084
|
+
factoryAddress: 'NFT 集合 DID',
|
|
1085
|
+
factoryAddressTip: 'NFT 集合必须 ArcBlock 主链上的',
|
|
1086
|
+
role: '通行证类型',
|
|
1087
|
+
ttl: '通行证有效期',
|
|
1088
|
+
ttlTip: '是根据 NFT 的创建日期来计算,0 表示用不过期,可以使用 365d 的语法',
|
|
1037
1089
|
externalPassport: '外部的通信证',
|
|
1038
1090
|
notTrustedIssuerTip: '该通行证无法使用,因为颁发者未在信任的颁发者列表中',
|
|
1039
1091
|
issuerDid: '颁发者 DID',
|
|
@@ -1047,6 +1099,7 @@ module.exports = {
|
|
|
1047
1099
|
searchIssuerDid: '搜索颁发者 DID',
|
|
1048
1100
|
issueBy: '由 {name} 颁发',
|
|
1049
1101
|
configColor: '设置通行证颜色',
|
|
1102
|
+
configColorTip: '通过调色盘来自定义通行证的主色调',
|
|
1050
1103
|
color: '通行证颜色'
|
|
1051
1104
|
},
|
|
1052
1105
|
inviting: {
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = PassportList;
|
|
7
|
-
var _react = require("react");
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _styled = _interopRequireDefault(require("@emotion/styled"));
|
|
9
9
|
var _Add = _interopRequireDefault(require("@mui/icons-material/Add"));
|
|
10
10
|
var _Box = _interopRequireDefault(require("@mui/material/Box"));
|
|
@@ -27,9 +27,12 @@ var _detail = _interopRequireDefault(require("./detail"));
|
|
|
27
27
|
var _color = _interopRequireDefault(require("./color"));
|
|
28
28
|
var _mutateRole = _interopRequireDefault(require("./mutate-role"));
|
|
29
29
|
var _trustedIssuers = _interopRequireDefault(require("./trusted-issuers"));
|
|
30
|
+
var _trustedFactories = _interopRequireDefault(require("./trusted-factories"));
|
|
30
31
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
31
32
|
var _templateObject;
|
|
32
33
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
34
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
35
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
33
36
|
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
34
37
|
function PassportList() {
|
|
35
38
|
const {
|
|
@@ -52,7 +55,8 @@ function PassportList() {
|
|
|
52
55
|
const [showCreate, setShowCreate] = (0, _react.useState)(false);
|
|
53
56
|
const [updateForm, setUpdateForm] = (0, _react.useState)(false);
|
|
54
57
|
const [showColor, setShowColor] = (0, _react.useState)(false);
|
|
55
|
-
const [showTrustedIssuers, setShowTrustedIssuers] = (0, _react.useState)(
|
|
58
|
+
const [showTrustedIssuers, setShowTrustedIssuers] = (0, _react.useState)(false);
|
|
59
|
+
const [showTrustedFactories, setShowTrustedFactories] = (0, _react.useState)(false);
|
|
56
60
|
const [search, setSearch] = (0, _react.useState)('');
|
|
57
61
|
const [loading, setLoading] = (0, _react.useState)(false);
|
|
58
62
|
const toggleShowIssue = async () => {
|
|
@@ -98,6 +102,16 @@ function PassportList() {
|
|
|
98
102
|
},
|
|
99
103
|
menu: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
100
104
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_SplitButton.default.Item, {
|
|
105
|
+
onClick: () => setShowTrustedFactories(true),
|
|
106
|
+
"data-cy": "config-show-trusted-factories",
|
|
107
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
|
|
108
|
+
children: [t('team.passport.configFactories'), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
|
|
109
|
+
fontSize: 12,
|
|
110
|
+
color: "#888",
|
|
111
|
+
children: t('team.passport.configFactoriesTip')
|
|
112
|
+
})]
|
|
113
|
+
})
|
|
114
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_SplitButton.default.Item, {
|
|
101
115
|
"data-cy": "config-show-issue-passport",
|
|
102
116
|
onClick: () => {
|
|
103
117
|
toggleShowIssue();
|
|
@@ -121,8 +135,12 @@ function PassportList() {
|
|
|
121
135
|
}), !isNodeTeam && /*#__PURE__*/(0, _jsxRuntime.jsx)(_SplitButton.default.Item, {
|
|
122
136
|
onClick: () => setShowColor(true),
|
|
123
137
|
"data-cy": "config-passport-color",
|
|
124
|
-
children: /*#__PURE__*/(0, _jsxRuntime.
|
|
125
|
-
children: t('team.passport.configColor')
|
|
138
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
|
|
139
|
+
children: [t('team.passport.configColor'), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
|
|
140
|
+
fontSize: 12,
|
|
141
|
+
color: "#888",
|
|
142
|
+
children: t('team.passport.configColorTip')
|
|
143
|
+
})]
|
|
126
144
|
})
|
|
127
145
|
})]
|
|
128
146
|
}),
|
|
@@ -208,13 +226,13 @@ function PassportList() {
|
|
|
208
226
|
refreshTeam();
|
|
209
227
|
}
|
|
210
228
|
}), updateForm && /*#__PURE__*/(0, _jsxRuntime.jsx)(_detail.default, {
|
|
211
|
-
onCancel: () => setUpdateForm(
|
|
229
|
+
onCancel: () => setUpdateForm(false),
|
|
212
230
|
onSuccess: () => {
|
|
213
|
-
setUpdateForm(
|
|
231
|
+
setUpdateForm(false);
|
|
214
232
|
refreshTeam();
|
|
215
233
|
},
|
|
216
234
|
onDelete: () => {
|
|
217
|
-
setUpdateForm(
|
|
235
|
+
setUpdateForm(false);
|
|
218
236
|
refreshTeam();
|
|
219
237
|
},
|
|
220
238
|
mode: "update",
|
|
@@ -222,9 +240,11 @@ function PassportList() {
|
|
|
222
240
|
item: updateForm
|
|
223
241
|
}), showTrustedIssuers && /*#__PURE__*/(0, _jsxRuntime.jsx)(_trustedIssuers.default, {
|
|
224
242
|
onCancel: () => setShowTrustedIssuers(false)
|
|
243
|
+
}), showTrustedFactories && /*#__PURE__*/(0, _jsxRuntime.jsx)(_trustedFactories.default, {
|
|
244
|
+
onCancel: () => setShowTrustedFactories(false)
|
|
225
245
|
}), showColor && /*#__PURE__*/(0, _jsxRuntime.jsx)(_color.default, {
|
|
226
|
-
onCancel: () => setShowColor(
|
|
227
|
-
onSuccess: () => setShowColor(
|
|
246
|
+
onCancel: () => setShowColor(false),
|
|
247
|
+
onSuccess: () => setShowColor(false)
|
|
228
248
|
})]
|
|
229
249
|
});
|
|
230
250
|
}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = TrustedFactoriesWithPermission;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
|
+
var _styled = _interopRequireDefault(require("@emotion/styled"));
|
|
10
|
+
var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
|
|
11
|
+
var _Dialog = _interopRequireDefault(require("@arcblock/ux/lib/Dialog"));
|
|
12
|
+
var _Box = _interopRequireDefault(require("@mui/material/Box"));
|
|
13
|
+
var _Add = _interopRequireDefault(require("@mui/icons-material/Add"));
|
|
14
|
+
var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
|
|
15
|
+
var _context = require("@arcblock/ux/lib/Locale/context");
|
|
16
|
+
var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
|
|
17
|
+
var _Empty = _interopRequireDefault(require("@arcblock/ux/lib/Empty"));
|
|
18
|
+
var _Tag = _interopRequireDefault(require("@arcblock/ux/lib/Tag"));
|
|
19
|
+
var _Address = _interopRequireDefault(require("@arcblock/did-connect/lib/Address"));
|
|
20
|
+
var _EditIcon = _interopRequireDefault(require("@arcblock/icons/lib/EditIcon"));
|
|
21
|
+
var _DeleteIcon = _interopRequireDefault(require("@arcblock/icons/lib/DeleteIcon"));
|
|
22
|
+
var _Avatar = _interopRequireDefault(require("@arcblock/did-connect/lib/Avatar"));
|
|
23
|
+
var _toast = _interopRequireDefault(require("../../toast"));
|
|
24
|
+
var _permission = require("../../permission");
|
|
25
|
+
var _node = require("../../contexts/node");
|
|
26
|
+
var _team = require("../../contexts/team");
|
|
27
|
+
var _util = require("../../util");
|
|
28
|
+
var _confirm = _interopRequireDefault(require("../../confirm"));
|
|
29
|
+
var _listHeader = _interopRequireDefault(require("../styles/list-header"));
|
|
30
|
+
var _searchInput = _interopRequireDefault(require("../search-input"));
|
|
31
|
+
var _trustedFactory = _interopRequireDefault(require("./trusted-factory"));
|
|
32
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
33
|
+
var _templateObject;
|
|
34
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
35
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
36
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
37
|
+
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
38
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
39
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
40
|
+
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; }
|
|
41
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
42
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
43
|
+
function TrustedFactories(_ref) {
|
|
44
|
+
let {
|
|
45
|
+
onCancel,
|
|
46
|
+
hasPermission
|
|
47
|
+
} = _ref;
|
|
48
|
+
const {
|
|
49
|
+
api
|
|
50
|
+
} = (0, _node.useNodeContext)();
|
|
51
|
+
const {
|
|
52
|
+
teamDid,
|
|
53
|
+
trustedFactories
|
|
54
|
+
} = (0, _team.useTeamContext)();
|
|
55
|
+
const {
|
|
56
|
+
t
|
|
57
|
+
} = (0, _context.useLocaleContext)();
|
|
58
|
+
const [delConfirm, setDelConfirm] = (0, _react.useState)(null);
|
|
59
|
+
const [loading, setLoading] = (0, _react.useState)(false);
|
|
60
|
+
const [trustedFactory, setTrustedFactory] = (0, _react.useState)(null);
|
|
61
|
+
const [search, setSearch] = (0, _react.useState)('');
|
|
62
|
+
const deleteTrustedFactory = async did => {
|
|
63
|
+
if (loading) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
setLoading(true);
|
|
68
|
+
await api.configTrustedFactories({
|
|
69
|
+
input: {
|
|
70
|
+
teamDid,
|
|
71
|
+
trustedFactories: trustedFactories.filter(x => x.factoryAddress !== did)
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
await (0, _util.sleep)(800);
|
|
75
|
+
setLoading(false);
|
|
76
|
+
_toast.default.success(t('common.saveSuccess'));
|
|
77
|
+
setDelConfirm(null);
|
|
78
|
+
} catch (err) {
|
|
79
|
+
setLoading(false);
|
|
80
|
+
_toast.default.error(err.message);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
const filterFactories = trustedFactories.filter(x => !search || x.factoryAddress.toLowerCase().includes(search.toLowerCase()));
|
|
84
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Dialog.default, {
|
|
85
|
+
title: t('team.passport.trustedFactories'),
|
|
86
|
+
open: true,
|
|
87
|
+
onClose: onCancel,
|
|
88
|
+
fullWidth: true,
|
|
89
|
+
PaperProps: {
|
|
90
|
+
style: {
|
|
91
|
+
minHeight: '80vh'
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(Div, {
|
|
95
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
96
|
+
className: "dialog-content",
|
|
97
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
98
|
+
className: "dialog-h1",
|
|
99
|
+
children: t('team.passport.trustedFactoriesTip')
|
|
100
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
|
|
101
|
+
component: _listHeader.default,
|
|
102
|
+
mt: 3,
|
|
103
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
104
|
+
className: "left",
|
|
105
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_searchInput.default, {
|
|
106
|
+
placeholder: t('team.passport.searchFactoryAddress'),
|
|
107
|
+
value: search,
|
|
108
|
+
onChange: e => setSearch(e.target.value)
|
|
109
|
+
})
|
|
110
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
111
|
+
className: "right",
|
|
112
|
+
children: hasPermission && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
|
|
113
|
+
variant: "contained",
|
|
114
|
+
color: "primary",
|
|
115
|
+
size: "small",
|
|
116
|
+
"data-cy": "add-trusted-factory",
|
|
117
|
+
onClick: () => setTrustedFactory({
|
|
118
|
+
mode: 'add'
|
|
119
|
+
}),
|
|
120
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Add.default, {
|
|
121
|
+
style: {
|
|
122
|
+
fontSize: 16,
|
|
123
|
+
marginRight: 4
|
|
124
|
+
}
|
|
125
|
+
}), t('team.add')]
|
|
126
|
+
})
|
|
127
|
+
})]
|
|
128
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
129
|
+
className: "list",
|
|
130
|
+
children: [filterFactories.map(x => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
|
|
131
|
+
display: "flex",
|
|
132
|
+
alignItems: "center",
|
|
133
|
+
justifyContent: "space-between",
|
|
134
|
+
mt: "20px",
|
|
135
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
|
|
136
|
+
flexGrow: 1,
|
|
137
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Address.default, {
|
|
138
|
+
copyable: false,
|
|
139
|
+
prepend: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
|
|
140
|
+
display: "flex",
|
|
141
|
+
alignItems: "center",
|
|
142
|
+
mr: 1,
|
|
143
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Avatar.default, {
|
|
144
|
+
did: x.factoryAddress,
|
|
145
|
+
size: 20
|
|
146
|
+
})
|
|
147
|
+
}),
|
|
148
|
+
showDidLogo: false,
|
|
149
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
150
|
+
style: {
|
|
151
|
+
fontSize: 16
|
|
152
|
+
},
|
|
153
|
+
children: x.factoryAddress
|
|
154
|
+
})
|
|
155
|
+
}), !!x.remark && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
|
|
156
|
+
pl: 3.5,
|
|
157
|
+
fontSize: 12,
|
|
158
|
+
maxWidth: "300px",
|
|
159
|
+
children: x.remark
|
|
160
|
+
})]
|
|
161
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
|
|
162
|
+
color: "gray",
|
|
163
|
+
mr: "24px",
|
|
164
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tag.default, {
|
|
165
|
+
type: "success",
|
|
166
|
+
children: x.passport.role
|
|
167
|
+
})
|
|
168
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
|
|
169
|
+
flexShrink: 0,
|
|
170
|
+
display: "flex",
|
|
171
|
+
alignItems: "center",
|
|
172
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {
|
|
173
|
+
onClick: () => setTrustedFactory({
|
|
174
|
+
mode: 'update',
|
|
175
|
+
data: (0, _cloneDeep.default)(x)
|
|
176
|
+
}),
|
|
177
|
+
"data-cy": "edit-trusted-factory",
|
|
178
|
+
size: "large",
|
|
179
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_EditIcon.default, {})
|
|
180
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {
|
|
181
|
+
"data-cy": "delete-trusted-factory",
|
|
182
|
+
onClick: () => setDelConfirm({
|
|
183
|
+
title: t('common.delete'),
|
|
184
|
+
description: t('common.delConfirmDescription', {
|
|
185
|
+
data: x.factoryAddress
|
|
186
|
+
}),
|
|
187
|
+
confirm: t('common.delConfirm'),
|
|
188
|
+
cancel: t('common.cancel'),
|
|
189
|
+
onConfirm: () => deleteTrustedFactory(x.factoryAddress),
|
|
190
|
+
onCancel: () => {
|
|
191
|
+
setLoading(false);
|
|
192
|
+
setDelConfirm(null);
|
|
193
|
+
}
|
|
194
|
+
}),
|
|
195
|
+
size: "large",
|
|
196
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_DeleteIcon.default, {})
|
|
197
|
+
})]
|
|
198
|
+
})]
|
|
199
|
+
}, x.factoryAddress)), !trustedFactories.length && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Empty.default, {
|
|
200
|
+
children: t('common.empty')
|
|
201
|
+
})]
|
|
202
|
+
})]
|
|
203
|
+
})
|
|
204
|
+
}), trustedFactory && /*#__PURE__*/(0, _jsxRuntime.jsx)(_trustedFactory.default, {
|
|
205
|
+
data: trustedFactory.data,
|
|
206
|
+
trustedFactories: (0, _cloneDeep.default)(trustedFactories),
|
|
207
|
+
onCancel: () => setTrustedFactory(null),
|
|
208
|
+
onSuccess: () => {
|
|
209
|
+
setTrustedFactory(null);
|
|
210
|
+
}
|
|
211
|
+
}), delConfirm && /*#__PURE__*/(0, _jsxRuntime.jsx)(_confirm.default, {
|
|
212
|
+
title: delConfirm.title,
|
|
213
|
+
description: delConfirm.description,
|
|
214
|
+
confirm: delConfirm.confirm,
|
|
215
|
+
cancel: delConfirm.cancel,
|
|
216
|
+
params: delConfirm.params,
|
|
217
|
+
onConfirm: delConfirm.onConfirm,
|
|
218
|
+
onCancel: delConfirm.onCancel
|
|
219
|
+
})]
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
TrustedFactories.propTypes = {
|
|
223
|
+
onCancel: _propTypes.default.func.isRequired,
|
|
224
|
+
hasPermission: _propTypes.default.bool
|
|
225
|
+
};
|
|
226
|
+
TrustedFactories.defaultProps = {
|
|
227
|
+
hasPermission: false
|
|
228
|
+
};
|
|
229
|
+
const TrustedFactoriesInDaemon = (0, _permission.withPermission)(TrustedFactories, 'mutate_team');
|
|
230
|
+
const TrustedFactoriesInService = (0, _permission.withPermission)(TrustedFactories, '', _util.BlockletAdminRoles);
|
|
231
|
+
function TrustedFactoriesWithPermission(props) {
|
|
232
|
+
const {
|
|
233
|
+
inService
|
|
234
|
+
} = (0, _node.useNodeContext)();
|
|
235
|
+
if (inService) {
|
|
236
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(TrustedFactoriesInService, _objectSpread({}, props));
|
|
237
|
+
}
|
|
238
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(TrustedFactoriesInDaemon, _objectSpread({}, props));
|
|
239
|
+
}
|
|
240
|
+
const Div = _styled.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .list {\n .MuiIconButton-root {\n svg {\n fill: #bfbfbf;\n }\n }\n }\n"])));
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = TrustedFactory;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
|
+
var _styled = _interopRequireDefault(require("@emotion/styled"));
|
|
10
|
+
var _ms = _interopRequireDefault(require("ms"));
|
|
11
|
+
var _Dialog = _interopRequireDefault(require("@arcblock/ux/lib/Dialog"));
|
|
12
|
+
var _CircularProgress = _interopRequireDefault(require("@mui/material/CircularProgress"));
|
|
13
|
+
var _ArrowBack = _interopRequireDefault(require("@mui/icons-material/ArrowBack"));
|
|
14
|
+
var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
|
|
15
|
+
var _MenuItem = _interopRequireDefault(require("@mui/material/MenuItem"));
|
|
16
|
+
var _TextField = _interopRequireDefault(require("@mui/material/TextField"));
|
|
17
|
+
var _context = require("@arcblock/ux/lib/Locale/context");
|
|
18
|
+
var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
|
|
19
|
+
var _toast = _interopRequireDefault(require("../../toast"));
|
|
20
|
+
var _node = require("../../contexts/node");
|
|
21
|
+
var _team = require("../../contexts/team");
|
|
22
|
+
var _util = require("../../util");
|
|
23
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
24
|
+
var _templateObject;
|
|
25
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
26
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
27
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
28
|
+
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
29
|
+
function TrustedFactory(_ref) {
|
|
30
|
+
var _data$passport, _data$passport2;
|
|
31
|
+
let {
|
|
32
|
+
onCancel,
|
|
33
|
+
onSuccess,
|
|
34
|
+
data,
|
|
35
|
+
trustedFactories
|
|
36
|
+
} = _ref;
|
|
37
|
+
const {
|
|
38
|
+
api
|
|
39
|
+
} = (0, _node.useNodeContext)();
|
|
40
|
+
const {
|
|
41
|
+
roles,
|
|
42
|
+
teamDid
|
|
43
|
+
} = (0, _team.useTeamContext)();
|
|
44
|
+
const {
|
|
45
|
+
t
|
|
46
|
+
} = (0, _context.useLocaleContext)();
|
|
47
|
+
const [loading, setLoading] = (0, _react.useState)(false);
|
|
48
|
+
const [factoryAddress, setFactoryAddress] = (0, _react.useState)(data.factoryAddress || '');
|
|
49
|
+
const [remark, setRemark] = (0, _react.useState)(data.remark || '');
|
|
50
|
+
const [role, setRole] = (0, _react.useState)(((_data$passport = data.passport) === null || _data$passport === void 0 ? void 0 : _data$passport.role) || 'member');
|
|
51
|
+
// eslint-disable-next-line no-unsafe-optional-chaining
|
|
52
|
+
const [ttl, setTtl] = (0, _react.useState)((0, _ms.default)(+((_data$passport2 = data.passport) === null || _data$passport2 === void 0 ? void 0 : _data$passport2.ttl) || 0));
|
|
53
|
+
const editIndex = trustedFactories.findIndex(x => x.factoryAddress === data.factoryAddress);
|
|
54
|
+
const configTrustedFactories = async () => {
|
|
55
|
+
if (loading) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const item = {
|
|
59
|
+
factoryAddress,
|
|
60
|
+
remark,
|
|
61
|
+
passport: {
|
|
62
|
+
role,
|
|
63
|
+
ttl: (0, _ms.default)(ttl)
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
const trustedList = [...trustedFactories];
|
|
67
|
+
if (editIndex === -1) {
|
|
68
|
+
trustedList.unshift(item);
|
|
69
|
+
} else {
|
|
70
|
+
trustedList[editIndex] = item;
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
setLoading(true);
|
|
74
|
+
await api.configTrustedFactories({
|
|
75
|
+
input: {
|
|
76
|
+
teamDid,
|
|
77
|
+
trustedFactories: trustedList
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
await (0, _util.sleep)(800);
|
|
81
|
+
setLoading(false);
|
|
82
|
+
_toast.default.success(t('common.saveSuccess'));
|
|
83
|
+
onSuccess();
|
|
84
|
+
} catch (err) {
|
|
85
|
+
console.error(err);
|
|
86
|
+
setLoading(false);
|
|
87
|
+
_toast.default.error((0, _util.formatError)(err));
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dialog.default, {
|
|
91
|
+
title: t('team.passport.trustedFactories'),
|
|
92
|
+
open: true,
|
|
93
|
+
showCloseButton: false,
|
|
94
|
+
PaperProps: {
|
|
95
|
+
style: {
|
|
96
|
+
minHeight: '80vh'
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
fullWidth: true,
|
|
100
|
+
prepend: /*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {
|
|
101
|
+
onClick: onCancel,
|
|
102
|
+
"data-cy": "close-trusted-factory",
|
|
103
|
+
size: "large",
|
|
104
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ArrowBack.default, {})
|
|
105
|
+
}),
|
|
106
|
+
actions: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
107
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
|
|
108
|
+
onClick: onCancel,
|
|
109
|
+
color: "inherit",
|
|
110
|
+
children: t('common.cancel')
|
|
111
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
|
|
112
|
+
onClick: () => configTrustedFactories(),
|
|
113
|
+
color: "primary",
|
|
114
|
+
disabled: !factoryAddress || !remark || !role || loading,
|
|
115
|
+
variant: "contained",
|
|
116
|
+
autoFocus: true,
|
|
117
|
+
"data-cy": "save-trusted-factory",
|
|
118
|
+
children: [loading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_CircularProgress.default, {
|
|
119
|
+
size: 16
|
|
120
|
+
}), t('common.save')]
|
|
121
|
+
})]
|
|
122
|
+
}),
|
|
123
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Div, {
|
|
124
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
125
|
+
className: "dialog-content",
|
|
126
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
|
|
127
|
+
fullWidth: true,
|
|
128
|
+
"data-cy": "input-factory-address",
|
|
129
|
+
label: t('team.passport.factoryAddress'),
|
|
130
|
+
helperText: t('team.passport.factoryAddressTip'),
|
|
131
|
+
value: factoryAddress,
|
|
132
|
+
onChange: e => {
|
|
133
|
+
setFactoryAddress(e.target.value);
|
|
134
|
+
}
|
|
135
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
|
|
136
|
+
style: {
|
|
137
|
+
marginTop: 32
|
|
138
|
+
},
|
|
139
|
+
fullWidth: true,
|
|
140
|
+
"data-cy": "input-factory-remark",
|
|
141
|
+
label: t('common.remark'),
|
|
142
|
+
value: remark,
|
|
143
|
+
onChange: e => {
|
|
144
|
+
setRemark(e.target.value);
|
|
145
|
+
}
|
|
146
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
|
|
147
|
+
style: {
|
|
148
|
+
marginTop: 32
|
|
149
|
+
},
|
|
150
|
+
fullWidth: true,
|
|
151
|
+
"data-cy": "input-passport-role",
|
|
152
|
+
label: t('team.passport.role'),
|
|
153
|
+
select: true,
|
|
154
|
+
value: role,
|
|
155
|
+
onChange: e => {
|
|
156
|
+
setRole(e.target.value);
|
|
157
|
+
},
|
|
158
|
+
variant: "outlined",
|
|
159
|
+
children: roles.filter(d => d.name !== 'owner').map(r => /*#__PURE__*/(0, _jsxRuntime.jsx)(_MenuItem.default, {
|
|
160
|
+
value: r.name,
|
|
161
|
+
"data-cy": "passport-role-select-option-".concat(r.name),
|
|
162
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
163
|
+
children: r.title || r.name
|
|
164
|
+
})
|
|
165
|
+
}, r.name))
|
|
166
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
|
|
167
|
+
style: {
|
|
168
|
+
marginTop: 32
|
|
169
|
+
},
|
|
170
|
+
fullWidth: true,
|
|
171
|
+
type: "text",
|
|
172
|
+
"data-cy": "input-passport-ttl",
|
|
173
|
+
label: t('team.passport.ttl'),
|
|
174
|
+
helperText: t('team.passport.ttlTip'),
|
|
175
|
+
value: ttl,
|
|
176
|
+
onChange: e => {
|
|
177
|
+
setTtl(e.target.value);
|
|
178
|
+
}
|
|
179
|
+
})]
|
|
180
|
+
})
|
|
181
|
+
})
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
TrustedFactory.propTypes = {
|
|
185
|
+
onCancel: _propTypes.default.func.isRequired,
|
|
186
|
+
onSuccess: _propTypes.default.func.isRequired,
|
|
187
|
+
trustedFactories: _propTypes.default.array,
|
|
188
|
+
data: _propTypes.default.object
|
|
189
|
+
};
|
|
190
|
+
TrustedFactory.defaultProps = {
|
|
191
|
+
data: {},
|
|
192
|
+
trustedFactories: []
|
|
193
|
+
};
|
|
194
|
+
const Div = _styled.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .dialog-h1 {\n font-size: 18px;\n }\n\n .list {\n .MuiIconButton-root {\n svg {\n fill: #bfbfbf;\n }\n }\n }\n"])));
|
|
@@ -271,7 +271,7 @@ function TrustedIssuer(_ref) {
|
|
|
271
271
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_DeleteIcon.default, {})
|
|
272
272
|
})
|
|
273
273
|
})]
|
|
274
|
-
})), !mappings.length && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
|
|
274
|
+
}, "mapping-".concat(index))), !mappings.length && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
|
|
275
275
|
my: 2,
|
|
276
276
|
color: "text.secondary",
|
|
277
277
|
fontSize: "16px",
|
|
@@ -294,4 +294,4 @@ TrustedIssuer.defaultProps = {
|
|
|
294
294
|
data: {},
|
|
295
295
|
trustedPassports: []
|
|
296
296
|
};
|
|
297
|
-
const Div = _styled.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .dialog-h1 {\n font-size: 18px;\n }\n\n .
|
|
297
|
+
const Div = _styled.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .dialog-h1 {\n font-size: 18px;\n }\n\n .list {\n .MuiIconButton-root {\n svg {\n fill: #bfbfbf;\n }\n }\n }\n"])));
|