@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,256 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = PassportList;
7
+
8
+ var _react = require("react");
9
+
10
+ var _styled = _interopRequireDefault(require("@emotion/styled"));
11
+
12
+ var _Add = _interopRequireDefault(require("@mui/icons-material/Add"));
13
+
14
+ var _Box = _interopRequireDefault(require("@mui/material/Box"));
15
+
16
+ var _context = require("@arcblock/ux/lib/Locale/context");
17
+
18
+ var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
19
+
20
+ var _SplitButton = _interopRequireDefault(require("@arcblock/ux/lib/SplitButton"));
21
+
22
+ var _Spinner = _interopRequireDefault(require("@arcblock/ux/lib/Spinner"));
23
+
24
+ var _EditIcon = _interopRequireDefault(require("@arcblock/icons/lib/EditIcon"));
25
+
26
+ var _LockIcon = _interopRequireDefault(require("@arcblock/icons/lib/LockIcon"));
27
+
28
+ var _ExternalIssuerIcon = _interopRequireDefault(require("@arcblock/icons/lib/ExternalIssuerIcon"));
29
+
30
+ var _createPassportSvg = _interopRequireDefault(require("@abtnode/auth/lib/util/create-passport-svg"));
31
+
32
+ var _toast = _interopRequireDefault(require("../../toast"));
33
+
34
+ var _node = require("../../contexts/node");
35
+
36
+ var _team = require("../../contexts/team");
37
+
38
+ var _util = require("../../util");
39
+
40
+ var _permission = _interopRequireDefault(require("../../permission"));
41
+
42
+ var _searchInput = _interopRequireDefault(require("../search-input"));
43
+
44
+ var _listHeader = _interopRequireDefault(require("../styles/list-header"));
45
+
46
+ var _detail = _interopRequireDefault(require("./detail"));
47
+
48
+ var _mutateRole = _interopRequireDefault(require("./mutate-role"));
49
+
50
+ var _trustedIssuers = _interopRequireDefault(require("./trusted-issuers"));
51
+
52
+ var _jsxRuntime = require("react/jsx-runtime");
53
+
54
+ var _templateObject;
55
+
56
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
57
+
58
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
59
+
60
+ function PassportList() {
61
+ const {
62
+ t
63
+ } = (0, _react.useContext)(_context.LocaleContext);
64
+ const {
65
+ api,
66
+ info: nodeInfo,
67
+ inService
68
+ } = (0, _node.useNodeContext)();
69
+ const {
70
+ roles,
71
+ teamDid,
72
+ teamIssuerDid,
73
+ teamName,
74
+ refresh: refreshTeam,
75
+ enablePassportIssuance,
76
+ passportColor
77
+ } = (0, _team.useTeamContext)();
78
+ const [showCreate, setShowCreate] = (0, _react.useState)(false);
79
+ const [updateForm, setUpdateForm] = (0, _react.useState)(false);
80
+ const [showTrustedIssuers, setShowTrustedIssuers] = (0, _react.useState)(null);
81
+ const [search, setSearch] = (0, _react.useState)('');
82
+ const [loading, setLoading] = (0, _react.useState)(false);
83
+
84
+ const toggleShowIssue = async () => {
85
+ if (loading) {
86
+ return;
87
+ }
88
+
89
+ setLoading(true);
90
+
91
+ try {
92
+ await api.configPassportIssuance({
93
+ input: {
94
+ teamDid,
95
+ enable: !enablePassportIssuance
96
+ }
97
+ });
98
+ refreshTeam();
99
+ await (0, _util.sleep)(800);
100
+
101
+ _toast.default.success(t('common.configSuccess'));
102
+
103
+ setLoading(false);
104
+ } catch (error) {
105
+ _toast.default.error(error.message);
106
+
107
+ setLoading(false);
108
+ }
109
+ };
110
+
111
+ const filteredRoles = roles.filter(x => !search || x.title.includes(search) || x.name.includes(search));
112
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Div, {
113
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_listHeader.default, {
114
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
115
+ className: "left",
116
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_searchInput.default, {
117
+ placeholder: t('team.passport.search'),
118
+ value: search,
119
+ onChange: e => setSearch(e.target.value)
120
+ })
121
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
122
+ className: "right",
123
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_permission.default, {
124
+ permission: inService ? '' : 'mutate_team',
125
+ role: inService ? _util.BlockletAdminRoles : [],
126
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_SplitButton.default, {
127
+ variant: "outlined",
128
+ menuButtonProps: {
129
+ 'data-cy': 'trusted-issuers-more'
130
+ },
131
+ menu: /*#__PURE__*/(0, _jsxRuntime.jsx)(_SplitButton.default.Item, {
132
+ "data-cy": "config-show-issue-passport",
133
+ onClick: () => {
134
+ toggleShowIssue();
135
+ },
136
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
137
+ display: "flex",
138
+ alignItems: "center",
139
+ children: [loading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner.default, {
140
+ size: [16, 10],
141
+ style: {
142
+ marginRight: 8
143
+ }
144
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
145
+ children: [enablePassportIssuance ? t('team.passport.disableIssuance') : t('team.passport.enableIssuance'), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
146
+ fontSize: 12,
147
+ color: "#888",
148
+ children: enablePassportIssuance ? t('team.passport.disableIssuanceTip') : t('team.passport.enableIssuanceTip')
149
+ })]
150
+ })]
151
+ })
152
+ }),
153
+ children: () => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
154
+ variant: "outlined",
155
+ "data-cy": "config-trusted-issuers",
156
+ onClick: () => {
157
+ setShowTrustedIssuers(true);
158
+ },
159
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_ExternalIssuerIcon.default, {
160
+ style: {
161
+ fontSize: 16,
162
+ marginRight: 4
163
+ }
164
+ }), t('team.passport.trustedPassportIssuers')]
165
+ })
166
+ }), (inService || nodeInfo.did !== teamDid) && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
167
+ style: {
168
+ marginLeft: 16
169
+ },
170
+ variant: "contained",
171
+ edge: "end",
172
+ color: "primary",
173
+ "data-cy": "create-role",
174
+ onClick: () => setShowCreate(true),
175
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Add.default, {
176
+ style: {
177
+ fontSize: 16,
178
+ marginRight: 4
179
+ }
180
+ }), t('team.add')]
181
+ })]
182
+ })
183
+ })]
184
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
185
+ mt: 3
186
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
187
+ className: "list",
188
+ children: filteredRoles.map(role => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
189
+ "data-cy": "passport-".concat(role.name),
190
+ className: "item",
191
+ display: "flex",
192
+ alignItems: "center",
193
+ onClick: () => setUpdateForm(role),
194
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
195
+ display: "flex",
196
+ alignItems: "center",
197
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("img", {
198
+ style: {
199
+ width: 120
200
+ },
201
+ alt: "",
202
+ src: (0, _createPassportSvg.default)({
203
+ title: role.title,
204
+ issuer: teamName,
205
+ issuerDid: teamIssuerDid,
206
+ ownerName: 'Your Name',
207
+ isDataUrl: true,
208
+ preferredColor: passportColor
209
+ })
210
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
211
+ ml: 3,
212
+ className: "title",
213
+ children: role.title
214
+ })]
215
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
216
+ className: "description",
217
+ children: role.description
218
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_permission.default, {
219
+ permission: inService ? '' : 'mutate_team',
220
+ role: inService ? _util.BlockletAdminRoles : [],
221
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
222
+ className: "action",
223
+ children: (0, _util.isProtectedRole)(role.name) ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_LockIcon.default, {}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_EditIcon.default, {})
224
+ })
225
+ })]
226
+ }, role.name))
227
+ }), showCreate && /*#__PURE__*/(0, _jsxRuntime.jsx)(_mutateRole.default, {
228
+ teamDid: teamDid,
229
+ onCancel: () => setShowCreate(false),
230
+ onSuccess: () => {
231
+ setShowCreate(false);
232
+ refreshTeam();
233
+ }
234
+ }), updateForm && /*#__PURE__*/(0, _jsxRuntime.jsx)(_detail.default, {
235
+ onCancel: () => setUpdateForm(null),
236
+ onSuccess: () => {
237
+ setUpdateForm(null);
238
+ refreshTeam();
239
+ },
240
+ onDelete: () => {
241
+ setUpdateForm(null);
242
+ refreshTeam();
243
+ },
244
+ mode: "update",
245
+ roleName: updateForm.name,
246
+ item: updateForm
247
+ }), showTrustedIssuers && /*#__PURE__*/(0, _jsxRuntime.jsx)(_trustedIssuers.default, {
248
+ onCancel: () => setShowTrustedIssuers(false)
249
+ })]
250
+ });
251
+ }
252
+
253
+ const Div = _styled.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .list {\n .item {\n padding: 12px;\n margin: 12px -12px;\n cursor: pointer;\n transition: box-shadow 0.4s;\n &:hover {\n box-shadow: 0 0 10px 4px rgba(0, 0, 0, 0.1);\n }\n }\n\n .title {\n font-weight: 400;\n font-size: 18px;\n width: 80px;\n line-height: 21px;\n color: #222222;\n }\n\n .description {\n flex: 1;\n margin-left: 64px;\n color: #999999;\n }\n\n .action {\n color: #bfbfbf;\n fill: #bfbfbf;\n }\n }\n"])));
254
+
255
+ PassportList.propTypes = {};
256
+ PassportList.defaultProps = {};
@@ -0,0 +1,230 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = MutateRole;
7
+
8
+ var _react = require("react");
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _md = _interopRequireDefault(require("md5"));
13
+
14
+ var _Dialog = _interopRequireDefault(require("@arcblock/ux/lib/Dialog"));
15
+
16
+ var _Spinner = _interopRequireDefault(require("@arcblock/ux/lib/Spinner"));
17
+
18
+ var _DialogContentText = _interopRequireDefault(require("@mui/material/DialogContentText"));
19
+
20
+ var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
21
+
22
+ var _TextField = _interopRequireDefault(require("@mui/material/TextField"));
23
+
24
+ var _context = require("@arcblock/ux/lib/Locale/context");
25
+
26
+ var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
27
+
28
+ var _Alert = _interopRequireDefault(require("@arcblock/ux/lib/Alert"));
29
+
30
+ var _node = require("../../contexts/node");
31
+
32
+ var _util = require("../../util");
33
+
34
+ var _jsxRuntime = require("react/jsx-runtime");
35
+
36
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
+
38
+ function MutateRole(_ref) {
39
+ let {
40
+ teamDid,
41
+ onCancel,
42
+ onSuccess,
43
+ onError,
44
+ mode,
45
+ item
46
+ } = _ref;
47
+ const {
48
+ api
49
+ } = (0, _node.useNodeContext)();
50
+ const [loading, setLoading] = (0, _react.useState)(false);
51
+ const [error, setError] = (0, _react.useState)('');
52
+ const {
53
+ t
54
+ } = (0, _context.useLocaleContext)();
55
+ const [title, setTitle] = (0, _react.useState)(item.title || '');
56
+ const [description, setDescription] = (0, _react.useState)(item.description || '');
57
+
58
+ const onCreate = async () => {
59
+ const _title = title.trim();
60
+
61
+ if (!_title) {
62
+ setError(t('team.passport.error.titleEmpty'));
63
+ return;
64
+ }
65
+
66
+ if (_title.length > 64) {
67
+ setError(t('team.passport.error.titleTooLong', {
68
+ length: 64
69
+ }));
70
+ return;
71
+ }
72
+
73
+ const desc = description.replace(/\n/g, ' ');
74
+
75
+ if (!desc) {
76
+ setError(t('team.passport.error.descriptionEmpty'));
77
+ return;
78
+ }
79
+
80
+ const name = mode === 'create' ? (0, _md.default)(_title) : item.name;
81
+ setError(null);
82
+ setLoading(true);
83
+
84
+ try {
85
+ if (mode === 'create') {
86
+ await api.createRole({
87
+ input: {
88
+ teamDid,
89
+ name,
90
+ title: _title,
91
+ description: desc
92
+ }
93
+ });
94
+ } else {
95
+ await api.updateRole({
96
+ input: {
97
+ teamDid,
98
+ role: {
99
+ name,
100
+ title: _title,
101
+ description: desc
102
+ }
103
+ }
104
+ });
105
+ }
106
+
107
+ onSuccess();
108
+ } catch (err) {
109
+ const errMsg = (0, _util.formatError)(err);
110
+ setError(errMsg);
111
+ onError(err);
112
+ } finally {
113
+ setLoading(false);
114
+ }
115
+ };
116
+
117
+ const body = /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
118
+ children: [mode === 'update' && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
119
+ component: "div",
120
+ style: {
121
+ paddingTop: 24
122
+ },
123
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
124
+ label: "ID",
125
+ autoComplete: "off",
126
+ variant: "outlined",
127
+ name: "url",
128
+ "data-cy": "mutate-role-input-name",
129
+ fullWidth: true,
130
+ autoFocus: true,
131
+ value: item.name,
132
+ disabled: true
133
+ })
134
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
135
+ component: "div",
136
+ style: {
137
+ marginTop: 24
138
+ },
139
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
140
+ label: t('common.title'),
141
+ autoComplete: "off",
142
+ variant: "outlined",
143
+ name: "title",
144
+ "data-cy": "mutate-role-input-title",
145
+ fullWidth: true,
146
+ autoFocus: true,
147
+ value: title,
148
+ onChange: e => {
149
+ setError(null);
150
+ setTitle(e.target.value);
151
+ },
152
+ disabled: mode === 'update' || loading,
153
+ helperText: t('team.passport.create.titleTip')
154
+ })
155
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
156
+ component: "div",
157
+ style: {
158
+ marginTop: 24,
159
+ marginBottom: 24
160
+ },
161
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
162
+ label: t('common.description'),
163
+ autoComplete: "off",
164
+ variant: "outlined",
165
+ name: "description",
166
+ "data-cy": "mutate-role-input-description",
167
+ fullWidth: true,
168
+ autoFocus: true,
169
+ value: description,
170
+ onChange: e => {
171
+ setError(null);
172
+ setDescription(e.target.value);
173
+ },
174
+ disabled: loading,
175
+ multiline: true,
176
+ rows: 3
177
+ })
178
+ })]
179
+ });
180
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Dialog.default, {
181
+ title: mode === 'create' ? t('team.passport.create.title') : '',
182
+ fullWidth: true,
183
+ open: true,
184
+ onClose: onCancel,
185
+ showCloseButton: false,
186
+ actions: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
187
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
188
+ onClick: onCancel,
189
+ color: "inherit",
190
+ children: t('common.cancel')
191
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
192
+ "data-cy": "mutate-role-confirm",
193
+ onClick: onCreate,
194
+ color: "primary",
195
+ disabled: loading,
196
+ variant: "contained",
197
+ autoFocus: true,
198
+ children: [loading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner.default, {
199
+ size: [16, 10]
200
+ }), mode === 'create' ? t('common.create') : t('common.update')]
201
+ })]
202
+ }),
203
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_DialogContentText.default, {
204
+ component: "div",
205
+ children: body
206
+ }), !!error && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Alert.default, {
207
+ type: "error",
208
+ variant: "icon",
209
+ style: {
210
+ width: '100%',
211
+ margin: 0
212
+ },
213
+ children: error
214
+ })]
215
+ });
216
+ }
217
+
218
+ MutateRole.propTypes = {
219
+ teamDid: _propTypes.default.string.isRequired,
220
+ onCancel: _propTypes.default.func.isRequired,
221
+ onSuccess: _propTypes.default.func.isRequired,
222
+ onError: _propTypes.default.func,
223
+ mode: _propTypes.default.oneOf(['create', 'update']),
224
+ item: _propTypes.default.object
225
+ };
226
+ MutateRole.defaultProps = {
227
+ onError: () => {},
228
+ mode: 'create',
229
+ item: {}
230
+ };