@abtnode/ux 1.15.17 → 1.16.0-beta-8ee536d7

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 +233 -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 +207 -192
  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 +71 -17
@@ -0,0 +1,212 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = InviteMember;
7
+ var _react = require("react");
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _styled = _interopRequireDefault(require("@emotion/styled"));
10
+ var _Dialog = _interopRequireDefault(require("@arcblock/ux/lib/Dialog"));
11
+ var _CircularProgress = _interopRequireDefault(require("@mui/material/CircularProgress"));
12
+ var _DialogContentText = _interopRequireDefault(require("@mui/material/DialogContentText"));
13
+ var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
14
+ var _MenuItem = _interopRequireDefault(require("@mui/material/MenuItem"));
15
+ var _Select = _interopRequireDefault(require("@mui/material/Select"));
16
+ var _TextField = _interopRequireDefault(require("@mui/material/TextField"));
17
+ var _InputLabel = _interopRequireDefault(require("@mui/material/InputLabel"));
18
+ var _FormControl = _interopRequireDefault(require("@mui/material/FormControl"));
19
+ var _context = require("@arcblock/ux/lib/Locale/context");
20
+ var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
21
+ var _Alert = _interopRequireDefault(require("@arcblock/ux/lib/Alert"));
22
+ var _clickToCopy = _interopRequireDefault(require("../../click-to-copy"));
23
+ var _node = require("../../contexts/node");
24
+ var _util = require("../../util");
25
+ var _jsxRuntime = require("react/jsx-runtime");
26
+ var _templateObject;
27
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
28
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
29
+ function InviteMember(_ref) {
30
+ let {
31
+ teamDid,
32
+ roles,
33
+ onCancel,
34
+ onSuccess,
35
+ onError,
36
+ endpoint
37
+ } = _ref;
38
+ const {
39
+ api
40
+ } = (0, _node.useNodeContext)();
41
+ const [loading, setLoading] = (0, _react.useState)(false);
42
+ const [error, setError] = (0, _react.useState)('');
43
+ const {
44
+ t
45
+ } = (0, _context.useLocaleContext)();
46
+ const [activeStep, setActiveStep] = (0, _react.useState)(0);
47
+ const [inviteInfo, setInviteInfo] = (0, _react.useState)('');
48
+ const [role, setRole] = (0, _react.useState)('');
49
+ const [remark, setRemark] = (0, _react.useState)('');
50
+ const onCreate = async () => {
51
+ if (!role) {
52
+ setError(t('team.member.error.passportEmpty'));
53
+ return;
54
+ }
55
+ const trimRemark = remark.trim();
56
+ setError(null);
57
+ setLoading(true);
58
+ try {
59
+ const {
60
+ inviteInfo: info
61
+ } = await api.createMemberInvitation({
62
+ input: {
63
+ teamDid,
64
+ role,
65
+ remark: trimRemark
66
+ }
67
+ });
68
+ setInviteInfo(info);
69
+ setActiveStep(1);
70
+ } catch (err) {
71
+ const errMsg = (0, _util.formatError)(err);
72
+ setError(errMsg);
73
+ onError(err);
74
+ } finally {
75
+ setLoading(false);
76
+ }
77
+ };
78
+ const steps = [{
79
+ body: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Typography.default, {
80
+ component: "div",
81
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_FormControl.default, {
82
+ style: {
83
+ width: '100%'
84
+ },
85
+ variant: "outlined",
86
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_InputLabel.default, {
87
+ children: t('common.passport')
88
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Select.default, {
89
+ "data-cy": "invite-member-select-role",
90
+ value: role,
91
+ onChange: e => {
92
+ setError(null);
93
+ setRole(e.target.value);
94
+ },
95
+ fullWidth: true,
96
+ label: t('common.passport'),
97
+ disabled: loading,
98
+ onKeyPress: e => {
99
+ if (e.key === 'Enter') {
100
+ e.preventDefault();
101
+ onCreate();
102
+ }
103
+ },
104
+ children: roles.filter(d => d.name !== 'owner').map(r => /*#__PURE__*/(0, _jsxRuntime.jsx)(_MenuItem.default, {
105
+ value: r.name,
106
+ "data-cy": "invite-member-select-option-".concat(r.name),
107
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
108
+ children: r.title || r.name
109
+ })
110
+ }, r.name))
111
+ })]
112
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
113
+ style: {
114
+ marginTop: 20,
115
+ marginBottom: 10
116
+ }
117
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
118
+ label: t('common.remark'),
119
+ autoComplete: "off",
120
+ variant: "outlined",
121
+ fullWidth: true,
122
+ style: {
123
+ marginBottom: 8
124
+ },
125
+ value: remark,
126
+ onChange: e => {
127
+ setError(null);
128
+ setRemark(e.target.value);
129
+ },
130
+ disabled: loading,
131
+ "data-cy": "invite-member-input-remark"
132
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
133
+ style: {
134
+ marginTop: 20,
135
+ marginBottom: 10
136
+ }
137
+ })]
138
+ }),
139
+ cancel: t('common.cancel'),
140
+ confirm: t('team.member.inviteDialog.createInviteLink'),
141
+ onCancel,
142
+ onConfirm: onCreate
143
+ }, {
144
+ // eslint-disable-next-line react/no-unstable-nested-components
145
+ body: () => {
146
+ const link = (0, _util.getInviteLink)({
147
+ inviteId: inviteInfo.inviteId,
148
+ endpoint
149
+ });
150
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
151
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(Bold, {
152
+ children: t('team.member.inviteDialog.createSuccessTip', {
153
+ expireDate: (0, _util.formatToDatetime)(inviteInfo.expireDate)
154
+ })
155
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
156
+ style: {
157
+ marginTop: '40px'
158
+ }
159
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_clickToCopy.default, {
160
+ children: link
161
+ })]
162
+ });
163
+ },
164
+ confirm: t('common.confirm'),
165
+ onConfirm: onSuccess
166
+ }];
167
+ const step = steps[activeStep];
168
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Dialog.default, {
169
+ title: t('common.invite'),
170
+ fullWidth: true,
171
+ open: true,
172
+ showCloseButton: false,
173
+ actions: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
174
+ children: [step.cancel && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
175
+ onClick: step.onCancel,
176
+ color: "inherit",
177
+ children: step.cancel
178
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
179
+ onClick: step.onConfirm,
180
+ color: "primary",
181
+ disabled: loading || !role,
182
+ variant: "contained",
183
+ autoFocus: true,
184
+ children: [loading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_CircularProgress.default, {
185
+ size: 16
186
+ }), step.confirm]
187
+ })]
188
+ }),
189
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_DialogContentText.default, {
190
+ component: "div",
191
+ children: typeof step.body === 'function' ? step.body() : step.body
192
+ }), !!error && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Alert.default, {
193
+ type: "error",
194
+ variant: "icon",
195
+ children: error
196
+ })]
197
+ });
198
+ }
199
+ InviteMember.propTypes = {
200
+ teamDid: _propTypes.default.string.isRequired,
201
+ onCancel: _propTypes.default.func.isRequired,
202
+ onSuccess: _propTypes.default.func.isRequired,
203
+ onError: _propTypes.default.func,
204
+ roles: _propTypes.default.array,
205
+ endpoint: _propTypes.default.string
206
+ };
207
+ InviteMember.defaultProps = {
208
+ onError: () => {},
209
+ roles: [],
210
+ endpoint: ''
211
+ };
212
+ const Bold = _styled.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n font-size: 16px;\n font-weight: bold;\n"])));
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = IssuePassport;
7
+ var _react = require("react");
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _Dialog = _interopRequireDefault(require("@arcblock/ux/lib/Dialog"));
10
+ var _CircularProgress = _interopRequireDefault(require("@mui/material/CircularProgress"));
11
+ var _DialogContentText = _interopRequireDefault(require("@mui/material/DialogContentText"));
12
+ var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
13
+ var _MenuItem = _interopRequireDefault(require("@mui/material/MenuItem"));
14
+ var _Select = _interopRequireDefault(require("@mui/material/Select"));
15
+ var _InputLabel = _interopRequireDefault(require("@mui/material/InputLabel"));
16
+ var _FormControl = _interopRequireDefault(require("@mui/material/FormControl"));
17
+ var _context = require("@arcblock/ux/lib/Locale/context");
18
+ var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
19
+ var _Alert = _interopRequireDefault(require("@arcblock/ux/lib/Alert"));
20
+ var _node = require("../../contexts/node");
21
+ var _util = require("../../util");
22
+ var _jsxRuntime = require("react/jsx-runtime");
23
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
+ function IssuePassport(_ref) {
25
+ let {
26
+ teamDid,
27
+ ownerDid,
28
+ roles,
29
+ onCancel,
30
+ onSuccess,
31
+ onError,
32
+ showOwnerPassport
33
+ } = _ref;
34
+ const {
35
+ api
36
+ } = (0, _node.useNodeContext)();
37
+ const [loading, setLoading] = (0, _react.useState)(false);
38
+ const [error, setError] = (0, _react.useState)('');
39
+ const {
40
+ t
41
+ } = (0, _context.useLocaleContext)();
42
+ const [role, setRole] = (0, _react.useState)('');
43
+ const onCreate = async () => {
44
+ if (!role) {
45
+ setError(t('team.member.error.passportEmpty'));
46
+ return;
47
+ }
48
+ setError(null);
49
+ setLoading(true);
50
+ try {
51
+ await api.createPassportIssuance({
52
+ input: {
53
+ teamDid,
54
+ name: role,
55
+ ownerDid
56
+ }
57
+ });
58
+ onSuccess();
59
+ } catch (err) {
60
+ const errMsg = (0, _util.formatError)(err);
61
+ setError(errMsg);
62
+ onError(err);
63
+ } finally {
64
+ setLoading(false);
65
+ }
66
+ };
67
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Dialog.default, {
68
+ title: t('team.passport.issue'),
69
+ fullWidth: true,
70
+ open: true,
71
+ onClick: e => e.stopPropagation(),
72
+ onClose: onCancel,
73
+ disableEscapeKeyDown: true,
74
+ PaperProps: {
75
+ style: {
76
+ minHeight: 'auto'
77
+ }
78
+ },
79
+ actions: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
80
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
81
+ onClick: onCancel,
82
+ color: "inherit",
83
+ size: "small",
84
+ children: t('common.cancel')
85
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
86
+ onClick: onCreate,
87
+ color: "primary",
88
+ size: "small",
89
+ disabled: loading || !role,
90
+ variant: "contained",
91
+ autoFocus: true,
92
+ "data-cy": "issue-passport-create-btn",
93
+ children: [loading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_CircularProgress.default, {
94
+ size: 16
95
+ }), t('team.passport.issuance.create.title')]
96
+ })]
97
+ }),
98
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_DialogContentText.default, {
99
+ component: "div",
100
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
101
+ component: "div",
102
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_FormControl.default, {
103
+ style: {
104
+ width: '100%'
105
+ },
106
+ variant: "outlined",
107
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_InputLabel.default, {
108
+ children: t('common.passport')
109
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Select.default, {
110
+ "data-cy": "issue-passport-select-passport",
111
+ value: role,
112
+ onChange: e => {
113
+ setError(null);
114
+ setRole(e.target.value);
115
+ },
116
+ fullWidth: true,
117
+ label: t('common.passport'),
118
+ disabled: loading,
119
+ onKeyPress: e => {
120
+ if (e.key === 'Enter') {
121
+ e.preventDefault();
122
+ onCreate();
123
+ }
124
+ },
125
+ children: roles.filter(d => showOwnerPassport || d.name !== 'owner').map(r => /*#__PURE__*/(0, _jsxRuntime.jsx)(_MenuItem.default, {
126
+ value: r.name,
127
+ "data-cy": "issue-passport-select-option-".concat(r.name),
128
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
129
+ children: r.title || r.name
130
+ })
131
+ }, r.name))
132
+ })]
133
+ })
134
+ })
135
+ }), !!error && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Alert.default, {
136
+ type: "error",
137
+ variant: "icon",
138
+ children: error
139
+ })]
140
+ });
141
+ }
142
+ IssuePassport.propTypes = {
143
+ teamDid: _propTypes.default.string.isRequired,
144
+ ownerDid: _propTypes.default.string.isRequired,
145
+ onCancel: _propTypes.default.func.isRequired,
146
+ onSuccess: _propTypes.default.func.isRequired,
147
+ onError: _propTypes.default.func,
148
+ roles: _propTypes.default.array,
149
+ showOwnerPassport: _propTypes.default.bool
150
+ };
151
+ IssuePassport.defaultProps = {
152
+ onError: () => {},
153
+ roles: [],
154
+ showOwnerPassport: false
155
+ };
@@ -0,0 +1,300 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = Member;
7
+ var _react = require("react");
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _styled = _interopRequireDefault(require("@emotion/styled"));
10
+ var _notistack = require("notistack");
11
+ var _Dialog = _interopRequireDefault(require("@arcblock/ux/lib/Dialog"));
12
+ var _CircularProgress = _interopRequireDefault(require("@mui/material/CircularProgress"));
13
+ var _Box = _interopRequireDefault(require("@mui/material/Box"));
14
+ var _Avatar = _interopRequireDefault(require("@mui/material/Avatar"));
15
+ var _Tabs = _interopRequireDefault(require("@arcblock/ux/lib/Tabs"));
16
+ var _InfoRow = _interopRequireDefault(require("@arcblock/ux/lib/InfoRow"));
17
+ var _context = require("@arcblock/ux/lib/Locale/context");
18
+ var _Address = _interopRequireDefault(require("@arcblock/did-connect/lib/Address"));
19
+ var _ForbidLoginIcon = _interopRequireDefault(require("@arcblock/icons/lib/ForbidLoginIcon"));
20
+ var _AllowLoginIcon = _interopRequireDefault(require("@arcblock/icons/lib/AllowLoginIcon"));
21
+ var _constant = require("@abtnode/constant");
22
+ var _permission = _interopRequireDefault(require("../../permission"));
23
+ var _node = require("../../contexts/node");
24
+ var _team = require("../../contexts/team");
25
+ var _util = require("../../util");
26
+ var _passportIssuances = _interopRequireDefault(require("./passport-issuances"));
27
+ var _passports = _interopRequireDefault(require("./passports"));
28
+ var _toggleUserApproval = _interopRequireDefault(require("./toggle-user-approval"));
29
+ var _util2 = require("./util");
30
+ var _jsxRuntime = require("react/jsx-runtime");
31
+ var _templateObject, _templateObject2, _templateObject3;
32
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
33
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
34
+ function Member(_ref) {
35
+ let {
36
+ userDid,
37
+ onCancel,
38
+ initTab
39
+ } = _ref;
40
+ const {
41
+ api,
42
+ ws: {
43
+ useSubscription
44
+ },
45
+ inService
46
+ } = (0, _node.useNodeContext)();
47
+ const {
48
+ roles,
49
+ teamDid,
50
+ enablePassportIssuance
51
+ } = (0, _team.useTeamContext)();
52
+ const {
53
+ t
54
+ } = (0, _context.useLocaleContext)();
55
+ const [issuances, setIssuances] = (0, _react.useState)(null);
56
+ const [user, setUser] = (0, _react.useState)(null);
57
+ const {
58
+ enqueueSnackbar
59
+ } = (0, _notistack.useSnackbar)();
60
+ const [tab, setTab] = (0, _react.useState)(initTab || 'info');
61
+ const getData = async () => {
62
+ try {
63
+ const res = await api.doBatchQuery({
64
+ getUser: {
65
+ input: {
66
+ teamDid,
67
+ user: {
68
+ did: userDid
69
+ }
70
+ }
71
+ },
72
+ getPassportIssuances: {
73
+ input: {
74
+ teamDid,
75
+ ownerDid: userDid
76
+ }
77
+ }
78
+ });
79
+ if (res.getUser.user) {
80
+ res.getUser.user.avatar = (0, _util2.parseAvatar)(res.getUser.user.avatar, teamDid, inService);
81
+
82
+ // for backwards compatibility
83
+ res.getUser.user.passports = (res.getUser.user.passports || []).filter(x => x.issuer);
84
+ }
85
+ setUser(res.getUser.user || {});
86
+ setIssuances(res.getPassportIssuances.list || []);
87
+ } catch (err) {
88
+ enqueueSnackbar((0, _util.formatError)(err), {
89
+ autoHideDuration: 5000,
90
+ variant: 'error'
91
+ });
92
+ }
93
+ };
94
+ (0, _react.useEffect)(() => {
95
+ if (teamDid) {
96
+ getData();
97
+ }
98
+ }, [userDid, teamDid]); // eslint-disable-line
99
+
100
+ const onUserEvent = data => {
101
+ if (data.teamDid === teamDid && data.user && data.user.did === userDid) {
102
+ getData();
103
+ }
104
+ };
105
+ useSubscription(_constant.EVENTS.USER_UPDATED, onUserEvent, [userDid, teamDid]);
106
+ (0, _react.useEffect)(() => {
107
+ if (issuances && !issuances.length && tab === 'issuances') {
108
+ setTab('info');
109
+ }
110
+ }, [issuances]); // eslint-disable-line
111
+
112
+ // tab
113
+ const Info = () => {
114
+ const rows = user ? [{
115
+ name: t('team.member.name'),
116
+ value: user.fullName
117
+ }, {
118
+ name: t('common.email'),
119
+ value: user.email
120
+ }, {
121
+ name: t('team.member.allowLogin'),
122
+ value: user.approved ? t('common.yes') : t('common.no')
123
+ }, {
124
+ name: t('team.member.lastLogin'),
125
+ value: (0, _util.formatToDatetime)(user.lastLoginAt)
126
+ }, {
127
+ name: t('team.member.lastLoginIp'),
128
+ value: user.lastLoginIp || ''
129
+ }, {
130
+ name: t('common.createdAt'),
131
+ value: (0, _util.formatToDatetime)(user.createdAt)
132
+ }, {
133
+ name: t('common.remark'),
134
+ value: user.remark || '--'
135
+ }].filter(Boolean) : [];
136
+ return rows.map(row => {
137
+ if (row.name === t('common.did')) {
138
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_InfoRow.default, {
139
+ valueComponent: "div",
140
+ nameWidth: 120,
141
+ name: row.name,
142
+ nameFormatter: () => t('common.did'),
143
+ children: row.value
144
+ }, row.name);
145
+ }
146
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_InfoRow.default, {
147
+ style: {
148
+ alignItems: 'flex-start'
149
+ },
150
+ valueComponent: "div",
151
+ nameWidth: 120,
152
+ name: row.name,
153
+ children: row.value
154
+ }, row.name);
155
+ });
156
+ };
157
+ const tabConfigs = {
158
+ info: {
159
+ label: t('common.basicInfo'),
160
+ value: 'info',
161
+ component: Info
162
+ },
163
+ passports: {
164
+ label: t('common.passport'),
165
+ value: 'passports',
166
+ component: () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_passports.default, {
167
+ user: user,
168
+ teamDid: teamDid,
169
+ roles: roles,
170
+ onCreate: () => {
171
+ getData(teamDid);
172
+ setTab('issuances');
173
+ },
174
+ onRefresh: () => {
175
+ getData(teamDid);
176
+ }
177
+ })
178
+ },
179
+ issuances: {
180
+ label: t('team.passport.issuance.pending'),
181
+ value: 'issuances',
182
+ component: () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_passportIssuances.default, {
183
+ issuances: issuances || [],
184
+ teamDid: teamDid,
185
+ onRefresh: () => getData(teamDid)
186
+ })
187
+ }
188
+ };
189
+ const tabs = Object.values(tabConfigs).map(_ref2 => {
190
+ let {
191
+ label,
192
+ value
193
+ } = _ref2;
194
+ return {
195
+ label,
196
+ value
197
+ };
198
+ }).filter(x => {
199
+ if (x.value === 'issuances') {
200
+ return enablePassportIssuance && issuances && !!issuances.length;
201
+ }
202
+ return true;
203
+ });
204
+ const tabConfig = tabConfigs[tab] || tabConfigs.info;
205
+ const onTabChange = newTab => {
206
+ setTab(newTab);
207
+ };
208
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dialog.default, {
209
+ title: t('common.member'),
210
+ onClose: onCancel,
211
+ open: true,
212
+ PaperProps: {
213
+ style: {
214
+ maxWidth: 632,
215
+ minHeight: '80vh'
216
+ }
217
+ },
218
+ fullWidth: true,
219
+ actions: user && /*#__PURE__*/(0, _jsxRuntime.jsx)(_permission.default, {
220
+ permission: inService ? '' : 'mutate_team',
221
+ role: inService ? _util.BlockletAdminRoles : [],
222
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_toggleUserApproval.default, {
223
+ user: user,
224
+ children: _ref3 => {
225
+ let {
226
+ open
227
+ } = _ref3;
228
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(BlockButton, {
229
+ onClick: open,
230
+ children: [user.approved ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_ForbidLoginIcon.default, {
231
+ style: {
232
+ fontSize: '1.2em',
233
+ marginRight: '0.4em'
234
+ }
235
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_AllowLoginIcon.default, {
236
+ style: {
237
+ fontSize: '1.2em',
238
+ marginRight: '0.4em'
239
+ }
240
+ }), user.approved ? t('team.member.forbidLogin') : t('team.member.allowLogin')]
241
+ });
242
+ }
243
+ })
244
+ }),
245
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(Div, {
246
+ children: [!user && /*#__PURE__*/(0, _jsxRuntime.jsx)(Center, {
247
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_CircularProgress.default, {})
248
+ }), user && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
249
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
250
+ display: "flex",
251
+ alignItems: "center",
252
+ className: "info",
253
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Avatar.default, {
254
+ src: user.avatar,
255
+ style: {
256
+ width: 48,
257
+ height: 48,
258
+ backgroundColor: 'transparent',
259
+ marginRight: 16
260
+ }
261
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
262
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
263
+ className: "name",
264
+ children: user.fullName
265
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
266
+ className: "did",
267
+ mt: 1,
268
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Address.default, {
269
+ children: user.did
270
+ })
271
+ })]
272
+ })]
273
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
274
+ mx: 3,
275
+ className: "tabs",
276
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tabs.default, {
277
+ tabs: tabs,
278
+ current: tab,
279
+ onChange: onTabChange,
280
+ scrollButtons: "auto"
281
+ })
282
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
283
+ className: "body",
284
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(tabConfig.component, {})
285
+ })]
286
+ })]
287
+ })
288
+ });
289
+ }
290
+ Member.propTypes = {
291
+ userDid: _propTypes.default.string.isRequired,
292
+ onCancel: _propTypes.default.func.isRequired,
293
+ initTab: _propTypes.default.string
294
+ };
295
+ Member.defaultProps = {
296
+ initTab: 'info'
297
+ };
298
+ const Div = _styled.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .info {\n .name {\n font-weight: 400;\n font-size: 18px;\n line-height: 25px;\n color: #222222;\n }\n }\n\n .tabs {\n margin-top: 24px;\n margin-left: 0;\n margin-right: 0;\n }\n\n .body {\n margin-top: 24px;\n }\n"])));
299
+ const Center = _styled.default.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n flex: 1;\n display: flex;\n justify-content: center;\n align-items: center;\n height: 200px;\n"])));
300
+ const BlockButton = _styled.default.div(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n flex-shrink: 0;\n width: 100%;\n height: 64px;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n color: #999;\n fill: #999;\n font-size: 16px;\n border-top: 1px solid #f0f0f0;\n position: sticky;\n bottom: 0;\n background: #fff;\n z-index: 10;\n"])));