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