@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,115 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = MemberActions;
7
+
8
+ var _react = require("react");
9
+
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+
12
+ var _MenuItem = _interopRequireDefault(require("@mui/material/MenuItem"));
13
+
14
+ var _Add = _interopRequireDefault(require("@mui/icons-material/Add"));
15
+
16
+ var _ListItemIcon = _interopRequireDefault(require("@mui/material/ListItemIcon"));
17
+
18
+ var _ListItemText = _interopRequireDefault(require("@mui/material/ListItemText"));
19
+
20
+ var _context = require("@arcblock/ux/lib/Locale/context");
21
+
22
+ var _ForbidLoginIcon = _interopRequireDefault(require("@arcblock/icons/lib/ForbidLoginIcon"));
23
+
24
+ var _AllowLoginIcon = _interopRequireDefault(require("@arcblock/icons/lib/AllowLoginIcon"));
25
+
26
+ var _team = require("../../contexts/team");
27
+
28
+ var _actions = _interopRequireDefault(require("../../actions"));
29
+
30
+ var _issuePassport = _interopRequireDefault(require("./issue-passport"));
31
+
32
+ var _toggleUserApproval = _interopRequireDefault(require("./toggle-user-approval"));
33
+
34
+ var _jsxRuntime = require("react/jsx-runtime");
35
+
36
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
+
38
+ function MemberActions(_ref) {
39
+ let {
40
+ user,
41
+ onIssuePassport
42
+ } = _ref;
43
+ const {
44
+ teamDid,
45
+ roles
46
+ } = (0, _team.useTeamContext)();
47
+ const {
48
+ t
49
+ } = (0, _react.useContext)(_context.LocaleContext);
50
+ const [enablePassportIssuance, setEnablePassportIssuance] = (0, _react.useState)(false);
51
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
52
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_actions.default, {
53
+ "data-cy": "member-actions",
54
+ actions: [{
55
+ icon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Add.default, {
56
+ fontSize: "small"
57
+ }),
58
+ text: t('team.passport.issue'),
59
+ 'data-cy': 'action-issue-passport',
60
+ onClick: e => {
61
+ e.stopPropagation();
62
+ setEnablePassportIssuance(true);
63
+ }
64
+ }, // eslint-disable-next-line react/no-unstable-nested-components
65
+ _ref2 => {
66
+ let {
67
+ close
68
+ } = _ref2;
69
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_toggleUserApproval.default, {
70
+ user: user,
71
+ children: _ref3 => {
72
+ let {
73
+ open: o
74
+ } = _ref3;
75
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_MenuItem.default, {
76
+ dense: true,
77
+ onClick: e => {
78
+ e.stopPropagation();
79
+ close();
80
+ o(e);
81
+ },
82
+ "data-cy": "action-toggle-block",
83
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_ListItemIcon.default, {
84
+ style: {
85
+ minWidth: 24,
86
+ marginRight: 8
87
+ },
88
+ children: user.approved ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_ForbidLoginIcon.default, {}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_AllowLoginIcon.default, {})
89
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ListItemText.default, {
90
+ primary: user.approved ? t('team.member.forbidLogin') : t('team.member.allowLogin')
91
+ })]
92
+ });
93
+ }
94
+ }, "toggle-approval");
95
+ }]
96
+ }), enablePassportIssuance && /*#__PURE__*/(0, _jsxRuntime.jsx)(_issuePassport.default, {
97
+ teamDid: teamDid,
98
+ ownerDid: user.did,
99
+ roles: roles,
100
+ onCancel: () => setEnablePassportIssuance(false),
101
+ onSuccess: () => {
102
+ onIssuePassport();
103
+ setEnablePassportIssuance(false);
104
+ }
105
+ })]
106
+ });
107
+ }
108
+
109
+ MemberActions.propTypes = {
110
+ user: _propTypes.default.object.isRequired,
111
+ onIssuePassport: _propTypes.default.func
112
+ };
113
+ MemberActions.defaultProps = {
114
+ onIssuePassport: () => {}
115
+ };
@@ -0,0 +1,544 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = MemberList;
7
+
8
+ var _react = require("react");
9
+
10
+ var _styled = _interopRequireDefault(require("@emotion/styled"));
11
+
12
+ var _propTypes = _interopRequireDefault(require("prop-types"));
13
+
14
+ var _classnames = _interopRequireDefault(require("classnames"));
15
+
16
+ var _Dialog = _interopRequireDefault(require("@arcblock/ux/lib/Dialog"));
17
+
18
+ var _Tooltip = _interopRequireDefault(require("@mui/material/Tooltip"));
19
+
20
+ var _Box = _interopRequireDefault(require("@mui/material/Box"));
21
+
22
+ var _FormControlLabel = _interopRequireDefault(require("@mui/material/FormControlLabel"));
23
+
24
+ var _Checkbox = _interopRequireDefault(require("@mui/material/Checkbox"));
25
+
26
+ var _Add = _interopRequireDefault(require("@mui/icons-material/Add"));
27
+
28
+ var _Loop = _interopRequireDefault(require("@mui/icons-material/Loop"));
29
+
30
+ var _Address = _interopRequireDefault(require("@arcblock/did-connect/lib/Address"));
31
+
32
+ var _Avatar = _interopRequireDefault(require("@arcblock/did-connect/lib/Avatar"));
33
+
34
+ var _context = require("@arcblock/ux/lib/Locale/context");
35
+
36
+ var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
37
+
38
+ var _PersonIcon = _interopRequireDefault(require("@arcblock/icons/lib/PersonIcon"));
39
+
40
+ var _ExternalIssuerIcon = _interopRequireDefault(require("@arcblock/icons/lib/ExternalIssuerIcon"));
41
+
42
+ var _Datatable = _interopRequireWildcard(require("@arcblock/ux/lib/Datatable"));
43
+
44
+ var _RelativeTime = _interopRequireDefault(require("@arcblock/ux/lib/RelativeTime"));
45
+
46
+ var _constant = require("@abtnode/constant");
47
+
48
+ var _toast = _interopRequireDefault(require("../../toast"));
49
+
50
+ var _node = require("../../contexts/node");
51
+
52
+ var _team = require("../../contexts/team");
53
+
54
+ var _permission = _interopRequireDefault(require("../../permission"));
55
+
56
+ var _util = require("../../util");
57
+
58
+ var _inviteMember = _interopRequireDefault(require("./invite-member"));
59
+
60
+ var _transferNode = _interopRequireDefault(require("./transfer-node"));
61
+
62
+ var _member = _interopRequireDefault(require("./member"));
63
+
64
+ var _invitations = _interopRequireDefault(require("./invitations"));
65
+
66
+ var _actions = _interopRequireDefault(require("./actions"));
67
+
68
+ var _util2 = require("./util");
69
+
70
+ var _jsxRuntime = require("react/jsx-runtime");
71
+
72
+ var _templateObject;
73
+
74
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
75
+
76
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
77
+
78
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
79
+
80
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
81
+
82
+ 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; }
83
+
84
+ 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; }
85
+
86
+ 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; }
87
+
88
+ const ROLE_ALL = '$all';
89
+ const ROLE_NONE = '$none';
90
+
91
+ const getCount = (counts, name) => {
92
+ const item = counts.find(x => x.key === name);
93
+ return (item === null || item === void 0 ? void 0 : item.value) || 0;
94
+ };
95
+
96
+ const isFromExternal = (user, teamIssuerDid) => {
97
+ const list = user.passports || [];
98
+
99
+ if (!list.length) {
100
+ return false;
101
+ }
102
+
103
+ return !list.some(z => z.issuer.id === teamIssuerDid);
104
+ };
105
+
106
+ function SimpleInfo(_ref) {
107
+ let {
108
+ user
109
+ } = _ref;
110
+ const {
111
+ t
112
+ } = (0, _react.useContext)(_context.LocaleContext);
113
+ const main = /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
114
+ className: "member-block",
115
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
116
+ className: "member-avatar",
117
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Avatar.default, {
118
+ src: user.avatar,
119
+ size: 24,
120
+ did: user.did,
121
+ shape: "circle",
122
+ style: {
123
+ borderRadius: '100%',
124
+ overflow: 'hidden'
125
+ }
126
+ }), !user.approved && /*#__PURE__*/(0, _jsxRuntime.jsx)("did", {
127
+ className: "badge-block"
128
+ }), user.isFromExternal && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tooltip.default, {
129
+ title: t('team.passport.externalPassport'),
130
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
131
+ ml: 1,
132
+ className: "icon",
133
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ExternalIssuerIcon.default, {})
134
+ })
135
+ })]
136
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
137
+ className: "member-text",
138
+ children: user.fullName
139
+ })]
140
+ });
141
+ return user.approved ? main : /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
142
+ display: "flex",
143
+ alignItems: "center",
144
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tooltip.default, {
145
+ title: t('team.member.forbidLoginDescription'),
146
+ children: main
147
+ })
148
+ });
149
+ }
150
+
151
+ SimpleInfo.propTypes = {
152
+ user: _propTypes.default.object.isRequired
153
+ };
154
+
155
+ function MemberList(_ref2) {
156
+ let {
157
+ type
158
+ } = _ref2;
159
+ const {
160
+ teamDid,
161
+ teamIssuerDid,
162
+ invitations,
163
+ roles,
164
+ refresh,
165
+ enablePassportIssuance,
166
+ endpoint,
167
+ api
168
+ } = (0, _team.useTeamContext)();
169
+ const {
170
+ inService,
171
+ ws: {
172
+ useSubscription
173
+ }
174
+ } = (0, _node.useNodeContext)();
175
+ const {
176
+ t,
177
+ locale
178
+ } = (0, _react.useContext)(_context.LocaleContext);
179
+ const [showInviteMember, setShowInviteMember] = (0, _react.useState)(false);
180
+ const [showTransferMember, setShowTransferMember] = (0, _react.useState)(false);
181
+ const [showInviting, setShowInviting] = (0, _react.useState)(false);
182
+ const [memberDialog, setMemberDialog] = (0, _react.useState)(false); // member, inviting
183
+
184
+ const [loading, setLoading] = (0, _react.useState)(false);
185
+ const [users, setUsers] = (0, _react.useState)([]);
186
+ const [rowCount, setRowCount] = (0, _react.useState)();
187
+ const [userCounts, setUserCounts] = (0, _react.useState)([]);
188
+ const durableKey = "members-".concat(teamDid);
189
+ const tableDurableData = (0, _Datatable.getDurableData)(durableKey);
190
+ const [search, setSearch] = (0, _react.useState)({
191
+ role: ROLE_ALL,
192
+ searchText: tableDurableData.searchText || '',
193
+ hideBlocked: false,
194
+ pageSize: tableDurableData.rowsPerPage || 10,
195
+ page: tableDurableData.page ? tableDurableData.page + 1 : 1
196
+ });
197
+ const sideList = (roles || []).map(x => ({
198
+ name: x.name,
199
+ title: x.title,
200
+ num: getCount(userCounts, x.name)
201
+ }));
202
+ sideList.unshift({
203
+ name: ROLE_ALL,
204
+ title: 'All Members',
205
+ num: getCount(userCounts, ROLE_ALL)
206
+ });
207
+ sideList.push({
208
+ name: ROLE_NONE,
209
+ title: 'Other',
210
+ num: getCount(userCounts, ROLE_NONE)
211
+ });
212
+
213
+ const getUsers = () => {
214
+ const query = {};
215
+
216
+ if (search.hideBlocked) {
217
+ query.approved = true;
218
+ }
219
+
220
+ query.role = search.role;
221
+
222
+ if (search.searchText) {
223
+ query.search = search.searchText;
224
+ }
225
+
226
+ setLoading(true);
227
+ api.getUsers({
228
+ query,
229
+ paging: {
230
+ page: search.page,
231
+ pageSize: search.pageSize
232
+ }
233
+ }).then(res => {
234
+ setLoading(false);
235
+ (res.users || []).forEach(x => {
236
+ x.isFromExternal = isFromExternal(x, teamIssuerDid);
237
+ x.avatar = (0, _util2.parseAvatar)(x.avatar, teamDid, inService);
238
+ });
239
+ setUsers(res.users || []);
240
+ setRowCount(res.paging.total);
241
+ }).catch(err => {
242
+ setLoading(false);
243
+
244
+ _toast.default.error(err.message);
245
+ });
246
+ };
247
+
248
+ (0, _react.useEffect)(() => {
249
+ getUsers();
250
+ }, ["".concat(search.hideBlocked, "-").concat(search.role, "-").concat(search.page, "-").concat(search.pageSize, "-").concat(search.searchText)]); //eslint-disable-line
251
+ // user counts
252
+
253
+ (0, _react.useEffect)(() => {
254
+ api.getUsersCountPerRole().then(res => {
255
+ setUserCounts(res.counts || []);
256
+ }).catch(err => {
257
+ _toast.default.error(err.message);
258
+ });
259
+ }, []); //eslint-disable-line
260
+
261
+ useSubscription(_constant.EVENTS.USER_UPDATED, data => {
262
+ if (data.teamDid === teamDid) {
263
+ getUsers();
264
+ }
265
+ }, [search]);
266
+ const isInvitationEnabled = enablePassportIssuance;
267
+ const columns = [{
268
+ label: t('common.name'),
269
+ name: 'fullName',
270
+ options: {
271
+ customBodyRenderLite: rawIndex => {
272
+ const x = users[rawIndex];
273
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
274
+ "data-cy": "member-name-".concat(x.fullName),
275
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(SimpleInfo, {
276
+ user: x
277
+ })
278
+ }, x.did);
279
+ }
280
+ }
281
+ }, {
282
+ label: t('common.address'),
283
+ name: 'did',
284
+ options: {
285
+ customBodyRender: e => {
286
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Address.default, {
287
+ size: 14,
288
+ copyable: false,
289
+ children: e
290
+ });
291
+ }
292
+ }
293
+ }, {
294
+ label: t('team.member.lastLogin'),
295
+ name: 'lastLoginAt',
296
+ options: {
297
+ customBodyRender: e => {
298
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_RelativeTime.default, {
299
+ value: e,
300
+ locale: locale
301
+ });
302
+ }
303
+ }
304
+ }, {
305
+ label: t('common.actions'),
306
+ name: '',
307
+ width: 100,
308
+ align: 'center',
309
+ verticalKeyAlign: 'center',
310
+ options: {
311
+ customBodyRenderLite: rawIndex => {
312
+ const x = users[rawIndex];
313
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_permission.default, {
314
+ permission: inService ? '' : 'mutate_team',
315
+ role: inService ? _util.BlockletAdminRoles : [],
316
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_actions.default, {
317
+ user: x,
318
+ onIssuePassport: () => setMemberDialog(_objectSpread(_objectSpread({}, x), {}, {
319
+ initTab: 'issuances'
320
+ }))
321
+ })
322
+ });
323
+ }
324
+ }
325
+ }];
326
+ const customButtons = [];
327
+
328
+ if (isInvitationEnabled) {
329
+ customButtons.push( /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
330
+ variant: "outlined",
331
+ style: {
332
+ flexShrink: 0,
333
+ marginRight: 16
334
+ },
335
+ color: "primary",
336
+ size: "small",
337
+ onClick: () => {
338
+ setShowInviting(true);
339
+ },
340
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_PersonIcon.default, {
341
+ style: {
342
+ height: '1em',
343
+ marginRight: 4
344
+ }
345
+ }), t('common.inviting'), invitations.length ? " (".concat(invitations.length, ")") : '']
346
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_permission.default, {
347
+ permission: inService ? '' : 'mutate_team',
348
+ role: inService ? _util.BlockletAdminRoles : [],
349
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
350
+ style: {
351
+ flexShrink: 0,
352
+ marginRight: 16
353
+ },
354
+ variant: "contained",
355
+ edge: "end",
356
+ color: "primary",
357
+ size: "small",
358
+ "data-cy": "invite-member",
359
+ onClick: () => setShowInviteMember(true),
360
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Add.default, {
361
+ style: {
362
+ fontSize: '1.3em',
363
+ marginRight: 4
364
+ }
365
+ }), t('team.invite')]
366
+ })
367
+ }));
368
+
369
+ if (type === 'server') {
370
+ customButtons.push( /*#__PURE__*/(0, _jsxRuntime.jsx)(_permission.default, {
371
+ role: "owner",
372
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
373
+ style: {
374
+ flexShrink: 0
375
+ },
376
+ variant: "contained",
377
+ edge: "end",
378
+ color: "error",
379
+ size: "small",
380
+ "data-cy": "invite-member",
381
+ onClick: () => setShowTransferMember(true),
382
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Loop.default, {
383
+ style: {
384
+ fontSize: '1.3em',
385
+ marginRight: 4
386
+ }
387
+ }), t('team.transferNode.name')]
388
+ })
389
+ }));
390
+ }
391
+ }
392
+
393
+ const onRoleChange = role => {
394
+ if (loading) {
395
+ return;
396
+ }
397
+
398
+ setSearch(x => _objectSpread(_objectSpread({}, x), {}, {
399
+ role,
400
+ hideBlocked: false,
401
+ searchText: '',
402
+ page: 1
403
+ }));
404
+ };
405
+
406
+ const onHideBlockedChange = value => {
407
+ setSearch(x => _objectSpread(_objectSpread({}, x), {}, {
408
+ hideBlocked: value,
409
+ page: 1
410
+ }));
411
+ };
412
+
413
+ const onTableChange = _ref3 => {
414
+ let {
415
+ page,
416
+ rowsPerPage,
417
+ searchText
418
+ } = _ref3;
419
+
420
+ if (search.pageSize !== rowsPerPage) {
421
+ setSearch(x => _objectSpread(_objectSpread({}, x), {}, {
422
+ pageSize: rowsPerPage,
423
+ page: 1
424
+ }));
425
+ } else if (search.page !== page + 1) {
426
+ setSearch(x => _objectSpread(_objectSpread({}, x), {}, {
427
+ page: page + 1
428
+ }));
429
+ } else if (search.searchText !== searchText) {
430
+ setSearch(x => _objectSpread(_objectSpread({}, x), {}, {
431
+ searchText,
432
+ page: 1
433
+ }));
434
+ }
435
+ };
436
+
437
+ const tableOptions = {
438
+ sort: false,
439
+ download: false,
440
+ filter: false,
441
+ print: false,
442
+ expandableRowsOnClick: true,
443
+
444
+ onRowClick(e, _ref4) {
445
+ let {
446
+ dataIndex
447
+ } = _ref4;
448
+ const x = users[dataIndex];
449
+ setMemberDialog(x);
450
+ },
451
+
452
+ page: search.page - 1,
453
+ rowsPerPage: search.pageSize,
454
+ count: rowCount,
455
+ searchDebounceTime: 600
456
+ };
457
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Div, {
458
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
459
+ className: "main",
460
+ display: "flex",
461
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
462
+ className: "left",
463
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
464
+ className: "tabs",
465
+ children: sideList.map(x => /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
466
+ className: "tab ".concat(search.role === x.name ? 'active' : ''),
467
+ onClick: () => onRoleChange(x.name),
468
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
469
+ className: "text",
470
+ children: x.title
471
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
472
+ className: (0, _classnames.default)('badge', {
473
+ 'is-rect': x.num > 999
474
+ }),
475
+ children: x.num
476
+ })]
477
+ }, x.name))
478
+ })
479
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
480
+ className: "right",
481
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Datatable.default, {
482
+ className: "main-table",
483
+ verticalKeyWidth: 100,
484
+ locale: locale,
485
+ durable: durableKey,
486
+ durableKeys: ['page', 'rowsPerPage'],
487
+ title: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
488
+ className: "table-toolbar-left",
489
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_FormControlLabel.default, {
490
+ control: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Checkbox.default, {
491
+ disabled: loading,
492
+ color: "primary",
493
+ checked: search.hideBlocked,
494
+ onChange: e => onHideBlockedChange(e.target.checked)
495
+ }),
496
+ label: t('team.member.hideBlockedMember')
497
+ })
498
+ }),
499
+ data: users,
500
+ columns: columns,
501
+ customButtons: customButtons,
502
+ options: tableOptions,
503
+ loading: loading,
504
+ onChange: onTableChange
505
+ })
506
+ })]
507
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dialog.default, {
508
+ title: t('common.inviting'),
509
+ onClose: () => setShowInviting(false),
510
+ open: showInviting,
511
+ maxWidth: "lg",
512
+ fullWidth: true,
513
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_invitations.default, {})
514
+ }), memberDialog && /*#__PURE__*/(0, _jsxRuntime.jsx)(_member.default, {
515
+ onCancel: () => setMemberDialog(null),
516
+ userDid: memberDialog.did,
517
+ initTab: memberDialog.initTab
518
+ }), showInviteMember && /*#__PURE__*/(0, _jsxRuntime.jsx)(_inviteMember.default, {
519
+ teamDid: teamDid,
520
+ endpoint: endpoint,
521
+ roles: roles,
522
+ onCancel: () => setShowInviteMember(false),
523
+ onSuccess: () => {
524
+ refresh();
525
+ setShowInviteMember(false);
526
+ }
527
+ }), showTransferMember && /*#__PURE__*/(0, _jsxRuntime.jsx)(_transferNode.default, {
528
+ teamDid: teamDid,
529
+ endpoint: endpoint,
530
+ roles: roles,
531
+ onCancel: () => setShowTransferMember(false),
532
+ onSuccess: () => {
533
+ refresh();
534
+ setShowTransferMember(false);
535
+ }
536
+ })]
537
+ });
538
+ }
539
+
540
+ const Div = _styled.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .main {\n .left {\n width: 168px;\n flex-shrink: 0;\n margin-right: 65px;\n .tabs {\n padding-top: 16px;\n .tab {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 16px;\n transition: background 0.4s;\n\n width: 168px;\n height: 36px;\n border-radius: 8px;\n\n cursor: pointer;\n user-select: none;\n\n &:nth-child(n + 2) {\n margin-top: 24px;\n }\n\n &.active {\n background: #f2f2f2;\n }\n\n &:hover {\n background: #f2f2f2;\n }\n\n .text {\n font-weight: 400;\n font-size: 16px;\n line-height: 19px;\n\n color: #222222;\n }\n\n .badge {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 20px;\n height: 20px;\n border-radius: 100%;\n color: #fff;\n background: #666666;\n font-size: 10px;\n font-weight: 400;\n &.is-rect {\n width: auto;\n border-radius: 8px;\n padding: 0 4px;\n }\n }\n }\n }\n @media (max-width: ", "px) {\n display: none;\n }\n }\n .right {\n flex-grow: 1;\n }\n }\n\n .member-block {\n display: flex;\n justify-content: flex-start;\n align-items: center;\n .member-avatar {\n position: relative;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .member-text {\n margin-left: 10px;\n }\n .badge-block {\n width: 14px;\n height: 14px;\n position: absolute;\n right: -4px;\n top: -4px;\n background: #ff5757;\n border-radius: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n &::after {\n content: '';\n width: 6px;\n height: 2px;\n background: #fefefe;\n }\n }\n }\n\n .table-toolbar-left {\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 7px 0;\n label span:first-child {\n display: flex;\n }\n }\n"])), props => props.theme.breakpoints.values.md);
541
+
542
+ MemberList.propTypes = {
543
+ type: _propTypes.default.oneOf(['server', 'blocklet']).isRequired
544
+ };