@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,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 _Spinner = _interopRequireDefault(require("@arcblock/ux/lib/Spinner"));
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)(_Spinner.default, {
185
+ size: [16, 10]
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 _Spinner = _interopRequireDefault(require("@arcblock/ux/lib/Spinner"));
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)(_Spinner.default, {
94
+ size: [16, 10]
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,294 @@
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 _Spinner = _interopRequireDefault(require("@arcblock/ux/lib/Spinner"));
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
+ setUser(res.getUser.user || {});
83
+ setIssuances(res.getPassportIssuances.list || []);
84
+ } catch (err) {
85
+ enqueueSnackbar((0, _util.formatError)(err), {
86
+ autoHideDuration: 5000,
87
+ variant: 'error'
88
+ });
89
+ }
90
+ };
91
+ (0, _react.useEffect)(() => {
92
+ if (teamDid) {
93
+ getData();
94
+ }
95
+ }, [userDid, teamDid]); // eslint-disable-line
96
+
97
+ const onUserEvent = data => {
98
+ if (data.teamDid === teamDid && data.user && data.user.did === userDid) {
99
+ getData();
100
+ }
101
+ };
102
+ useSubscription(_constant.EVENTS.USER_UPDATED, onUserEvent, [userDid, teamDid]);
103
+ (0, _react.useEffect)(() => {
104
+ if (issuances && !issuances.length && tab === 'issuances') {
105
+ setTab('info');
106
+ }
107
+ }, [issuances]); // eslint-disable-line
108
+
109
+ // tab
110
+ const Info = () => {
111
+ const rows = user ? [{
112
+ name: t('team.member.name'),
113
+ value: user.fullName
114
+ }, {
115
+ name: t('common.email'),
116
+ value: user.email
117
+ }, {
118
+ name: t('team.member.allowLogin'),
119
+ value: user.approved ? t('common.yes') : t('common.no')
120
+ }, {
121
+ name: t('team.member.lastLogin'),
122
+ value: (0, _util.formatToDatetime)(user.updatedAt)
123
+ }, {
124
+ name: t('common.createdAt'),
125
+ value: (0, _util.formatToDatetime)(user.createdAt)
126
+ }, {
127
+ name: t('common.remark'),
128
+ value: user.remark || '--'
129
+ }].filter(Boolean) : [];
130
+ return rows.map(row => {
131
+ if (row.name === t('common.did')) {
132
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_InfoRow.default, {
133
+ valueComponent: "div",
134
+ nameWidth: 120,
135
+ name: row.name,
136
+ nameFormatter: () => t('common.did'),
137
+ children: row.value
138
+ }, row.name);
139
+ }
140
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_InfoRow.default, {
141
+ style: {
142
+ alignItems: 'flex-start'
143
+ },
144
+ valueComponent: "div",
145
+ nameWidth: 120,
146
+ name: row.name,
147
+ children: row.value
148
+ }, row.name);
149
+ });
150
+ };
151
+ const tabConfigs = {
152
+ info: {
153
+ label: t('common.basicInfo'),
154
+ value: 'info',
155
+ component: Info
156
+ },
157
+ passports: {
158
+ label: t('common.passport'),
159
+ value: 'passports',
160
+ component: () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_passports.default, {
161
+ user: user,
162
+ teamDid: teamDid,
163
+ roles: roles,
164
+ onCreate: () => {
165
+ getData(teamDid);
166
+ setTab('issuances');
167
+ },
168
+ onRefresh: () => {
169
+ getData(teamDid);
170
+ }
171
+ })
172
+ },
173
+ issuances: {
174
+ label: t('team.passport.issuance.pending'),
175
+ value: 'issuances',
176
+ component: () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_passportIssuances.default, {
177
+ issuances: issuances || [],
178
+ teamDid: teamDid,
179
+ onRefresh: () => getData(teamDid)
180
+ })
181
+ }
182
+ };
183
+ const tabs = Object.values(tabConfigs).map(_ref2 => {
184
+ let {
185
+ label,
186
+ value
187
+ } = _ref2;
188
+ return {
189
+ label,
190
+ value
191
+ };
192
+ }).filter(x => {
193
+ if (x.value === 'issuances') {
194
+ return enablePassportIssuance && issuances && !!issuances.length;
195
+ }
196
+ return true;
197
+ });
198
+ const tabConfig = tabConfigs[tab] || tabConfigs.info;
199
+ const onTabChange = newTab => {
200
+ setTab(newTab);
201
+ };
202
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dialog.default, {
203
+ title: t('common.member'),
204
+ onClose: onCancel,
205
+ open: true,
206
+ PaperProps: {
207
+ style: {
208
+ maxWidth: 632,
209
+ minHeight: '80vh'
210
+ }
211
+ },
212
+ fullWidth: true,
213
+ actions: user && /*#__PURE__*/(0, _jsxRuntime.jsx)(_permission.default, {
214
+ permission: inService ? '' : 'mutate_team',
215
+ role: inService ? _util.BlockletAdminRoles : [],
216
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_toggleUserApproval.default, {
217
+ user: user,
218
+ children: _ref3 => {
219
+ let {
220
+ open
221
+ } = _ref3;
222
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(BlockButton, {
223
+ onClick: open,
224
+ children: [user.approved ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_ForbidLoginIcon.default, {
225
+ style: {
226
+ fontSize: '1.2em',
227
+ marginRight: '0.4em'
228
+ }
229
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_AllowLoginIcon.default, {
230
+ style: {
231
+ fontSize: '1.2em',
232
+ marginRight: '0.4em'
233
+ }
234
+ }), user.approved ? t('team.member.forbidLogin') : t('team.member.allowLogin')]
235
+ });
236
+ }
237
+ })
238
+ }),
239
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(Div, {
240
+ children: [!user && /*#__PURE__*/(0, _jsxRuntime.jsx)(Center, {
241
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner.default, {})
242
+ }), user && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
243
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
244
+ display: "flex",
245
+ alignItems: "center",
246
+ className: "info",
247
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Avatar.default, {
248
+ src: user.avatar,
249
+ style: {
250
+ width: 48,
251
+ height: 48,
252
+ backgroundColor: 'transparent',
253
+ marginRight: 16
254
+ }
255
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
256
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
257
+ className: "name",
258
+ children: user.fullName
259
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
260
+ className: "did",
261
+ mt: 1,
262
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Address.default, {
263
+ children: user.did
264
+ })
265
+ })]
266
+ })]
267
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
268
+ mx: 3,
269
+ className: "tabs",
270
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tabs.default, {
271
+ tabs: tabs,
272
+ current: tab,
273
+ onChange: onTabChange,
274
+ scrollButtons: "auto"
275
+ })
276
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
277
+ className: "body",
278
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(tabConfig.component, {})
279
+ })]
280
+ })]
281
+ })
282
+ });
283
+ }
284
+ Member.propTypes = {
285
+ userDid: _propTypes.default.string.isRequired,
286
+ onCancel: _propTypes.default.func.isRequired,
287
+ initTab: _propTypes.default.string
288
+ };
289
+ Member.defaultProps = {
290
+ initTab: 'info'
291
+ };
292
+ 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"])));
293
+ 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"])));
294
+ 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"])));