@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,377 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = Passports;
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 _get = _interopRequireDefault(require("lodash/get"));
17
+
18
+ var _upperFirst = _interopRequireDefault(require("lodash/upperFirst"));
19
+
20
+ var _Add = _interopRequireDefault(require("@mui/icons-material/Add"));
21
+
22
+ var _Box = _interopRequireDefault(require("@mui/material/Box"));
23
+
24
+ var _Tooltip = _interopRequireDefault(require("@mui/material/Tooltip"));
25
+
26
+ var _ErrorOutline = _interopRequireDefault(require("@mui/icons-material/ErrorOutline"));
27
+
28
+ var _context = require("@arcblock/ux/lib/Locale/context");
29
+
30
+ var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
31
+
32
+ var _RevokeIcon = _interopRequireDefault(require("@arcblock/icons/lib/RevokeIcon"));
33
+
34
+ var _ExternalIssuerIcon = _interopRequireDefault(require("@arcblock/icons/lib/ExternalIssuerIcon"));
35
+
36
+ var _Empty = _interopRequireDefault(require("@arcblock/ux/lib/Empty"));
37
+
38
+ var _constant = require("@abtnode/constant");
39
+
40
+ var _createPassportSvg = _interopRequireDefault(require("@abtnode/auth/lib/util/create-passport-svg"));
41
+
42
+ var _node = require("../../contexts/node");
43
+
44
+ var _session = require("../../contexts/session");
45
+
46
+ var _team = require("../../contexts/team");
47
+
48
+ var _util = require("../../util");
49
+
50
+ var _confirm = _interopRequireDefault(require("../../confirm"));
51
+
52
+ var _permission = _interopRequireDefault(require("../../permission"));
53
+
54
+ var _searchInput = _interopRequireDefault(require("../search-input"));
55
+
56
+ var _listHeader = _interopRequireDefault(require("../styles/list-header"));
57
+
58
+ var _issuePassport = _interopRequireDefault(require("./issue-passport"));
59
+
60
+ var _jsxRuntime = require("react/jsx-runtime");
61
+
62
+ var _templateObject;
63
+
64
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
65
+
66
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
67
+
68
+ 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; }
69
+
70
+ 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; }
71
+
72
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
73
+
74
+ function ConfirmDescription(_ref) {
75
+ let {
76
+ action,
77
+ passport
78
+ } = _ref;
79
+ const {
80
+ t
81
+ } = (0, _context.useLocaleContext)();
82
+ const {
83
+ roles
84
+ } = (0, _team.useTeamContext)();
85
+ const role = roles.find(x => x.name === passport.role);
86
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
87
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
88
+ children: action === 'enable' ? t('team.member.enablePassportDescription') : t('team.member.revokePassportDescription')
89
+ }), role && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
90
+ mt: 3,
91
+ fontWeight: "bold",
92
+ children: t('team.member.passportPermissionTitle')
93
+ }), role && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
94
+ mt: 1,
95
+ children: role.description
96
+ })]
97
+ });
98
+ }
99
+
100
+ ConfirmDescription.propTypes = {
101
+ action: _propTypes.default.string.isRequired,
102
+ passport: _propTypes.default.object.isRequired
103
+ };
104
+ ConfirmDescription.defaultProps = {};
105
+
106
+ function Passports(_ref2) {
107
+ var _blocklet$settings;
108
+
109
+ let {
110
+ user,
111
+ onCreate
112
+ } = _ref2;
113
+ const {
114
+ t
115
+ } = (0, _context.useLocaleContext)();
116
+ const {
117
+ session,
118
+ inService
119
+ } = (0, _session.useSessionContext)();
120
+ const {
121
+ roles,
122
+ teamDid,
123
+ teamIssuerDid,
124
+ refresh: refreshTeam,
125
+ enablePassportIssuance,
126
+ trustedPassports,
127
+ passportColor,
128
+ blocklet
129
+ } = (0, _team.useTeamContext)();
130
+ const {
131
+ api
132
+ } = (0, _node.useNodeContext)();
133
+ const {
134
+ enqueueSnackbar
135
+ } = (0, _notistack.useSnackbar)();
136
+ const [loading, setLoading] = (0, _react.useState)(false);
137
+ const [toggleConfirm, setToggleConfirm] = (0, _react.useState)(null);
138
+ const [showIssueDialog, setShowIssueDialog] = (0, _react.useState)(false);
139
+ const [search, setSearch] = (0, _react.useState)('');
140
+ const passports = ((0, _get.default)(user, 'passports') || []).map(x => _objectSpread(_objectSpread({}, x), {}, {
141
+ revoked: x.status === _constant.PASSPORT_STATUS.REVOKED
142
+ }));
143
+
144
+ const togglePassportStatus = async passport => {
145
+ if (loading) {
146
+ return;
147
+ }
148
+
149
+ setLoading(true);
150
+
151
+ try {
152
+ const method = passport.status === _constant.PASSPORT_STATUS.REVOKED ? 'enableUserPassport' : 'revokeUserPassport';
153
+ await api[method]({
154
+ input: {
155
+ teamDid,
156
+ userDid: user.did,
157
+ passportId: passport.id
158
+ }
159
+ });
160
+ refreshTeam();
161
+ } catch (err) {
162
+ enqueueSnackbar((0, _util.formatError)(err), {
163
+ autoHideDuration: 5000,
164
+ variant: 'error'
165
+ });
166
+ } finally {
167
+ setLoading(false);
168
+ setToggleConfirm(null);
169
+ }
170
+ };
171
+
172
+ const confirmToggle = item => item.status === _constant.PASSPORT_STATUS.REVOKED ? setToggleConfirm({
173
+ title: t('team.member.enablePassport'),
174
+ description: /*#__PURE__*/(0, _jsxRuntime.jsx)(ConfirmDescription, {
175
+ action: "enable",
176
+ passport: item
177
+ }),
178
+ confirm: t('common.enable'),
179
+ cancel: t('common.cancel'),
180
+ onConfirm: () => {
181
+ togglePassportStatus(item);
182
+ },
183
+ onCancel: () => {
184
+ setLoading(false);
185
+ setToggleConfirm(null);
186
+ },
187
+ color: 'primary'
188
+ }) : setToggleConfirm({
189
+ title: t('team.member.revokePassport'),
190
+ description: /*#__PURE__*/(0, _jsxRuntime.jsx)(ConfirmDescription, {
191
+ action: "revoke",
192
+ passport: item
193
+ }),
194
+ confirm: t('common.revoke'),
195
+ cancel: t('common.cancel'),
196
+ onConfirm: () => {
197
+ togglePassportStatus(item);
198
+ },
199
+ onCancel: () => {
200
+ setLoading(false);
201
+ setToggleConfirm(null);
202
+ }
203
+ });
204
+
205
+ const revokeInfo = (hasPermission, passport) => {
206
+ if (user.did === session.user.did && session.user.passportId && session.user.passportId === passport.id) {
207
+ return {
208
+ revokable: false,
209
+ message: t('team.passport.shouldNotDeleteCurrent')
210
+ };
211
+ }
212
+
213
+ if (!hasPermission) {
214
+ return {
215
+ revokable: false,
216
+ message: t('team.passport.noPermission')
217
+ };
218
+ }
219
+
220
+ if (teamDid === passport.issuer.id && passport.name === 'owner') {
221
+ return {
222
+ revokable: false,
223
+ message: t('team.passport.noPermission')
224
+ };
225
+ }
226
+
227
+ return {
228
+ revokable: true
229
+ };
230
+ };
231
+
232
+ const filteredPassports = passports.filter(x => !search || x.title.includes(search) || x.name.includes(search));
233
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Div, {
234
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_listHeader.default, {
235
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
236
+ className: "left",
237
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_searchInput.default, {
238
+ placeholder: t('team.passport.search'),
239
+ value: search,
240
+ onChange: e => setSearch(e.target.value)
241
+ })
242
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
243
+ className: "right",
244
+ children: enablePassportIssuance && !!user.approved && /*#__PURE__*/(0, _jsxRuntime.jsx)(_permission.default, {
245
+ permission: inService ? '' : 'mutate_team',
246
+ role: inService ? _util.BlockletAdminRoles : [],
247
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
248
+ variant: "contained",
249
+ color: "primary",
250
+ "data-cy": "issue-passport",
251
+ onClick: () => setShowIssueDialog(true),
252
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Add.default, {
253
+ style: {
254
+ fontSize: 16,
255
+ marginRight: 4
256
+ }
257
+ }), t('team.passport.issue')]
258
+ })
259
+ })
260
+ })]
261
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
262
+ children: [filteredPassports.map(x => /*#__PURE__*/(0, _jsxRuntime.jsx)(_permission.default, {
263
+ permission: inService ? '' : 'mutate_team',
264
+ role: inService ? _util.BlockletAdminRoles : [],
265
+ children: can => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
266
+ className: "passport-item",
267
+ display: "flex",
268
+ justifyContent: "space-between",
269
+ alignItems: "center",
270
+ mt: 3,
271
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
272
+ display: "flex",
273
+ alignItems: "center",
274
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
275
+ // eslint-disable-next-line react/no-danger
276
+ dangerouslySetInnerHTML: {
277
+ __html: (0, _createPassportSvg.default)({
278
+ title: x.title || x.name,
279
+ issuer: x.issuer && x.issuer.name,
280
+ issuerDid: x.issuer && x.issuer.id,
281
+ ownerName: user.fullName,
282
+ ownerAvatarUrl: user.avatar,
283
+ revoked: x.revoked,
284
+ preferredColor: passportColor,
285
+ width: '120px'
286
+ })
287
+ }
288
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
289
+ className: "body",
290
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
291
+ className: "title",
292
+ display: "flex",
293
+ alignItems: "center",
294
+ children: [(0, _upperFirst.default)(x.title), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
295
+ className: "status-icons",
296
+ children: [!!teamIssuerDid && x.issuer.id !== teamIssuerDid && /*#__PURE__*/(0, _jsxRuntime.jsx)(_ExternalIssuerIcon.default, {}), x.revoked && /*#__PURE__*/(0, _jsxRuntime.jsx)(_RevokeIcon.default, {})]
297
+ })]
298
+ }), !!teamIssuerDid && x.issuer.id !== teamIssuerDid && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
299
+ className: "tip",
300
+ children: [x.issuer.id !== teamIssuerDid && !trustedPassports.some(y => y.issuerDid === x.issuer.id) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tooltip.default, {
301
+ title: t('team.passport.notTrustedIssuerTip'),
302
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
303
+ component: _ErrorOutline.default,
304
+ style: {
305
+ fontSize: '1.3em'
306
+ },
307
+ color: "error.main",
308
+ mr: 0.5
309
+ })
310
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
311
+ children: t('team.passport.issueBy', {
312
+ name: x.issuer.name
313
+ })
314
+ })]
315
+ })]
316
+ })]
317
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
318
+ children: revokeInfo(can, x).revokable ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
319
+ variant: "outlined",
320
+ color: x.revoked ? 'primary' : 'secondary',
321
+ onClick: () => confirmToggle(x),
322
+ children: [x.revoked ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Add.default, {
323
+ style: {
324
+ fontSize: 16,
325
+ marginRight: 4
326
+ }
327
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_RevokeIcon.default, {
328
+ style: {
329
+ height: 16,
330
+ marginRight: 4
331
+ }
332
+ }), x.revoked ? t('common.enable') : t('common.revoke')]
333
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tooltip.default, {
334
+ title: revokeInfo(can, x).message,
335
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ErrorOutline.default, {
336
+ style: {
337
+ color: '#ddd'
338
+ }
339
+ })
340
+ })
341
+ })]
342
+ })
343
+ })), !filteredPassports.length && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Empty.default, {
344
+ children: t('common.empty')
345
+ })]
346
+ }), showIssueDialog && /*#__PURE__*/(0, _jsxRuntime.jsx)(_issuePassport.default, {
347
+ teamDid: teamDid,
348
+ ownerDid: user.did,
349
+ roles: roles,
350
+ onCancel: () => setShowIssueDialog(false),
351
+ onSuccess: () => {
352
+ onCreate();
353
+ setShowIssueDialog(false);
354
+ },
355
+ showOwnerPassport: blocklet && !((_blocklet$settings = blocklet.settings) !== null && _blocklet$settings !== void 0 && _blocklet$settings.owner)
356
+ }), toggleConfirm && /*#__PURE__*/(0, _jsxRuntime.jsx)(_confirm.default, {
357
+ title: toggleConfirm.title,
358
+ description: toggleConfirm.description,
359
+ confirm: toggleConfirm.confirm,
360
+ cancel: toggleConfirm.cancel,
361
+ params: toggleConfirm.params,
362
+ onConfirm: toggleConfirm.onConfirm,
363
+ onCancel: toggleConfirm.onCancel,
364
+ color: toggleConfirm.color
365
+ })]
366
+ });
367
+ }
368
+
369
+ Passports.propTypes = {
370
+ user: _propTypes.default.object.isRequired,
371
+ onCreate: _propTypes.default.func
372
+ };
373
+ Passports.defaultProps = {
374
+ onCreate: () => {}
375
+ };
376
+
377
+ const Div = _styled.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .passport-item {\n .body {\n padding: 0;\n margin-left: 24px;\n margin-top: 0;\n }\n .title {\n font-weight: 400;\n font-size: 16px;\n line-height: 19px;\n color: #222222;\n }\n .tip {\n display: flex;\n align-items: center;\n font-size: 14px;\n margin-top: 6px;\n color: #bbb;\n }\n .status-icons {\n svg {\n fill: #bfbfbf;\n height: 1.2em;\n margin-left: 0.4em;\n }\n }\n .MuiButton-outlinedSecondary {\n color: #f16e6e;\n fill: #f16e6e;\n background: #fcf3f3;\n border: 0;\n &:hover {\n border: 0;\n }\n }\n }\n"])));
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = ToggleUserApproval;
7
+
8
+ var _react = require("react");
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _context = require("@arcblock/ux/lib/Locale/context");
13
+
14
+ var _toast = _interopRequireDefault(require("../../toast"));
15
+
16
+ var _confirm = _interopRequireDefault(require("../../confirm"));
17
+
18
+ var _node = require("../../contexts/node");
19
+
20
+ var _team = require("../../contexts/team");
21
+
22
+ var _session = require("../../contexts/session");
23
+
24
+ var _util = require("../../util");
25
+
26
+ var _jsxRuntime = require("react/jsx-runtime");
27
+
28
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
+
30
+ const isNodeOwner = (nodeInfo, userDid) => nodeInfo.nodeOwner && nodeInfo.nodeOwner.did === userDid;
31
+
32
+ const isSelf = (sessionUser, userDid) => sessionUser && sessionUser.did === userDid;
33
+
34
+ function ToggleUserApproval(_ref) {
35
+ let {
36
+ user,
37
+ onCancel: _onCancel,
38
+ onSuccess,
39
+ onError,
40
+ children
41
+ } = _ref;
42
+ const {
43
+ api,
44
+ info: nodeInfo,
45
+ inService
46
+ } = (0, _node.useNodeContext)();
47
+ const {
48
+ session
49
+ } = (0, _session.useSessionContext)();
50
+ const {
51
+ teamDid,
52
+ refresh
53
+ } = (0, _team.useTeamContext)();
54
+ const {
55
+ t
56
+ } = (0, _context.useLocaleContext)();
57
+ const [loading, setLoading] = (0, _react.useState)(false);
58
+ const [show, setShow] = (0, _react.useState)(false);
59
+
60
+ const open = () => setShow(true);
61
+
62
+ const updateUserApproval = async d => {
63
+ const {
64
+ did,
65
+ approved
66
+ } = d;
67
+
68
+ if (loading) {
69
+ return;
70
+ }
71
+
72
+ setLoading(true);
73
+
74
+ try {
75
+ await api.updateUserApproval({
76
+ input: {
77
+ teamDid,
78
+ user: {
79
+ did,
80
+ approved: !approved
81
+ }
82
+ }
83
+ });
84
+ setShow(false);
85
+ onSuccess();
86
+ refresh();
87
+ } catch (error) {
88
+ _toast.default.error((0, _util.formatError)(error));
89
+
90
+ onError();
91
+ } finally {
92
+ setLoading(false);
93
+ }
94
+ };
95
+
96
+ const approveConfirm = {
97
+ title: user.approved ? t('team.member.forbidLogin') : t('team.member.allowLogin'),
98
+ description: user.approved ? t('team.member.forbidLoginDescription') : t('team.member.allowLoginDescription'),
99
+ confirm: t('common.confirm'),
100
+ cancel: t('common.cancel'),
101
+ onConfirm: () => {
102
+ updateUserApproval(user);
103
+ },
104
+ onCancel: () => {
105
+ setLoading(false);
106
+ setShow(false);
107
+
108
+ _onCancel();
109
+ },
110
+ color: user.approved ? 'error' : 'primary'
111
+ };
112
+ let can;
113
+
114
+ if (!inService) {
115
+ can = nodeInfo.nodeOwner && !isNodeOwner(nodeInfo, user.did) && !isSelf(session.user, user.did);
116
+ } else {
117
+ can = !isSelf(session.user, user.did);
118
+ }
119
+
120
+ if (!can) {
121
+ return null;
122
+ }
123
+
124
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
125
+ children: [typeof children === 'function' ? children({
126
+ can,
127
+ open
128
+ }) : children, show ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_confirm.default, {
129
+ title: approveConfirm.title,
130
+ description: approveConfirm.description,
131
+ confirm: approveConfirm.confirm,
132
+ cancel: approveConfirm.cancel,
133
+ params: approveConfirm.params,
134
+ onConfirm: approveConfirm.onConfirm,
135
+ onCancel: approveConfirm.onCancel,
136
+ color: approveConfirm.color
137
+ }) : null]
138
+ });
139
+ }
140
+
141
+ ToggleUserApproval.propTypes = {
142
+ user: _propTypes.default.object,
143
+ onSuccess: _propTypes.default.func,
144
+ onCancel: _propTypes.default.func,
145
+ onError: _propTypes.default.func,
146
+ children: _propTypes.default.oneOfType([_propTypes.default.object, _propTypes.default.func])
147
+ };
148
+ ToggleUserApproval.defaultProps = {
149
+ user: {},
150
+ onSuccess: () => {},
151
+ onCancel: () => {},
152
+ onError: () => {},
153
+ children: null
154
+ };