@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/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 只会展示一次,关闭次窗口后将无法再次查看,不过你可以随时重新创建新的 Access Key',
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)(null);
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.jsx)(_Box.default, {
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(null),
229
+ onCancel: () => setUpdateForm(false),
212
230
  onSuccess: () => {
213
- setUpdateForm(null);
231
+ setUpdateForm(false);
214
232
  refreshTeam();
215
233
  },
216
234
  onDelete: () => {
217
- setUpdateForm(null);
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(null),
227
- onSuccess: () => setShowColor(null)
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 .MuiOutlinedInput-root {\n border-radius: 36px;\n .MuiSelect-root.MuiOutlinedInput-input {\n padding-top: 8.5px;\n padding-bottom: 8.5px;\n }\n }\n\n .list {\n .MuiIconButton-root {\n svg {\n fill: #bfbfbf;\n }\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"])));