@abtnode/ux 1.8.26 → 1.8.28

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 (88) hide show
  1. package/lib/actions.js +109 -0
  2. package/lib/blocklet/actions.js +437 -0
  3. package/lib/blocklet/audit-logs.js +194 -0
  4. package/lib/blocklet/avatar.js +96 -0
  5. package/lib/blocklet/blocklet-source.js +56 -0
  6. package/lib/blocklet/component/configuration.js +124 -0
  7. package/lib/blocklet/component/delete.js +115 -0
  8. package/lib/blocklet/component/environment.js +277 -0
  9. package/lib/blocklet/component/index.js +742 -0
  10. package/lib/blocklet/component/setting.js +135 -0
  11. package/lib/blocklet/configuration.js +463 -0
  12. package/lib/blocklet/disk-info.js +89 -0
  13. package/lib/blocklet/icons.js +26 -0
  14. package/lib/blocklet/log.js +55 -0
  15. package/lib/blocklet/mode.js +33 -0
  16. package/lib/blocklet/overview.js +184 -0
  17. package/lib/blocklet/runtime-info.js +85 -0
  18. package/lib/blocklet/status.js +103 -0
  19. package/lib/blocklet/util.js +119 -0
  20. package/lib/blocklet/version.js +178 -0
  21. package/lib/card-selector.js +9 -22
  22. package/lib/click-to-copy.js +36 -0
  23. package/lib/confirm.js +149 -0
  24. package/lib/contexts/audit-log.js +141 -0
  25. package/lib/contexts/deleting-blocklets.js +78 -0
  26. package/lib/contexts/node.js +28 -0
  27. package/lib/contexts/session.js +20 -0
  28. package/lib/contexts/team.js +19 -0
  29. package/lib/did-address.js +75 -0
  30. package/lib/dot.js +18 -0
  31. package/lib/form/form-text-input.js +12 -38
  32. package/lib/form/form-wrapper.js +0 -7
  33. package/lib/form/required.js +0 -6
  34. package/lib/hooks/mobile-width.js +19 -0
  35. package/lib/hooks/use-passport-id.js +0 -5
  36. package/lib/icons/long-arrow.svg +5 -0
  37. package/lib/index.js +0 -3
  38. package/lib/invitation/invitation-app.js +3 -21
  39. package/lib/invitation/invitation-passport.js +2 -16
  40. package/lib/invitation/invitation-receive.js +2 -19
  41. package/lib/invitation/invitation-user.js +0 -16
  42. package/lib/invitation/invitation.js +0 -23
  43. package/lib/issue-passport.js +2 -31
  44. package/lib/launch-blocklet/content-layout.js +3 -19
  45. package/lib/launch-blocklet/page-header.js +0 -9
  46. package/lib/layout/addon.js +0 -24
  47. package/lib/locales/en.js +1046 -38
  48. package/lib/locales/index.js +0 -3
  49. package/lib/locales/zh.js +1049 -36
  50. package/lib/logs/clock.js +19 -0
  51. package/lib/logs/log-terminal.js +172 -0
  52. package/lib/lost-passport.js +6 -51
  53. package/lib/nav-logo.js +12 -33
  54. package/lib/passport-tag.js +41 -0
  55. package/lib/permission.js +68 -0
  56. package/lib/relative-time.js +61 -0
  57. package/lib/schema-form/color-input.js +2 -15
  58. package/lib/schema-form/common-prop-types.js +0 -3
  59. package/lib/schema-form/index.js +8 -45
  60. package/lib/schema-form/passport-input.js +6 -24
  61. package/lib/schema-form/text-input.js +9 -26
  62. package/lib/table-icons.js +42 -0
  63. package/lib/table.js +13 -0
  64. package/lib/tag.js +35 -0
  65. package/lib/team/members/actions.js +99 -0
  66. package/lib/team/members/index.js +476 -0
  67. package/lib/team/members/invitations.js +196 -0
  68. package/lib/team/members/invite-member.js +212 -0
  69. package/lib/team/members/issue-passport.js +155 -0
  70. package/lib/team/members/member.js +294 -0
  71. package/lib/team/members/passport-issuances.js +154 -0
  72. package/lib/team/members/passports.js +329 -0
  73. package/lib/team/members/toggle-user-approval.js +128 -0
  74. package/lib/team/members/transfer-node.js +262 -0
  75. package/lib/team/members/util.js +20 -0
  76. package/lib/team/passports/detail.js +261 -0
  77. package/lib/team/passports/index.js +220 -0
  78. package/lib/team/passports/mutate-role.js +204 -0
  79. package/lib/team/passports/trusted-issuer.js +295 -0
  80. package/lib/team/passports/trusted-issuers.js +238 -0
  81. package/lib/team/search-input.js +36 -0
  82. package/lib/team/styles/dialog.js +13 -0
  83. package/lib/team/styles/list-header.js +13 -0
  84. package/lib/toast.js +4 -19
  85. package/lib/util/index.js +504 -38
  86. package/lib/who-can-access/config.js +0 -6
  87. package/lib/wrap-locale.js +0 -7
  88. package/package.json +43 -20
@@ -0,0 +1,220 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = PassportList;
7
+ var _react = require("react");
8
+ var _styled = _interopRequireDefault(require("@emotion/styled"));
9
+ var _Add = _interopRequireDefault(require("@mui/icons-material/Add"));
10
+ var _Box = _interopRequireDefault(require("@mui/material/Box"));
11
+ var _context = require("@arcblock/ux/lib/Locale/context");
12
+ var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
13
+ var _SplitButton = _interopRequireDefault(require("@arcblock/ux/lib/SplitButton"));
14
+ var _Spinner = _interopRequireDefault(require("@arcblock/ux/lib/Spinner"));
15
+ var _EditIcon = _interopRequireDefault(require("@arcblock/icons/lib/EditIcon"));
16
+ var _LockIcon = _interopRequireDefault(require("@arcblock/icons/lib/LockIcon"));
17
+ var _ExternalIssuerIcon = _interopRequireDefault(require("@arcblock/icons/lib/ExternalIssuerIcon"));
18
+ var _createPassportSvg = _interopRequireDefault(require("@abtnode/auth/lib/util/create-passport-svg"));
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 _permission = _interopRequireDefault(require("../../permission"));
24
+ var _searchInput = _interopRequireDefault(require("../search-input"));
25
+ var _listHeader = _interopRequireDefault(require("../styles/list-header"));
26
+ var _detail = _interopRequireDefault(require("./detail"));
27
+ var _mutateRole = _interopRequireDefault(require("./mutate-role"));
28
+ var _trustedIssuers = _interopRequireDefault(require("./trusted-issuers"));
29
+ var _jsxRuntime = require("react/jsx-runtime");
30
+ var _templateObject;
31
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
32
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
33
+ function PassportList() {
34
+ const {
35
+ t
36
+ } = (0, _react.useContext)(_context.LocaleContext);
37
+ const {
38
+ api,
39
+ info: nodeInfo,
40
+ inService
41
+ } = (0, _node.useNodeContext)();
42
+ const {
43
+ roles,
44
+ teamDid,
45
+ teamIssuerDid,
46
+ teamName,
47
+ refresh: refreshTeam,
48
+ enablePassportIssuance,
49
+ passportColor
50
+ } = (0, _team.useTeamContext)();
51
+ const [showCreate, setShowCreate] = (0, _react.useState)(false);
52
+ const [updateForm, setUpdateForm] = (0, _react.useState)(false);
53
+ const [showTrustedIssuers, setShowTrustedIssuers] = (0, _react.useState)(null);
54
+ const [search, setSearch] = (0, _react.useState)('');
55
+ const [loading, setLoading] = (0, _react.useState)(false);
56
+ const toggleShowIssue = async () => {
57
+ if (loading) {
58
+ return;
59
+ }
60
+ setLoading(true);
61
+ try {
62
+ await api.configPassportIssuance({
63
+ input: {
64
+ teamDid,
65
+ enable: !enablePassportIssuance
66
+ }
67
+ });
68
+ refreshTeam();
69
+ await (0, _util.sleep)(800);
70
+ _toast.default.success(t('common.configSuccess'));
71
+ setLoading(false);
72
+ } catch (error) {
73
+ _toast.default.error(error.message);
74
+ setLoading(false);
75
+ }
76
+ };
77
+ const filteredRoles = roles.filter(x => !search || x.title.includes(search) || x.name.includes(search));
78
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Div, {
79
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_listHeader.default, {
80
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
81
+ className: "left",
82
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_searchInput.default, {
83
+ placeholder: t('team.passport.search'),
84
+ value: search,
85
+ onChange: e => setSearch(e.target.value)
86
+ })
87
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
88
+ className: "right",
89
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_permission.default, {
90
+ permission: inService ? '' : 'mutate_team',
91
+ role: inService ? _util.BlockletAdminRoles : [],
92
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_SplitButton.default, {
93
+ variant: "outlined",
94
+ menuButtonProps: {
95
+ 'data-cy': 'trusted-issuers-more'
96
+ },
97
+ menu: /*#__PURE__*/(0, _jsxRuntime.jsx)(_SplitButton.default.Item, {
98
+ "data-cy": "config-show-issue-passport",
99
+ onClick: () => {
100
+ toggleShowIssue();
101
+ },
102
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
103
+ display: "flex",
104
+ alignItems: "center",
105
+ children: [loading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner.default, {
106
+ size: [16, 10],
107
+ style: {
108
+ marginRight: 8
109
+ }
110
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
111
+ children: [enablePassportIssuance ? t('team.passport.disableIssuance') : t('team.passport.enableIssuance'), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
112
+ fontSize: 12,
113
+ color: "#888",
114
+ children: enablePassportIssuance ? t('team.passport.disableIssuanceTip') : t('team.passport.enableIssuanceTip')
115
+ })]
116
+ })]
117
+ })
118
+ }),
119
+ children: () => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
120
+ variant: "outlined",
121
+ "data-cy": "config-trusted-issuers",
122
+ onClick: () => {
123
+ setShowTrustedIssuers(true);
124
+ },
125
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_ExternalIssuerIcon.default, {
126
+ style: {
127
+ fontSize: 16,
128
+ marginRight: 4
129
+ }
130
+ }), t('team.passport.trustedPassportIssuers')]
131
+ })
132
+ }), (inService || nodeInfo.did !== teamDid) && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
133
+ style: {
134
+ marginLeft: 16
135
+ },
136
+ variant: "contained",
137
+ edge: "end",
138
+ color: "primary",
139
+ "data-cy": "create-role",
140
+ onClick: () => setShowCreate(true),
141
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Add.default, {
142
+ style: {
143
+ fontSize: 16,
144
+ marginRight: 4
145
+ }
146
+ }), t('team.add')]
147
+ })]
148
+ })
149
+ })]
150
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
151
+ mt: 3
152
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
153
+ className: "list",
154
+ children: filteredRoles.map(role => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
155
+ "data-cy": "passport-".concat(role.name),
156
+ className: "item",
157
+ display: "flex",
158
+ alignItems: "center",
159
+ onClick: () => setUpdateForm(role),
160
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
161
+ display: "flex",
162
+ alignItems: "center",
163
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("img", {
164
+ style: {
165
+ width: 120
166
+ },
167
+ alt: "",
168
+ src: (0, _createPassportSvg.default)({
169
+ title: role.title,
170
+ issuer: teamName,
171
+ issuerDid: teamIssuerDid,
172
+ ownerName: 'Your Name',
173
+ isDataUrl: true,
174
+ preferredColor: passportColor
175
+ })
176
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
177
+ ml: 3,
178
+ className: "title",
179
+ children: role.title
180
+ })]
181
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
182
+ className: "description",
183
+ children: role.description
184
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_permission.default, {
185
+ permission: inService ? '' : 'mutate_team',
186
+ role: inService ? _util.BlockletAdminRoles : [],
187
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
188
+ className: "action",
189
+ children: (0, _util.isProtectedRole)(role.name) ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_LockIcon.default, {}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_EditIcon.default, {})
190
+ })
191
+ })]
192
+ }, role.name))
193
+ }), showCreate && /*#__PURE__*/(0, _jsxRuntime.jsx)(_mutateRole.default, {
194
+ teamDid: teamDid,
195
+ onCancel: () => setShowCreate(false),
196
+ onSuccess: () => {
197
+ setShowCreate(false);
198
+ refreshTeam();
199
+ }
200
+ }), updateForm && /*#__PURE__*/(0, _jsxRuntime.jsx)(_detail.default, {
201
+ onCancel: () => setUpdateForm(null),
202
+ onSuccess: () => {
203
+ setUpdateForm(null);
204
+ refreshTeam();
205
+ },
206
+ onDelete: () => {
207
+ setUpdateForm(null);
208
+ refreshTeam();
209
+ },
210
+ mode: "update",
211
+ roleName: updateForm.name,
212
+ item: updateForm
213
+ }), showTrustedIssuers && /*#__PURE__*/(0, _jsxRuntime.jsx)(_trustedIssuers.default, {
214
+ onCancel: () => setShowTrustedIssuers(false)
215
+ })]
216
+ });
217
+ }
218
+ 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"])));
219
+ PassportList.propTypes = {};
220
+ PassportList.defaultProps = {};
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = MutateRole;
7
+ var _react = require("react");
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _md = _interopRequireDefault(require("md5"));
10
+ var _Dialog = _interopRequireDefault(require("@arcblock/ux/lib/Dialog"));
11
+ var _Spinner = _interopRequireDefault(require("@arcblock/ux/lib/Spinner"));
12
+ var _DialogContentText = _interopRequireDefault(require("@mui/material/DialogContentText"));
13
+ var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
14
+ var _TextField = _interopRequireDefault(require("@mui/material/TextField"));
15
+ var _context = require("@arcblock/ux/lib/Locale/context");
16
+ var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
17
+ var _Alert = _interopRequireDefault(require("@arcblock/ux/lib/Alert"));
18
+ var _node = require("../../contexts/node");
19
+ var _util = require("../../util");
20
+ var _jsxRuntime = require("react/jsx-runtime");
21
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
+ function MutateRole(_ref) {
23
+ let {
24
+ teamDid,
25
+ onCancel,
26
+ onSuccess,
27
+ onError,
28
+ mode,
29
+ item
30
+ } = _ref;
31
+ const {
32
+ api
33
+ } = (0, _node.useNodeContext)();
34
+ const [loading, setLoading] = (0, _react.useState)(false);
35
+ const [error, setError] = (0, _react.useState)('');
36
+ const {
37
+ t
38
+ } = (0, _context.useLocaleContext)();
39
+ const [title, setTitle] = (0, _react.useState)(item.title || '');
40
+ const [description, setDescription] = (0, _react.useState)(item.description || '');
41
+ const onCreate = async () => {
42
+ const _title = title.trim();
43
+ if (!_title) {
44
+ setError(t('team.passport.error.titleEmpty'));
45
+ return;
46
+ }
47
+ if (_title.length > 64) {
48
+ setError(t('team.passport.error.titleTooLong', {
49
+ length: 64
50
+ }));
51
+ return;
52
+ }
53
+ const desc = description.replace(/\n/g, ' ');
54
+ if (!desc) {
55
+ setError(t('team.passport.error.descriptionEmpty'));
56
+ return;
57
+ }
58
+ const name = mode === 'create' ? (0, _md.default)(_title) : item.name;
59
+ setError(null);
60
+ setLoading(true);
61
+ try {
62
+ if (mode === 'create') {
63
+ await api.createRole({
64
+ input: {
65
+ teamDid,
66
+ name,
67
+ title: _title,
68
+ description: desc
69
+ }
70
+ });
71
+ } else {
72
+ await api.updateRole({
73
+ input: {
74
+ teamDid,
75
+ role: {
76
+ name,
77
+ title: _title,
78
+ description: desc
79
+ }
80
+ }
81
+ });
82
+ }
83
+ onSuccess();
84
+ } catch (err) {
85
+ const errMsg = (0, _util.formatError)(err);
86
+ setError(errMsg);
87
+ onError(err);
88
+ } finally {
89
+ setLoading(false);
90
+ }
91
+ };
92
+ const body = /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
93
+ children: [mode === 'update' && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
94
+ component: "div",
95
+ style: {
96
+ paddingTop: 24
97
+ },
98
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
99
+ label: "ID",
100
+ autoComplete: "off",
101
+ variant: "outlined",
102
+ name: "url",
103
+ "data-cy": "mutate-role-input-name",
104
+ fullWidth: true,
105
+ autoFocus: true,
106
+ value: item.name,
107
+ disabled: true
108
+ })
109
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
110
+ component: "div",
111
+ style: {
112
+ marginTop: 24
113
+ },
114
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
115
+ label: t('common.title'),
116
+ autoComplete: "off",
117
+ variant: "outlined",
118
+ name: "title",
119
+ "data-cy": "mutate-role-input-title",
120
+ fullWidth: true,
121
+ autoFocus: true,
122
+ value: title,
123
+ onChange: e => {
124
+ setError(null);
125
+ setTitle(e.target.value);
126
+ },
127
+ disabled: mode === 'update' || loading,
128
+ helperText: t('team.passport.create.titleTip')
129
+ })
130
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
131
+ component: "div",
132
+ style: {
133
+ marginTop: 24,
134
+ marginBottom: 24
135
+ },
136
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
137
+ label: t('common.description'),
138
+ autoComplete: "off",
139
+ variant: "outlined",
140
+ name: "description",
141
+ "data-cy": "mutate-role-input-description",
142
+ fullWidth: true,
143
+ autoFocus: true,
144
+ value: description,
145
+ onChange: e => {
146
+ setError(null);
147
+ setDescription(e.target.value);
148
+ },
149
+ disabled: loading,
150
+ multiline: true,
151
+ rows: 3
152
+ })
153
+ })]
154
+ });
155
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Dialog.default, {
156
+ title: mode === 'create' ? t('team.passport.create.title') : '',
157
+ fullWidth: true,
158
+ open: true,
159
+ onClose: onCancel,
160
+ showCloseButton: false,
161
+ actions: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
162
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
163
+ onClick: onCancel,
164
+ color: "inherit",
165
+ children: t('common.cancel')
166
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
167
+ "data-cy": "mutate-role-confirm",
168
+ onClick: onCreate,
169
+ color: "primary",
170
+ disabled: loading,
171
+ variant: "contained",
172
+ autoFocus: true,
173
+ children: [loading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner.default, {
174
+ size: [16, 10]
175
+ }), mode === 'create' ? t('common.create') : t('common.update')]
176
+ })]
177
+ }),
178
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_DialogContentText.default, {
179
+ component: "div",
180
+ children: body
181
+ }), !!error && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Alert.default, {
182
+ type: "error",
183
+ variant: "icon",
184
+ style: {
185
+ width: '100%',
186
+ margin: 0
187
+ },
188
+ children: error
189
+ })]
190
+ });
191
+ }
192
+ MutateRole.propTypes = {
193
+ teamDid: _propTypes.default.string.isRequired,
194
+ onCancel: _propTypes.default.func.isRequired,
195
+ onSuccess: _propTypes.default.func.isRequired,
196
+ onError: _propTypes.default.func,
197
+ mode: _propTypes.default.oneOf(['create', 'update']),
198
+ item: _propTypes.default.object
199
+ };
200
+ MutateRole.defaultProps = {
201
+ onError: () => {},
202
+ mode: 'create',
203
+ item: {}
204
+ };