@abtnode/ux 1.8.25 → 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,295 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = TransferMember;
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 _useAsync = _interopRequireDefault(require("react-use/lib/useAsync"));
15
+
16
+ var _get = _interopRequireDefault(require("lodash/get"));
17
+
18
+ var _Dialog = _interopRequireDefault(require("@arcblock/ux/lib/Dialog"));
19
+
20
+ var _Spinner = _interopRequireDefault(require("@arcblock/ux/lib/Spinner"));
21
+
22
+ var _DialogContentText = _interopRequireDefault(require("@mui/material/DialogContentText"));
23
+
24
+ var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
25
+
26
+ var _TextField = _interopRequireDefault(require("@mui/material/TextField"));
27
+
28
+ var _Connect = _interopRequireDefault(require("@arcblock/did-connect/lib/Connect"));
29
+
30
+ var _context = require("@arcblock/ux/lib/Locale/context");
31
+
32
+ var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
33
+
34
+ var _Alert = _interopRequireDefault(require("@arcblock/ux/lib/Alert"));
35
+
36
+ var _clickToCopy = _interopRequireDefault(require("../../click-to-copy"));
37
+
38
+ var _node = require("../../contexts/node");
39
+
40
+ var _util = require("../../util");
41
+
42
+ var _session = require("../../contexts/session");
43
+
44
+ var _jsxRuntime = require("react/jsx-runtime");
45
+
46
+ var _templateObject;
47
+
48
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
49
+
50
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
51
+
52
+ function TransferMember(_ref) {
53
+ let {
54
+ teamDid,
55
+ onCancel,
56
+ onSuccess,
57
+ onError,
58
+ endpoint
59
+ } = _ref;
60
+ const {
61
+ api,
62
+ info
63
+ } = (0, _node.useNodeContext)();
64
+ const {
65
+ api: sessionAPI
66
+ } = (0, _react.useContext)(_session.SessionContext);
67
+ const [loading, setLoading] = (0, _react.useState)(false);
68
+ const {
69
+ locale
70
+ } = (0, _context.useLocaleContext)();
71
+ const [error, setError] = (0, _react.useState)('');
72
+ const {
73
+ t
74
+ } = (0, _context.useLocaleContext)();
75
+ const [openTransferNFTAuth, setOpenTransferNFTAuth] = (0, _react.useState)(false);
76
+ const [activeStep, setActiveStep] = (0, _react.useState)(0);
77
+ const [inviteInfo, setInviteInfo] = (0, _react.useState)('');
78
+ const [remark, setRemark] = (0, _react.useState)('');
79
+ const needTransferNFT = !!(0, _get.default)(info, 'ownerNft.did');
80
+ const delegationState = (0, _useAsync.default)(async () => {
81
+ if (needTransferNFT) {
82
+ const {
83
+ state
84
+ } = await api.getDelegationState();
85
+ return state;
86
+ }
87
+
88
+ return {
89
+ delegated: true
90
+ };
91
+ });
92
+
93
+ if (delegationState.loading) {
94
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dialog.default, {
95
+ title: t('team.transferNode.inviteDialog.title'),
96
+ fullWidth: true,
97
+ open: true,
98
+ onClose: onCancel,
99
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
100
+ style: {
101
+ display: 'flex',
102
+ justifyContent: 'center'
103
+ },
104
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner.default, {})
105
+ })
106
+ });
107
+ }
108
+
109
+ if (delegationState.error) {
110
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dialog.default, {
111
+ title: t('team.transferNode.inviteDialog.title'),
112
+ fullWidth: true,
113
+ open: true,
114
+ onClose: onCancel,
115
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Alert.default, {
116
+ type: "error",
117
+ variant: "icon",
118
+ children: (0, _util.formatError)(delegationState.error)
119
+ })
120
+ });
121
+ }
122
+
123
+ const onCreate = async () => {
124
+ setError(null);
125
+ setLoading(true);
126
+
127
+ try {
128
+ const {
129
+ inviteInfo: tmpInviteInfo
130
+ } = await api.createTransferInvitation({
131
+ input: {
132
+ teamDid,
133
+ role: 'owner',
134
+ remark: remark.trim()
135
+ }
136
+ });
137
+ setInviteInfo(tmpInviteInfo);
138
+ setActiveStep(steps.length - 1); // 跳转到最后一步
139
+ } catch (err) {
140
+ const errMsg = (0, _util.formatError)(err);
141
+ setError(errMsg);
142
+ onError(err);
143
+ } finally {
144
+ setLoading(false);
145
+ }
146
+ };
147
+
148
+ const handleTransferNFT = () => {
149
+ setOpenTransferNFTAuth(true);
150
+ setActiveStep(1);
151
+ };
152
+
153
+ const handleCancelTransferNFT = () => {
154
+ setOpenTransferNFTAuth(false);
155
+ setActiveStep(0);
156
+ };
157
+
158
+ const steps = [{
159
+ body: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Typography.default, {
160
+ component: "div",
161
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Alert.default, {
162
+ type: "warning",
163
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
164
+ children: t('team.transferNode.inviteDialog.tips.progress')
165
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
166
+ children: t('team.transferNode.inviteDialog.tips.newOwnerPermissions')
167
+ })]
168
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Alert.default, {
169
+ type: "warning",
170
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
171
+ children: t('team.transferNode.inviteDialog.tips.revoke')
172
+ })
173
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
174
+ style: {
175
+ marginTop: 20,
176
+ marginBottom: 10
177
+ }
178
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
179
+ label: t('common.remark'),
180
+ autoComplete: "off",
181
+ variant: "outlined",
182
+ fullWidth: true,
183
+ style: {
184
+ marginBottom: 8
185
+ },
186
+ value: remark,
187
+ onChange: e => {
188
+ setError(null);
189
+ setRemark(e.target.value);
190
+ },
191
+ disabled: loading,
192
+ "data-cy": "transfer-node-input-remark"
193
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
194
+ style: {
195
+ marginTop: 20,
196
+ marginBottom: 10
197
+ }
198
+ })]
199
+ }),
200
+ cancel: t('common.cancel'),
201
+ confirm: t('team.transferNode.inviteDialog.createInviteLink'),
202
+ onCancel,
203
+ onConfirm: needTransferNFT && !(0, _get.default)(delegationState, 'value.delegated') ? handleTransferNFT : onCreate
204
+ }, {
205
+ body: () => {
206
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Connect.default, {
207
+ action: "delegate-transfer-nft",
208
+ open: openTransferNFTAuth,
209
+ locale: locale,
210
+ checkFn: sessionAPI.get,
211
+ onClose: handleCancelTransferNFT,
212
+ onSuccess: onCreate,
213
+ checkTimeout: 5 * 60 * 1000,
214
+ webWalletUrl: (0, _util.getWebWalletUrl)(info),
215
+ extraParams: {
216
+ targetDID: info.did
217
+ },
218
+ messages: {
219
+ title: t('team.transferNode.delegateDialog.title'),
220
+ scan: t('team.transferNode.delegateDialog.scan'),
221
+ confirm: t('team.transferNode.delegateDialog.confirm'),
222
+ success: t('team.transferNode.delegateDialog.success')
223
+ },
224
+ popup: true
225
+ });
226
+ }
227
+ }, {
228
+ body: () => {
229
+ const link = (0, _util.getInviteLink)({
230
+ inviteId: inviteInfo.inviteId,
231
+ endpoint
232
+ });
233
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
234
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(Bold, {
235
+ children: t('team.transferNode.inviteDialog.createSuccessTip', {
236
+ expireDate: (0, _util.formatToDatetime)(inviteInfo.expireDate)
237
+ })
238
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
239
+ style: {
240
+ marginTop: '40px'
241
+ }
242
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_clickToCopy.default, {
243
+ children: link
244
+ })]
245
+ });
246
+ },
247
+ confirm: t('common.confirm'),
248
+ onConfirm: onSuccess
249
+ }];
250
+ const step = steps[activeStep];
251
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Dialog.default, {
252
+ title: t('team.transferNode.inviteDialog.title'),
253
+ fullWidth: true,
254
+ open: true,
255
+ showCloseButton: false,
256
+ actions: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
257
+ children: [step.cancel && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
258
+ onClick: step.onCancel,
259
+ color: "inherit",
260
+ children: step.cancel
261
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
262
+ onClick: step.onConfirm,
263
+ color: "primary",
264
+ disabled: loading,
265
+ variant: "contained",
266
+ autoFocus: true,
267
+ children: [loading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner.default, {
268
+ size: [16, 10]
269
+ }), step.confirm]
270
+ })]
271
+ }),
272
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_DialogContentText.default, {
273
+ component: "div",
274
+ children: typeof step.body === 'function' ? step.body() : step.body
275
+ }), !!error && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Alert.default, {
276
+ type: "error",
277
+ variant: "icon",
278
+ children: error
279
+ })]
280
+ });
281
+ }
282
+
283
+ TransferMember.propTypes = {
284
+ teamDid: _propTypes.default.string.isRequired,
285
+ onCancel: _propTypes.default.func.isRequired,
286
+ onSuccess: _propTypes.default.func.isRequired,
287
+ onError: _propTypes.default.func,
288
+ endpoint: _propTypes.default.string
289
+ };
290
+ TransferMember.defaultProps = {
291
+ onError: () => {},
292
+ endpoint: ''
293
+ };
294
+
295
+ const Bold = _styled.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n font-size: 16px;\n font-weight: bold;\n"])));
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.parseAvatar = parseAvatar;
7
+
8
+ var _urlJoin = _interopRequireDefault(require("url-join"));
9
+
10
+ var _constant = require("@abtnode/constant");
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ // eslint-disable-next-line import/prefer-default-export
15
+ function parseAvatar(avatar, teamDid, inService) {
16
+ if (avatar && avatar.startsWith(_constant.USER_AVATAR_URL_PREFIX)) {
17
+ const prefix = window.env.apiPrefix || '/';
18
+
19
+ if (inService) {
20
+ return (0, _urlJoin.default)(prefix, '/user', avatar.replace(_constant.USER_AVATAR_URL_PREFIX, ''));
21
+ }
22
+
23
+ return (0, _urlJoin.default)(prefix, '/user/avatar', teamDid, avatar.replace(_constant.USER_AVATAR_URL_PREFIX, ''));
24
+ }
25
+
26
+ return avatar;
27
+ }
@@ -0,0 +1,304 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = PassportDetailWithPermission;
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 _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
15
+
16
+ var _Dialog = _interopRequireDefault(require("@arcblock/ux/lib/Dialog"));
17
+
18
+ var _Spinner = _interopRequireDefault(require("@arcblock/ux/lib/Spinner"));
19
+
20
+ var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
21
+
22
+ var _FormControlLabel = _interopRequireDefault(require("@mui/material/FormControlLabel"));
23
+
24
+ var _Checkbox = _interopRequireDefault(require("@mui/material/Checkbox"));
25
+
26
+ var _context = require("@arcblock/ux/lib/Locale/context");
27
+
28
+ var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
29
+
30
+ var _EditIcon = _interopRequireDefault(require("@arcblock/icons/lib/EditIcon"));
31
+
32
+ var _DeleteIcon = _interopRequireDefault(require("@arcblock/icons/lib/DeleteIcon"));
33
+
34
+ var _toast = _interopRequireDefault(require("../../toast"));
35
+
36
+ var _node = require("../../contexts/node");
37
+
38
+ var _team = require("../../contexts/team");
39
+
40
+ var _util = require("../../util");
41
+
42
+ var _permission = require("../../permission");
43
+
44
+ var _confirm = _interopRequireDefault(require("../../confirm"));
45
+
46
+ var _mutateRole = _interopRequireDefault(require("./mutate-role"));
47
+
48
+ var _jsxRuntime = require("react/jsx-runtime");
49
+
50
+ var _templateObject, _templateObject2;
51
+
52
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
53
+
54
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
55
+
56
+ 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; }
57
+
58
+ 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; }
59
+
60
+ 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; }
61
+
62
+ function PassportDetail(_ref) {
63
+ let {
64
+ onCancel,
65
+ onSuccess,
66
+ onDelete,
67
+ roleName,
68
+ hasPermission
69
+ } = _ref;
70
+ const {
71
+ api
72
+ } = (0, _node.useNodeContext)();
73
+ const {
74
+ roles,
75
+ permissions,
76
+ teamDid,
77
+ refresh: refreshTeam,
78
+ isNodeTeam
79
+ } = (0, _team.useTeamContext)();
80
+ const {
81
+ t
82
+ } = (0, _context.useLocaleContext)();
83
+ const [binds, setBinds] = (0, _react.useState)([]);
84
+ const [updateForm, setUpdateForm] = (0, _react.useState)(false);
85
+ const [delConfirm, setDelConfirm] = (0, _react.useState)(null);
86
+ const [loading, setLoading] = (0, _react.useState)(false);
87
+ const role = (0, _cloneDeep.default)(roles.find(x => x.name === roleName));
88
+ const isProtected = (0, _util.isProtectedRole)(roleName);
89
+
90
+ const deletePassport = async name => {
91
+ if (loading) return;
92
+
93
+ try {
94
+ setLoading(true);
95
+ await api.deleteRole({
96
+ input: {
97
+ teamDid,
98
+ name
99
+ }
100
+ });
101
+ onDelete();
102
+ } catch (err) {
103
+ _toast.default.error(err.message);
104
+ } finally {
105
+ setLoading(false);
106
+ setDelConfirm(null);
107
+ }
108
+ };
109
+
110
+ const getData = async (team, name) => {
111
+ const res = await api.getPermissionsByRole({
112
+ input: {
113
+ teamDid: team,
114
+ role: {
115
+ name
116
+ }
117
+ }
118
+ });
119
+ const permissionList = res.permissions || [];
120
+ const bindList = permissions.map(x => _objectSpread(_objectSpread({}, x), {}, {
121
+ bind: permissionList.some(y => y.name === x.name)
122
+ }));
123
+ setBinds(bindList);
124
+ };
125
+
126
+ const onBind = async () => {
127
+ setLoading(true);
128
+ const grantNames = binds.filter(x => x.bind).map(x => x.name);
129
+
130
+ try {
131
+ await api.updatePermissionsForRole({
132
+ input: {
133
+ teamDid,
134
+ roleName: role.name,
135
+ grantNames
136
+ }
137
+ });
138
+
139
+ _toast.default.success(t('common.saveSuccess'));
140
+
141
+ onSuccess();
142
+ } catch (err) {
143
+ _toast.default.error((0, _util.formatError)(err));
144
+ } finally {
145
+ setLoading(false);
146
+ }
147
+ };
148
+
149
+ (0, _react.useEffect)(() => {
150
+ if (teamDid && roleName) {
151
+ getData(teamDid, roleName);
152
+ }
153
+ }, [teamDid, roleName]); // eslint-disable-line
154
+
155
+ const readPermissionsOnly = isNodeTeam || !hasPermission;
156
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Dialog.default, {
157
+ title: t('common.passport'),
158
+ onClose: onCancel,
159
+ open: true,
160
+ fullWidth: true,
161
+ toolbar: hasPermission && !isProtected && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
162
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {
163
+ onClick: () => setUpdateForm(role),
164
+ "data-cy": "edit-passport-".concat(role.name),
165
+ size: "large",
166
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_EditIcon.default, {
167
+ fill: "#bfbfbf"
168
+ })
169
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {
170
+ onClick: () => setDelConfirm({
171
+ title: t('team.passport.delete.title'),
172
+ description: t('team.passport.delete.description', {
173
+ name: role.title
174
+ }),
175
+ confirm: t('common.delConfirm'),
176
+ cancel: t('common.cancel'),
177
+ onConfirm: () => {
178
+ deletePassport(role.name);
179
+ },
180
+ onCancel: () => {
181
+ setLoading(false);
182
+ setDelConfirm(null);
183
+ }
184
+ }),
185
+ "data-cy": "delete-passport-".concat(role.name),
186
+ size: "large",
187
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_DeleteIcon.default, {
188
+ fill: "#bfbfbf"
189
+ })
190
+ })]
191
+ }),
192
+ actions: !readPermissionsOnly && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
193
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
194
+ onClick: onCancel,
195
+ color: "inherit",
196
+ children: t('common.cancel')
197
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
198
+ onClick: onBind,
199
+ color: "primary",
200
+ disabled: loading || !role,
201
+ variant: "contained",
202
+ autoFocus: true,
203
+ "data-cy": "bind-permission-btn-confirm",
204
+ children: [loading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner.default, {
205
+ size: [16, 10]
206
+ }), t('common.save')]
207
+ })]
208
+ }),
209
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(Div, {
210
+ children: [!role && /*#__PURE__*/(0, _jsxRuntime.jsx)(Center, {
211
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner.default, {})
212
+ }), role && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
213
+ className: "dialog-content",
214
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
215
+ className: "header",
216
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
217
+ className: "title",
218
+ children: role.title
219
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
220
+ className: "description",
221
+ children: role.description
222
+ })]
223
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
224
+ className: "bind",
225
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
226
+ className: "title",
227
+ children: t('common.permission')
228
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
229
+ className: "list",
230
+ children: binds // if readonly, show obtained permissions only
231
+ .filter(x => readPermissionsOnly ? x.bind : true).map(x => /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
232
+ className: "item",
233
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_FormControlLabel.default, {
234
+ control: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Checkbox.default, {
235
+ disabled: readPermissionsOnly,
236
+ checked: x.bind,
237
+ onChange: () => {
238
+ setBinds(state => state.map(y => {
239
+ if (y.name === x.name) {
240
+ y.bind = !y.bind;
241
+ }
242
+
243
+ return y;
244
+ }));
245
+ },
246
+ name: x.name
247
+ }),
248
+ label: x.description
249
+ })
250
+ }))
251
+ })]
252
+ })]
253
+ })]
254
+ }), updateForm && /*#__PURE__*/(0, _jsxRuntime.jsx)(_mutateRole.default, {
255
+ teamDid: teamDid,
256
+ onCancel: () => setUpdateForm(null),
257
+ onSuccess: () => {
258
+ setUpdateForm(null);
259
+ refreshTeam();
260
+ },
261
+ mode: "update",
262
+ roleName: updateForm.name,
263
+ item: updateForm
264
+ }), delConfirm && /*#__PURE__*/(0, _jsxRuntime.jsx)(_confirm.default, {
265
+ title: delConfirm.title,
266
+ description: delConfirm.description,
267
+ confirm: delConfirm.confirm,
268
+ cancel: delConfirm.cancel,
269
+ params: delConfirm.params,
270
+ onConfirm: delConfirm.onConfirm,
271
+ onCancel: delConfirm.onCancel
272
+ })]
273
+ });
274
+ }
275
+
276
+ const PassportDetailInDaemon = (0, _permission.withPermission)(PassportDetail, 'mutate_team');
277
+ const PassportDetailInService = (0, _permission.withPermission)(PassportDetail, '', _util.BlockletAdminRoles);
278
+
279
+ function PassportDetailWithPermission(props) {
280
+ const {
281
+ inService
282
+ } = (0, _node.useNodeContext)();
283
+
284
+ if (inService) {
285
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(PassportDetailInService, _objectSpread({}, props));
286
+ }
287
+
288
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(PassportDetailInDaemon, _objectSpread({}, props));
289
+ }
290
+
291
+ PassportDetail.propTypes = {
292
+ roleName: _propTypes.default.string.isRequired,
293
+ onCancel: _propTypes.default.func.isRequired,
294
+ onSuccess: _propTypes.default.func.isRequired,
295
+ onDelete: _propTypes.default.func.isRequired,
296
+ hasPermission: _propTypes.default.bool
297
+ };
298
+ PassportDetail.defaultProps = {
299
+ hasPermission: false
300
+ };
301
+
302
+ const Div = _styled.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .header {\n .title {\n font-weight: 400;\n font-size: 24px;\n line-height: 28px;\n color: #222222;\n }\n\n .description {\n margin-top: 16px;\n font-weight: 400;\n font-size: 16px;\n line-height: 19px;\n color: #999999;\n }\n }\n\n .bind {\n margin-top: 24px;\n .title {\n font-weight: 400;\n font-size: 16px;\n line-height: 19px;\n color: #666666;\n margin-bottom: 24px;\n }\n .item {\n margin-top: 24px;\n }\n\n .MuiFormControlLabel-label {\n font-weight: 400;\n font-size: 16px;\n line-height: 19px;\n color: #666;\n }\n\n .PrivateSwitchBase-root-45 {\n padding: 0;\n padding-right: 12px;\n }\n }\n"])));
303
+
304
+ 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"])));