@abtnode/ux 1.8.26 → 1.8.27

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.
Files changed (62) hide show
  1. package/lib/actions.js +137 -0
  2. package/lib/blocklet/actions.js +501 -0
  3. package/lib/blocklet/audit-logs.js +226 -0
  4. package/lib/blocklet/avatar.js +123 -0
  5. package/lib/blocklet/blocklet-source.js +69 -0
  6. package/lib/blocklet/component/configuration.js +150 -0
  7. package/lib/blocklet/component/delete.js +138 -0
  8. package/lib/blocklet/component/environment.js +334 -0
  9. package/lib/blocklet/component/index.js +837 -0
  10. package/lib/blocklet/component/setting.js +174 -0
  11. package/lib/blocklet/configuration.js +531 -0
  12. package/lib/blocklet/disk-info.js +115 -0
  13. package/lib/blocklet/icons.js +36 -0
  14. package/lib/blocklet/log.js +70 -0
  15. package/lib/blocklet/mode.js +47 -0
  16. package/lib/blocklet/overview.js +218 -0
  17. package/lib/blocklet/runtime-info.js +111 -0
  18. package/lib/blocklet/status.js +125 -0
  19. package/lib/blocklet/util.js +141 -0
  20. package/lib/blocklet/version.js +216 -0
  21. package/lib/click-to-copy.js +51 -0
  22. package/lib/confirm.js +175 -0
  23. package/lib/contexts/audit-log.js +155 -0
  24. package/lib/contexts/deleting-blocklets.js +91 -0
  25. package/lib/contexts/node.js +34 -0
  26. package/lib/contexts/session.js +22 -0
  27. package/lib/contexts/team.js +22 -0
  28. package/lib/did-address.js +95 -0
  29. package/lib/dot.js +25 -0
  30. package/lib/hooks/mobile-width.js +24 -0
  31. package/lib/icons/long-arrow.svg +5 -0
  32. package/lib/locales/en.js +1046 -38
  33. package/lib/locales/zh.js +1049 -36
  34. package/lib/logs/clock.js +25 -0
  35. package/lib/logs/log-terminal.js +198 -0
  36. package/lib/passport-tag.js +58 -0
  37. package/lib/permission.js +84 -0
  38. package/lib/relative-time.js +74 -0
  39. package/lib/table-icons.js +59 -0
  40. package/lib/table.js +19 -0
  41. package/lib/tag.js +48 -0
  42. package/lib/team/members/actions.js +115 -0
  43. package/lib/team/members/index.js +544 -0
  44. package/lib/team/members/invitations.js +229 -0
  45. package/lib/team/members/invite-member.js +241 -0
  46. package/lib/team/members/issue-passport.js +178 -0
  47. package/lib/team/members/member.js +336 -0
  48. package/lib/team/members/passport-issuances.js +181 -0
  49. package/lib/team/members/passports.js +377 -0
  50. package/lib/team/members/toggle-user-approval.js +154 -0
  51. package/lib/team/members/transfer-node.js +295 -0
  52. package/lib/team/members/util.js +27 -0
  53. package/lib/team/passports/detail.js +304 -0
  54. package/lib/team/passports/index.js +256 -0
  55. package/lib/team/passports/mutate-role.js +230 -0
  56. package/lib/team/passports/trusted-issuer.js +339 -0
  57. package/lib/team/passports/trusted-issuers.js +284 -0
  58. package/lib/team/search-input.js +51 -0
  59. package/lib/team/styles/dialog.js +19 -0
  60. package/lib/team/styles/list-header.js +19 -0
  61. package/lib/util/index.js +642 -6
  62. package/package.json +32 -9
@@ -0,0 +1,336 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = Member;
7
+
8
+ var _react = require("react");
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _styled = _interopRequireDefault(require("@emotion/styled"));
13
+
14
+ var _notistack = require("notistack");
15
+
16
+ var _Dialog = _interopRequireDefault(require("@arcblock/ux/lib/Dialog"));
17
+
18
+ var _Spinner = _interopRequireDefault(require("@arcblock/ux/lib/Spinner"));
19
+
20
+ var _Box = _interopRequireDefault(require("@mui/material/Box"));
21
+
22
+ var _Avatar = _interopRequireDefault(require("@mui/material/Avatar"));
23
+
24
+ var _Tabs = _interopRequireDefault(require("@arcblock/ux/lib/Tabs"));
25
+
26
+ var _InfoRow = _interopRequireDefault(require("@arcblock/ux/lib/InfoRow"));
27
+
28
+ var _context = require("@arcblock/ux/lib/Locale/context");
29
+
30
+ var _Address = _interopRequireDefault(require("@arcblock/did-connect/lib/Address"));
31
+
32
+ var _ForbidLoginIcon = _interopRequireDefault(require("@arcblock/icons/lib/ForbidLoginIcon"));
33
+
34
+ var _AllowLoginIcon = _interopRequireDefault(require("@arcblock/icons/lib/AllowLoginIcon"));
35
+
36
+ var _constant = require("@abtnode/constant");
37
+
38
+ var _permission = _interopRequireDefault(require("../../permission"));
39
+
40
+ var _node = require("../../contexts/node");
41
+
42
+ var _team = require("../../contexts/team");
43
+
44
+ var _util = require("../../util");
45
+
46
+ var _passportIssuances = _interopRequireDefault(require("./passport-issuances"));
47
+
48
+ var _passports = _interopRequireDefault(require("./passports"));
49
+
50
+ var _toggleUserApproval = _interopRequireDefault(require("./toggle-user-approval"));
51
+
52
+ var _util2 = require("./util");
53
+
54
+ var _jsxRuntime = require("react/jsx-runtime");
55
+
56
+ var _templateObject, _templateObject2, _templateObject3;
57
+
58
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
59
+
60
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
61
+
62
+ function Member(_ref) {
63
+ let {
64
+ userDid,
65
+ onCancel,
66
+ initTab
67
+ } = _ref;
68
+ const {
69
+ api,
70
+ ws: {
71
+ useSubscription
72
+ },
73
+ inService
74
+ } = (0, _node.useNodeContext)();
75
+ const {
76
+ roles,
77
+ teamDid,
78
+ enablePassportIssuance
79
+ } = (0, _team.useTeamContext)();
80
+ const {
81
+ t
82
+ } = (0, _context.useLocaleContext)();
83
+ const [issuances, setIssuances] = (0, _react.useState)(null);
84
+ const [user, setUser] = (0, _react.useState)(null);
85
+ const {
86
+ enqueueSnackbar
87
+ } = (0, _notistack.useSnackbar)();
88
+ const [tab, setTab] = (0, _react.useState)(initTab || 'info');
89
+
90
+ const getData = async () => {
91
+ try {
92
+ const res = await api.doBatchQuery({
93
+ getUser: {
94
+ input: {
95
+ teamDid,
96
+ user: {
97
+ did: userDid
98
+ }
99
+ }
100
+ },
101
+ getPassportIssuances: {
102
+ input: {
103
+ teamDid,
104
+ ownerDid: userDid
105
+ }
106
+ }
107
+ });
108
+
109
+ if (res.getUser.user) {
110
+ res.getUser.user.avatar = (0, _util2.parseAvatar)(res.getUser.user.avatar, teamDid, inService);
111
+ }
112
+
113
+ setUser(res.getUser.user || {});
114
+ setIssuances(res.getPassportIssuances.list || []);
115
+ } catch (err) {
116
+ enqueueSnackbar((0, _util.formatError)(err), {
117
+ autoHideDuration: 5000,
118
+ variant: 'error'
119
+ });
120
+ }
121
+ };
122
+
123
+ (0, _react.useEffect)(() => {
124
+ if (teamDid) {
125
+ getData();
126
+ }
127
+ }, [userDid, teamDid]); // eslint-disable-line
128
+
129
+ const onUserEvent = data => {
130
+ if (data.teamDid === teamDid && data.user && data.user.did === userDid) {
131
+ getData();
132
+ }
133
+ };
134
+
135
+ useSubscription(_constant.EVENTS.USER_UPDATED, onUserEvent, [userDid, teamDid]);
136
+ (0, _react.useEffect)(() => {
137
+ if (issuances && !issuances.length && tab === 'issuances') {
138
+ setTab('info');
139
+ }
140
+ }, [issuances]); // eslint-disable-line
141
+ // tab
142
+
143
+ const Info = () => {
144
+ const rows = user ? [{
145
+ name: t('team.member.name'),
146
+ value: user.fullName
147
+ }, {
148
+ name: t('common.email'),
149
+ value: user.email
150
+ }, {
151
+ name: t('team.member.allowLogin'),
152
+ value: user.approved ? t('common.yes') : t('common.no')
153
+ }, {
154
+ name: t('team.member.lastLogin'),
155
+ value: (0, _util.formatToDatetime)(user.updatedAt)
156
+ }, {
157
+ name: t('common.createdAt'),
158
+ value: (0, _util.formatToDatetime)(user.createdAt)
159
+ }, {
160
+ name: t('common.remark'),
161
+ value: user.remark || '--'
162
+ }].filter(Boolean) : [];
163
+ return rows.map(row => {
164
+ if (row.name === t('common.did')) {
165
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_InfoRow.default, {
166
+ valueComponent: "div",
167
+ nameWidth: 120,
168
+ name: row.name,
169
+ nameFormatter: () => t('common.did'),
170
+ children: row.value
171
+ }, row.name);
172
+ }
173
+
174
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_InfoRow.default, {
175
+ style: {
176
+ alignItems: 'flex-start'
177
+ },
178
+ valueComponent: "div",
179
+ nameWidth: 120,
180
+ name: row.name,
181
+ children: row.value
182
+ }, row.name);
183
+ });
184
+ };
185
+
186
+ const tabConfigs = {
187
+ info: {
188
+ label: t('common.basicInfo'),
189
+ value: 'info',
190
+ component: Info
191
+ },
192
+ passports: {
193
+ label: t('common.passport'),
194
+ value: 'passports',
195
+ component: () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_passports.default, {
196
+ user: user,
197
+ teamDid: teamDid,
198
+ roles: roles,
199
+ onCreate: () => {
200
+ getData(teamDid);
201
+ setTab('issuances');
202
+ },
203
+ onRefresh: () => {
204
+ getData(teamDid);
205
+ }
206
+ })
207
+ },
208
+ issuances: {
209
+ label: t('team.passport.issuance.pending'),
210
+ value: 'issuances',
211
+ component: () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_passportIssuances.default, {
212
+ issuances: issuances || [],
213
+ teamDid: teamDid,
214
+ onRefresh: () => getData(teamDid)
215
+ })
216
+ }
217
+ };
218
+ const tabs = Object.values(tabConfigs).map(_ref2 => {
219
+ let {
220
+ label,
221
+ value
222
+ } = _ref2;
223
+ return {
224
+ label,
225
+ value
226
+ };
227
+ }).filter(x => {
228
+ if (x.value === 'issuances') {
229
+ return enablePassportIssuance && issuances && !!issuances.length;
230
+ }
231
+
232
+ return true;
233
+ });
234
+ const tabConfig = tabConfigs[tab] || tabConfigs.info;
235
+
236
+ const onTabChange = newTab => {
237
+ setTab(newTab);
238
+ };
239
+
240
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dialog.default, {
241
+ title: t('common.member'),
242
+ onClose: onCancel,
243
+ open: true,
244
+ PaperProps: {
245
+ style: {
246
+ maxWidth: 632,
247
+ minHeight: '80vh'
248
+ }
249
+ },
250
+ fullWidth: true,
251
+ actions: user && /*#__PURE__*/(0, _jsxRuntime.jsx)(_permission.default, {
252
+ permission: inService ? '' : 'mutate_team',
253
+ role: inService ? _util.BlockletAdminRoles : [],
254
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_toggleUserApproval.default, {
255
+ user: user,
256
+ children: _ref3 => {
257
+ let {
258
+ open
259
+ } = _ref3;
260
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(BlockButton, {
261
+ onClick: open,
262
+ children: [user.approved ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_ForbidLoginIcon.default, {
263
+ style: {
264
+ fontSize: '1.2em',
265
+ marginRight: '0.4em'
266
+ }
267
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_AllowLoginIcon.default, {
268
+ style: {
269
+ fontSize: '1.2em',
270
+ marginRight: '0.4em'
271
+ }
272
+ }), user.approved ? t('team.member.forbidLogin') : t('team.member.allowLogin')]
273
+ });
274
+ }
275
+ })
276
+ }),
277
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(Div, {
278
+ children: [!user && /*#__PURE__*/(0, _jsxRuntime.jsx)(Center, {
279
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner.default, {})
280
+ }), user && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
281
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
282
+ display: "flex",
283
+ alignItems: "center",
284
+ className: "info",
285
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Avatar.default, {
286
+ src: user.avatar,
287
+ style: {
288
+ width: 48,
289
+ height: 48,
290
+ backgroundColor: 'transparent',
291
+ marginRight: 16
292
+ }
293
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
294
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
295
+ className: "name",
296
+ children: user.fullName
297
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
298
+ className: "did",
299
+ mt: 1,
300
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Address.default, {
301
+ children: user.did
302
+ })
303
+ })]
304
+ })]
305
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
306
+ mx: 3,
307
+ className: "tabs",
308
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tabs.default, {
309
+ tabs: tabs,
310
+ current: tab,
311
+ onChange: onTabChange,
312
+ scrollButtons: "auto"
313
+ })
314
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
315
+ className: "body",
316
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(tabConfig.component, {})
317
+ })]
318
+ })]
319
+ })
320
+ });
321
+ }
322
+
323
+ Member.propTypes = {
324
+ userDid: _propTypes.default.string.isRequired,
325
+ onCancel: _propTypes.default.func.isRequired,
326
+ initTab: _propTypes.default.string
327
+ };
328
+ Member.defaultProps = {
329
+ initTab: 'info'
330
+ };
331
+
332
+ const Div = _styled.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .info {\n .name {\n font-weight: 400;\n font-size: 18px;\n line-height: 25px;\n color: #222222;\n }\n }\n\n .tabs {\n margin-top: 24px;\n margin-left: 0;\n margin-right: 0;\n }\n\n .body {\n margin-top: 24px;\n }\n"])));
333
+
334
+ const Center = _styled.default.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n flex: 1;\n display: flex;\n justify-content: center;\n align-items: center;\n height: 200px;\n"])));
335
+
336
+ const BlockButton = _styled.default.div(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n flex-shrink: 0;\n width: 100%;\n height: 64px;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n color: #999;\n fill: #999;\n font-size: 16px;\n border-top: 1px solid #f0f0f0;\n position: sticky;\n bottom: 0;\n background: #fff;\n z-index: 10;\n"])));
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = PassportIssuances;
7
+
8
+ var _react = require("react");
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _styled = _interopRequireDefault(require("@emotion/styled"));
13
+
14
+ var _notistack = require("notistack");
15
+
16
+ var _Box = _interopRequireDefault(require("@mui/material/Box"));
17
+
18
+ var _context = require("@arcblock/ux/lib/Locale/context");
19
+
20
+ var _node = require("../../contexts/node");
21
+
22
+ var _team = require("../../contexts/team");
23
+
24
+ var _confirm = _interopRequireDefault(require("../../confirm"));
25
+
26
+ var _permission = _interopRequireDefault(require("../../permission"));
27
+
28
+ var _clickToCopy = _interopRequireDefault(require("../../click-to-copy"));
29
+
30
+ var _passportTag = _interopRequireDefault(require("../../passport-tag"));
31
+
32
+ var _util = require("../../util");
33
+
34
+ var _jsxRuntime = require("react/jsx-runtime");
35
+
36
+ var _templateObject;
37
+
38
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
39
+
40
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
41
+
42
+ function PassportIssuances(_ref) {
43
+ let {
44
+ issuances,
45
+ teamDid,
46
+ onRefresh
47
+ } = _ref;
48
+ const {
49
+ api: client,
50
+ inService
51
+ } = (0, _node.useNodeContext)();
52
+ const {
53
+ t
54
+ } = (0, _react.useContext)(_context.LocaleContext);
55
+ const [delConfirm, setDelConfirm] = (0, _react.useState)(null);
56
+ const [loading, setLoading] = (0, _react.useState)(false);
57
+ const {
58
+ enqueueSnackbar
59
+ } = (0, _notistack.useSnackbar)();
60
+ const {
61
+ endpoint
62
+ } = (0, _team.useTeamContext)();
63
+
64
+ const deleteIssuance = async _ref2 => {
65
+ let {
66
+ id
67
+ } = _ref2;
68
+
69
+ if (loading) {
70
+ return;
71
+ }
72
+
73
+ setLoading(true);
74
+
75
+ try {
76
+ await client.deletePassportIssuance({
77
+ input: {
78
+ teamDid,
79
+ sessionId: id
80
+ }
81
+ });
82
+ onRefresh();
83
+ } catch (error) {
84
+ enqueueSnackbar(error.message, {
85
+ autoHideDuration: 5000,
86
+ variant: 'error'
87
+ });
88
+ } finally {
89
+ setLoading(false);
90
+ setDelConfirm(null);
91
+ }
92
+ };
93
+
94
+ const onCancel = () => {
95
+ setLoading(false);
96
+ setDelConfirm(null);
97
+ };
98
+
99
+ const getLink = column => endpoint ? (0, _util.getIssuePassportLink)({
100
+ id: column.id,
101
+ endpoint
102
+ }) : ''; // eslint-disable-next-line react/prop-types
103
+ // eslint-disable-next-line react/no-unstable-nested-components
104
+
105
+
106
+ function Issuance(_ref3) {
107
+ let {
108
+ data: d
109
+ } = _ref3;
110
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
111
+ className: "issuance",
112
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
113
+ display: "flex",
114
+ justifyContent: "space-between",
115
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_permission.default, {
116
+ permission: inService ? '' : 'mutate_team',
117
+ role: inService ? _util.BlockletAdminRoles : [],
118
+ children: can => can ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_passportTag.default, {
119
+ passport: {
120
+ title: d.title,
121
+ name: d.name
122
+ },
123
+ onDelete: () => setDelConfirm({
124
+ title: t('team.passport.issuance.delete.title'),
125
+ description: t('team.passport.issuance.delete.description', {
126
+ link: getLink(d)
127
+ }),
128
+ confirm: t('common.delConfirm'),
129
+ cancel: t('common.cancel'),
130
+ onConfirm: () => {
131
+ deleteIssuance(d);
132
+ },
133
+ onCancel
134
+ })
135
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_passportTag.default, {
136
+ passport: {
137
+ title: d.title,
138
+ name: d.name
139
+ }
140
+ })
141
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
142
+ style: {
143
+ color: '#999'
144
+ },
145
+ children: [t('common.expires'), ":\xA0", (0, _util.formatToDatetime)(d.expireDate)]
146
+ })]
147
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
148
+ mt: 2,
149
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_clickToCopy.default, {
150
+ children: getLink(d)
151
+ })
152
+ })]
153
+ });
154
+ }
155
+
156
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Div, {
157
+ children: [issuances.map(x => /*#__PURE__*/(0, _jsxRuntime.jsx)(Issuance, {
158
+ data: x
159
+ })), delConfirm && /*#__PURE__*/(0, _jsxRuntime.jsx)(_confirm.default, {
160
+ title: delConfirm.title,
161
+ description: delConfirm.description,
162
+ confirm: delConfirm.confirm,
163
+ cancel: delConfirm.cancel,
164
+ params: delConfirm.params,
165
+ onConfirm: delConfirm.onConfirm,
166
+ onCancel: delConfirm.onCancel
167
+ })]
168
+ });
169
+ }
170
+
171
+ const Div = _styled.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .MuiTableHead-root {\n display: none;\n }\n .issuance {\n padding: 16px 0;\n border-bottom: 1px solid #f0f0f0;\n .MuiTypography-root {\n display: inline-block;\n width: 100%;\n background: #f3f3f3;\n border-radius: 4px;\n padding-top: 6px;\n padding-bottom: 6px;\n }\n }\n"])));
172
+
173
+ PassportIssuances.propTypes = {
174
+ teamDid: _propTypes.default.string.isRequired,
175
+ issuances: _propTypes.default.array,
176
+ onRefresh: _propTypes.default.func
177
+ };
178
+ PassportIssuances.defaultProps = {
179
+ issuances: [],
180
+ onRefresh: () => {}
181
+ };