@abtnode/ux 1.15.17 → 1.16.0-beta-b16cb035

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 (154) hide show
  1. package/lib/actions.js +111 -0
  2. package/lib/blocklet/access/config-access.js +303 -0
  3. package/lib/blocklet/access/index.js +221 -0
  4. package/lib/blocklet/actions.js +438 -0
  5. package/lib/blocklet/add-cert.js +191 -0
  6. package/lib/blocklet/agreement-app.js +30 -0
  7. package/lib/blocklet/agreement.js +72 -0
  8. package/lib/blocklet/app-avatar.js +74 -0
  9. package/lib/blocklet/audit-logs.js +197 -0
  10. package/lib/blocklet/blocklet-source.js +56 -0
  11. package/lib/blocklet/bundle-avatar.js +80 -0
  12. package/lib/blocklet/component/add.js +1063 -0
  13. package/lib/blocklet/component/configuration.js +124 -0
  14. package/lib/blocklet/component/delete.js +117 -0
  15. package/lib/blocklet/component/environment.js +289 -0
  16. package/lib/blocklet/component/expiration.js +53 -0
  17. package/lib/blocklet/component/index.js +804 -0
  18. package/lib/blocklet/component/line.js +28 -0
  19. package/lib/blocklet/component/navigation/locale-tabs.js +218 -0
  20. package/lib/blocklet/component/navigation/navigation-actions.js +120 -0
  21. package/lib/blocklet/component/navigation/navigation-dialog.js +620 -0
  22. package/lib/blocklet/component/navigation/navigation-preview.js +102 -0
  23. package/lib/blocklet/component/navigation/simple-select.js +131 -0
  24. package/lib/blocklet/component/select-store.js +153 -0
  25. package/lib/blocklet/component/setting.js +151 -0
  26. package/lib/blocklet/component/sortable-tree.js +138 -0
  27. package/lib/blocklet/component/space-gateway-selector.js +174 -0
  28. package/lib/blocklet/component/store-blocklet-list.js +205 -0
  29. package/lib/blocklet/config-navigation.js +344 -0
  30. package/lib/blocklet/configuration.js +574 -0
  31. package/lib/blocklet/disk-info.js +91 -0
  32. package/lib/blocklet/icons.js +26 -0
  33. package/lib/blocklet/install-from-url.js +347 -0
  34. package/lib/blocklet/log.js +62 -0
  35. package/lib/blocklet/migration.js +153 -0
  36. package/lib/blocklet/mode.js +35 -0
  37. package/lib/blocklet/monitor.js +186 -0
  38. package/lib/blocklet/overview.js +236 -0
  39. package/lib/blocklet/preferences/app-sk.js +131 -0
  40. package/lib/blocklet/preferences/index.js +238 -0
  41. package/lib/blocklet/preferences/wallet-type.js +107 -0
  42. package/lib/blocklet/purchase/common.js +103 -0
  43. package/lib/blocklet/purchase/component-purchase.js +253 -0
  44. package/lib/blocklet/purchase/index.js +13 -0
  45. package/lib/blocklet/router/action/add-domain-alias.js +173 -0
  46. package/lib/blocklet/router/action/add-rule.js +204 -0
  47. package/lib/blocklet/router/action/config-routing-rule.js +129 -0
  48. package/lib/blocklet/router/action/delete-domain-alias.js +107 -0
  49. package/lib/blocklet/router/action/delete-rule.js +114 -0
  50. package/lib/blocklet/router/action/update-rule.js +203 -0
  51. package/lib/blocklet/router/domain-actions.js +71 -0
  52. package/lib/blocklet/router/domain-status.js +96 -0
  53. package/lib/blocklet/router/rule-actions.js +77 -0
  54. package/lib/blocklet/router/rule-list.js +181 -0
  55. package/lib/blocklet/router/util.js +146 -0
  56. package/lib/blocklet/runtime-info.js +87 -0
  57. package/lib/blocklet/status.js +105 -0
  58. package/lib/blocklet/storage.js +322 -0
  59. package/lib/blocklet/types.js +25 -0
  60. package/lib/blocklet/util.js +213 -0
  61. package/lib/blocklet/version.js +156 -0
  62. package/lib/card-selector.js +109 -0
  63. package/lib/certificate.js +110 -0
  64. package/lib/click-to-copy.js +38 -0
  65. package/lib/confirm.js +149 -0
  66. package/lib/contexts/audit-log.js +141 -0
  67. package/lib/contexts/blocklet.js +19 -0
  68. package/lib/contexts/deleting-blocklets.js +78 -0
  69. package/lib/contexts/node.js +30 -0
  70. package/lib/contexts/session.js +20 -0
  71. package/lib/contexts/team.js +19 -0
  72. package/lib/delete-confirm.js +127 -0
  73. package/lib/did-address.js +77 -0
  74. package/lib/dot.js +18 -0
  75. package/lib/form/form-text-input.js +266 -0
  76. package/lib/form/form-wrapper.js +13 -0
  77. package/lib/form/required.js +13 -0
  78. package/lib/hooks/blocklet.js +231 -0
  79. package/lib/hooks/mobile-width.js +19 -0
  80. package/lib/hooks/url-evaluation.js +168 -0
  81. package/lib/hooks/use-app-logo.js +25 -0
  82. package/lib/hooks/use-bundle-logo.js +36 -0
  83. package/lib/hooks/use-navigation.js +355 -0
  84. package/lib/hooks/use-passport-id.js +21 -0
  85. package/lib/hooks/use-subscription.js +28 -0
  86. package/lib/icons/long-arrow.svg +5 -0
  87. package/lib/index.js +0 -3
  88. package/lib/invitation/invitation-app.js +51 -0
  89. package/lib/invitation/invitation-login.js +47 -0
  90. package/lib/invitation/invitation-passport.js +130 -0
  91. package/lib/invitation/invitation-receive.js +108 -0
  92. package/lib/invitation/invitation-success.js +82 -0
  93. package/lib/invitation/invitation-user.js +79 -0
  94. package/lib/invitation/invitation.js +80 -0
  95. package/lib/issue-passport.js +84 -84
  96. package/lib/launch-blocklet/content-layout.js +33 -0
  97. package/lib/launch-blocklet/page-header.js +38 -0
  98. package/lib/layout/addon.js +100 -0
  99. package/lib/layout/feedback.js +55 -0
  100. package/lib/locales/en.js +1221 -10
  101. package/lib/locales/index.js +3 -4
  102. package/lib/locales/zh.js +1232 -15
  103. package/lib/logs/clock.js +19 -0
  104. package/lib/logs/download.js +139 -0
  105. package/lib/logs/log-terminal.js +183 -0
  106. package/lib/lost-passport.js +191 -195
  107. package/lib/monitor/card.js +73 -0
  108. package/lib/monitor/cpu.js +109 -0
  109. package/lib/monitor/disk.js +122 -0
  110. package/lib/monitor/memory.js +144 -0
  111. package/lib/nav-logo.js +120 -0
  112. package/lib/passport-tag.js +43 -0
  113. package/lib/permission.js +70 -0
  114. package/lib/relative-time.js +61 -0
  115. package/lib/schema-form/color-input.js +105 -0
  116. package/lib/schema-form/common-prop-types.js +21 -0
  117. package/lib/schema-form/index.js +229 -0
  118. package/lib/schema-form/passport-input.js +66 -0
  119. package/lib/schema-form/text-input.js +72 -0
  120. package/lib/store/add.js +185 -0
  121. package/lib/store/delete.js +102 -0
  122. package/lib/store/item.js +84 -0
  123. package/lib/table-icons.js +42 -0
  124. package/lib/table.js +13 -0
  125. package/lib/tag.js +37 -0
  126. package/lib/team/members/actions.js +99 -0
  127. package/lib/team/members/index.js +503 -0
  128. package/lib/team/members/invitations.js +196 -0
  129. package/lib/team/members/invite-member.js +212 -0
  130. package/lib/team/members/issue-passport.js +155 -0
  131. package/lib/team/members/member.js +300 -0
  132. package/lib/team/members/passport-issuances.js +154 -0
  133. package/lib/team/members/passports.js +336 -0
  134. package/lib/team/members/toggle-user-approval.js +128 -0
  135. package/lib/team/members/transfer-node.js +262 -0
  136. package/lib/team/members/util.js +20 -0
  137. package/lib/team/passports/color.js +132 -0
  138. package/lib/team/passports/detail.js +271 -0
  139. package/lib/team/passports/index.js +233 -0
  140. package/lib/team/passports/mutate-role.js +204 -0
  141. package/lib/team/passports/trusted-issuer.js +297 -0
  142. package/lib/team/passports/trusted-issuers.js +240 -0
  143. package/lib/team/search-input.js +38 -0
  144. package/lib/team/styles/dialog.js +13 -0
  145. package/lib/team/styles/list-header.js +13 -0
  146. package/lib/toast.js +86 -0
  147. package/lib/util/api.js +21 -0
  148. package/lib/util/constants.js +10 -0
  149. package/lib/util/index.js +703 -0
  150. package/lib/util/locales.js +28 -0
  151. package/lib/util/mode.js +11 -0
  152. package/lib/who-can-access/config.js +46 -0
  153. package/lib/wrap-locale.js +12 -13
  154. package/package.json +69 -17
@@ -0,0 +1,503 @@
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 _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+ var _classnames = _interopRequireDefault(require("classnames"));
12
+ var _Dialog = _interopRequireDefault(require("@arcblock/ux/lib/Dialog"));
13
+ var _Tooltip = _interopRequireDefault(require("@mui/material/Tooltip"));
14
+ var _Box = _interopRequireDefault(require("@mui/material/Box"));
15
+ var _FormControlLabel = _interopRequireDefault(require("@mui/material/FormControlLabel"));
16
+ var _Checkbox = _interopRequireDefault(require("@mui/material/Checkbox"));
17
+ var _Add = _interopRequireDefault(require("@mui/icons-material/Add"));
18
+ var _Loop = _interopRequireDefault(require("@mui/icons-material/Loop"));
19
+ var _Address = _interopRequireDefault(require("@arcblock/did-connect/lib/Address"));
20
+ var _Avatar = _interopRequireDefault(require("@arcblock/did-connect/lib/Avatar"));
21
+ var _context = require("@arcblock/ux/lib/Locale/context");
22
+ var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
23
+ var _PersonIcon = _interopRequireDefault(require("@arcblock/icons/lib/PersonIcon"));
24
+ var _ExternalIssuerIcon = _interopRequireDefault(require("@arcblock/icons/lib/ExternalIssuerIcon"));
25
+ var _Datatable = _interopRequireWildcard(require("@arcblock/ux/lib/Datatable"));
26
+ var _RelativeTime = _interopRequireDefault(require("@arcblock/ux/lib/RelativeTime"));
27
+ var _constant = require("@abtnode/constant");
28
+ var _toast = _interopRequireDefault(require("../../toast"));
29
+ var _node = require("../../contexts/node");
30
+ var _team = require("../../contexts/team");
31
+ var _blocklet = require("../../contexts/blocklet");
32
+ var _permission = _interopRequireDefault(require("../../permission"));
33
+ var _util = require("../../util");
34
+ var _inviteMember = _interopRequireDefault(require("./invite-member"));
35
+ var _transferNode = _interopRequireDefault(require("./transfer-node"));
36
+ var _member = _interopRequireDefault(require("./member"));
37
+ var _invitations = _interopRequireDefault(require("./invitations"));
38
+ var _actions = _interopRequireDefault(require("./actions"));
39
+ var _util2 = require("./util");
40
+ var _jsxRuntime = require("react/jsx-runtime");
41
+ var _templateObject;
42
+ 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); }
43
+ 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; }
44
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
45
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
46
+ 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; }
47
+ 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; }
48
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
49
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
50
+ function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
51
+ const ROLE_ALL = '$all';
52
+ const ROLE_NONE = '$none';
53
+ const getCount = (counts, name) => {
54
+ const item = counts.find(x => x.key === name);
55
+ return (item === null || item === void 0 ? void 0 : item.value) || 0;
56
+ };
57
+ const isFromExternal = (user, appIdList) => {
58
+ const list = user.passports || [];
59
+ if (!list.length) {
60
+ return false;
61
+ }
62
+ return !list.some(z => {
63
+ var _z$issuer;
64
+ return appIdList.includes((_z$issuer = z.issuer) === null || _z$issuer === void 0 ? void 0 : _z$issuer.id);
65
+ });
66
+ };
67
+ function SimpleInfo(_ref) {
68
+ let {
69
+ user
70
+ } = _ref;
71
+ const {
72
+ t
73
+ } = (0, _react.useContext)(_context.LocaleContext);
74
+ const main = /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
75
+ className: "member-block",
76
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
77
+ className: "member-avatar",
78
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Avatar.default, {
79
+ src: user.avatar,
80
+ size: 24,
81
+ did: user.did,
82
+ shape: "circle",
83
+ style: {
84
+ borderRadius: '100%',
85
+ overflow: 'hidden'
86
+ }
87
+ }), !user.approved && /*#__PURE__*/(0, _jsxRuntime.jsx)("did", {
88
+ className: "badge-block"
89
+ }), user.isFromExternal && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tooltip.default, {
90
+ title: t('team.passport.externalPassport'),
91
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
92
+ ml: 1,
93
+ className: "icon",
94
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ExternalIssuerIcon.default, {})
95
+ })
96
+ })]
97
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
98
+ className: "member-text",
99
+ children: user.fullName
100
+ })]
101
+ });
102
+ return user.approved ? main : /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
103
+ display: "flex",
104
+ alignItems: "center",
105
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tooltip.default, {
106
+ title: t('team.member.forbidLoginDescription'),
107
+ children: main
108
+ })
109
+ });
110
+ }
111
+ SimpleInfo.propTypes = {
112
+ user: _propTypes.default.object.isRequired
113
+ };
114
+ function MemberList(_ref2) {
115
+ let {
116
+ type
117
+ } = _ref2;
118
+ const {
119
+ appIdList = []
120
+ } = (0, _blocklet.useBlockletContext)();
121
+ const {
122
+ teamDid,
123
+ invitations,
124
+ teamIssuerDid,
125
+ roles,
126
+ refresh,
127
+ enablePassportIssuance,
128
+ endpoint,
129
+ api
130
+ } = (0, _team.useTeamContext)();
131
+ const {
132
+ inService,
133
+ ws: {
134
+ useSubscription
135
+ }
136
+ } = (0, _node.useNodeContext)();
137
+ const {
138
+ t,
139
+ locale
140
+ } = (0, _react.useContext)(_context.LocaleContext);
141
+ const [showInviteMember, setShowInviteMember] = (0, _react.useState)(false);
142
+ const [showTransferMember, setShowTransferMember] = (0, _react.useState)(false);
143
+ const [showInviting, setShowInviting] = (0, _react.useState)(false);
144
+ const [memberDialog, setMemberDialog] = (0, _react.useState)(false); // member, inviting
145
+ const [loading, setLoading] = (0, _react.useState)(false);
146
+ const [users, setUsers] = (0, _react.useState)([]);
147
+ const [rowCount, setRowCount] = (0, _react.useState)();
148
+ const [userCounts, setUserCounts] = (0, _react.useState)([]);
149
+ const durableKey = "members-".concat(teamDid);
150
+ const tableDurableData = (0, _Datatable.getDurableData)(durableKey);
151
+ const [search, setSearch] = (0, _react.useState)({
152
+ role: ROLE_ALL,
153
+ searchText: tableDurableData.searchText || '',
154
+ hideBlocked: false,
155
+ pageSize: tableDurableData.rowsPerPage || 10,
156
+ page: tableDurableData.page ? tableDurableData.page + 1 : 1
157
+ });
158
+ const sideList = (roles || []).map(x => ({
159
+ name: x.name,
160
+ title: x.title,
161
+ num: getCount(userCounts, x.name)
162
+ }));
163
+ sideList.unshift({
164
+ name: ROLE_ALL,
165
+ title: 'All Members',
166
+ num: getCount(userCounts, ROLE_ALL)
167
+ });
168
+ sideList.push({
169
+ name: ROLE_NONE,
170
+ title: 'Other',
171
+ num: getCount(userCounts, ROLE_NONE)
172
+ });
173
+ const getUsers = () => {
174
+ const query = {};
175
+ if (search.hideBlocked) {
176
+ query.approved = true;
177
+ }
178
+ query.role = search.role;
179
+ if (search.searchText) {
180
+ query.search = search.searchText;
181
+ }
182
+ setLoading(true);
183
+ api.getUsers({
184
+ query,
185
+ paging: {
186
+ page: search.page,
187
+ pageSize: search.pageSize
188
+ }
189
+ }).then(res => {
190
+ setLoading(false);
191
+ (res.users || []).forEach(x => {
192
+ x.isFromExternal = isFromExternal(x, (0, _isEmpty.default)(appIdList) ? [teamIssuerDid] : appIdList);
193
+ x.avatar = (0, _util2.parseAvatar)(x.avatar, teamDid, inService);
194
+
195
+ // for backwards compatibility
196
+ x.passports = (x.passports || []).filter(y => y.issuer);
197
+ });
198
+ setUsers(res.users || []);
199
+ setRowCount(res.paging.total);
200
+ }).catch(err => {
201
+ setLoading(false);
202
+ _toast.default.error(err.message);
203
+ });
204
+ };
205
+ const getUserCounts = () => {
206
+ api.getUsersCountPerRole().then(res => {
207
+ setUserCounts(res.counts || []);
208
+ }).catch(err => {
209
+ _toast.default.error(err.message);
210
+ });
211
+ };
212
+ const handleUserChange = data => {
213
+ if (data.teamDid === teamDid) {
214
+ getUsers();
215
+ getUserCounts();
216
+ }
217
+ };
218
+ (0, _react.useEffect)(() => {
219
+ getUsers();
220
+ }, ["".concat(search.hideBlocked, "-").concat(search.role, "-").concat(search.page, "-").concat(search.pageSize, "-").concat(search.searchText)]); //eslint-disable-line
221
+
222
+ // user counts
223
+ (0, _react.useEffect)(() => {
224
+ getUserCounts();
225
+ }, []); //eslint-disable-line
226
+
227
+ useSubscription(_constant.EVENTS.USER_UPDATED, handleUserChange, [search]);
228
+ useSubscription(_constant.EVENTS.USER_ADDED, handleUserChange, [search]);
229
+ const isInvitationEnabled = enablePassportIssuance;
230
+ const columns = [{
231
+ label: t('common.name'),
232
+ name: 'fullName',
233
+ options: {
234
+ customBodyRenderLite: rawIndex => {
235
+ const x = users[rawIndex];
236
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
237
+ "data-cy": "member-name-".concat(x.fullName),
238
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(SimpleInfo, {
239
+ user: x
240
+ })
241
+ }, x.did);
242
+ }
243
+ }
244
+ }, {
245
+ label: t('common.address'),
246
+ name: 'did',
247
+ options: {
248
+ customBodyRender: e => {
249
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Address.default, {
250
+ size: 14,
251
+ copyable: false,
252
+ children: e
253
+ });
254
+ }
255
+ }
256
+ }, {
257
+ label: t('team.member.lastLogin'),
258
+ name: 'lastLoginAt',
259
+ options: {
260
+ customBodyRender: e => {
261
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_RelativeTime.default, {
262
+ value: e,
263
+ locale: locale
264
+ });
265
+ }
266
+ }
267
+ }, {
268
+ label: t('team.member.lastLoginIp'),
269
+ name: 'lastLoginIp',
270
+ options: {
271
+ customBodyRender: e => {
272
+ return e || '-';
273
+ }
274
+ }
275
+ }, {
276
+ label: t('common.actions'),
277
+ name: '',
278
+ width: 100,
279
+ align: 'center',
280
+ verticalKeyAlign: 'center',
281
+ options: {
282
+ customBodyRenderLite: rawIndex => {
283
+ const x = users[rawIndex];
284
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_permission.default, {
285
+ permission: inService ? '' : 'mutate_team',
286
+ role: inService ? _util.BlockletAdminRoles : [],
287
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_actions.default, {
288
+ user: x,
289
+ onIssuePassport: () => setMemberDialog(_objectSpread(_objectSpread({}, x), {}, {
290
+ initTab: 'issuances'
291
+ }))
292
+ })
293
+ });
294
+ }
295
+ }
296
+ }];
297
+ const customButtons = [];
298
+ if (isInvitationEnabled) {
299
+ customButtons.push( /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
300
+ variant: "outlined",
301
+ style: {
302
+ flexShrink: 0,
303
+ marginRight: 16
304
+ },
305
+ color: "primary",
306
+ size: "small",
307
+ onClick: () => {
308
+ setShowInviting(true);
309
+ },
310
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_PersonIcon.default, {
311
+ style: {
312
+ height: '1em',
313
+ marginRight: 4
314
+ }
315
+ }), t('common.inviting'), invitations.length ? " (".concat(invitations.length, ")") : '']
316
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_permission.default, {
317
+ permission: inService ? '' : 'mutate_team',
318
+ role: inService ? _util.BlockletAdminRoles : [],
319
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
320
+ style: {
321
+ flexShrink: 0,
322
+ marginRight: 16
323
+ },
324
+ variant: "contained",
325
+ edge: "end",
326
+ color: "primary",
327
+ size: "small",
328
+ "data-cy": "invite-member",
329
+ onClick: () => setShowInviteMember(true),
330
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Add.default, {
331
+ style: {
332
+ fontSize: '1.3em',
333
+ marginRight: 4
334
+ }
335
+ }), t('team.invite')]
336
+ })
337
+ }));
338
+ if (type === 'server') {
339
+ customButtons.push( /*#__PURE__*/(0, _jsxRuntime.jsx)(_permission.default, {
340
+ role: "owner",
341
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
342
+ style: {
343
+ flexShrink: 0
344
+ },
345
+ variant: "contained",
346
+ edge: "end",
347
+ color: "error",
348
+ size: "small",
349
+ "data-cy": "invite-member",
350
+ onClick: () => setShowTransferMember(true),
351
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Loop.default, {
352
+ style: {
353
+ fontSize: '1.3em',
354
+ marginRight: 4
355
+ }
356
+ }), t('team.transferNode.name')]
357
+ })
358
+ }));
359
+ }
360
+ }
361
+ const onRoleChange = role => {
362
+ if (loading) {
363
+ return;
364
+ }
365
+ setSearch(x => _objectSpread(_objectSpread({}, x), {}, {
366
+ role,
367
+ hideBlocked: false,
368
+ searchText: '',
369
+ page: 1
370
+ }));
371
+ };
372
+ const onHideBlockedChange = value => {
373
+ setSearch(x => _objectSpread(_objectSpread({}, x), {}, {
374
+ hideBlocked: value,
375
+ page: 1
376
+ }));
377
+ };
378
+ const onTableChange = _ref3 => {
379
+ let {
380
+ page,
381
+ rowsPerPage,
382
+ searchText
383
+ } = _ref3;
384
+ if (search.pageSize !== rowsPerPage) {
385
+ setSearch(x => _objectSpread(_objectSpread({}, x), {}, {
386
+ pageSize: rowsPerPage,
387
+ page: 1
388
+ }));
389
+ } else if (search.page !== page + 1) {
390
+ setSearch(x => _objectSpread(_objectSpread({}, x), {}, {
391
+ page: page + 1
392
+ }));
393
+ } else if (search.searchText !== searchText) {
394
+ setSearch(x => _objectSpread(_objectSpread({}, x), {}, {
395
+ searchText,
396
+ page: 1
397
+ }));
398
+ }
399
+ };
400
+ const tableOptions = {
401
+ sort: false,
402
+ download: false,
403
+ filter: false,
404
+ print: false,
405
+ expandableRowsOnClick: true,
406
+ onRowClick(e, _ref4) {
407
+ let {
408
+ dataIndex
409
+ } = _ref4;
410
+ const x = users[dataIndex];
411
+ setMemberDialog(x);
412
+ },
413
+ page: search.page - 1,
414
+ rowsPerPage: search.pageSize,
415
+ count: rowCount,
416
+ searchDebounceTime: 600
417
+ };
418
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Div, {
419
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
420
+ className: "main",
421
+ display: "flex",
422
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
423
+ className: "left",
424
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
425
+ className: "tabs",
426
+ children: sideList.map(x => /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
427
+ className: "tab ".concat(search.role === x.name ? 'active' : ''),
428
+ onClick: () => onRoleChange(x.name),
429
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
430
+ className: "text",
431
+ children: x.title
432
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
433
+ className: (0, _classnames.default)('badge', {
434
+ 'is-rect': x.num > 999
435
+ }),
436
+ children: x.num
437
+ })]
438
+ }, x.name))
439
+ })
440
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
441
+ className: "right",
442
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Datatable.default, {
443
+ className: "main-table",
444
+ verticalKeyWidth: 100,
445
+ locale: locale,
446
+ durable: durableKey,
447
+ durableKeys: ['page', 'rowsPerPage'],
448
+ title: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
449
+ className: "table-toolbar-left",
450
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_FormControlLabel.default, {
451
+ control: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Checkbox.default, {
452
+ disabled: loading,
453
+ color: "primary",
454
+ checked: search.hideBlocked,
455
+ onChange: e => onHideBlockedChange(e.target.checked)
456
+ }),
457
+ label: t('team.member.hideBlockedMember')
458
+ })
459
+ }),
460
+ data: users,
461
+ columns: columns,
462
+ customButtons: customButtons,
463
+ options: tableOptions,
464
+ loading: loading,
465
+ onChange: onTableChange
466
+ })
467
+ })]
468
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dialog.default, {
469
+ title: t('common.inviting'),
470
+ onClose: () => setShowInviting(false),
471
+ open: showInviting,
472
+ maxWidth: "lg",
473
+ fullWidth: true,
474
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_invitations.default, {})
475
+ }), memberDialog && /*#__PURE__*/(0, _jsxRuntime.jsx)(_member.default, {
476
+ onCancel: () => setMemberDialog(null),
477
+ userDid: memberDialog.did,
478
+ initTab: memberDialog.initTab
479
+ }), showInviteMember && /*#__PURE__*/(0, _jsxRuntime.jsx)(_inviteMember.default, {
480
+ teamDid: teamDid,
481
+ endpoint: endpoint,
482
+ roles: roles,
483
+ onCancel: () => setShowInviteMember(false),
484
+ onSuccess: () => {
485
+ refresh();
486
+ setShowInviteMember(false);
487
+ }
488
+ }), showTransferMember && /*#__PURE__*/(0, _jsxRuntime.jsx)(_transferNode.default, {
489
+ teamDid: teamDid,
490
+ endpoint: endpoint,
491
+ roles: roles,
492
+ onCancel: () => setShowTransferMember(false),
493
+ onSuccess: () => {
494
+ refresh();
495
+ setShowTransferMember(false);
496
+ }
497
+ })]
498
+ });
499
+ }
500
+ 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);
501
+ MemberList.propTypes = {
502
+ type: _propTypes.default.oneOf(['server', 'blocklet']).isRequired
503
+ };
@@ -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 = {};