@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,154 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = PassportIssuances;
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 _Box = _interopRequireDefault(require("@mui/material/Box"));
12
+ var _context = require("@arcblock/ux/lib/Locale/context");
13
+ var _node = require("../../contexts/node");
14
+ var _team = require("../../contexts/team");
15
+ var _confirm = _interopRequireDefault(require("../../confirm"));
16
+ var _permission = _interopRequireDefault(require("../../permission"));
17
+ var _clickToCopy = _interopRequireDefault(require("../../click-to-copy"));
18
+ var _passportTag = _interopRequireDefault(require("../../passport-tag"));
19
+ var _util = require("../../util");
20
+ var _jsxRuntime = require("react/jsx-runtime");
21
+ var _templateObject;
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
24
+ function PassportIssuances(_ref) {
25
+ let {
26
+ issuances,
27
+ teamDid,
28
+ onRefresh
29
+ } = _ref;
30
+ const {
31
+ api: client,
32
+ inService
33
+ } = (0, _node.useNodeContext)();
34
+ const {
35
+ t
36
+ } = (0, _react.useContext)(_context.LocaleContext);
37
+ const [delConfirm, setDelConfirm] = (0, _react.useState)(null);
38
+ const [loading, setLoading] = (0, _react.useState)(false);
39
+ const {
40
+ enqueueSnackbar
41
+ } = (0, _notistack.useSnackbar)();
42
+ const {
43
+ endpoint
44
+ } = (0, _team.useTeamContext)();
45
+ const deleteIssuance = async _ref2 => {
46
+ let {
47
+ id
48
+ } = _ref2;
49
+ if (loading) {
50
+ return;
51
+ }
52
+ setLoading(true);
53
+ try {
54
+ await client.deletePassportIssuance({
55
+ input: {
56
+ teamDid,
57
+ sessionId: id
58
+ }
59
+ });
60
+ onRefresh();
61
+ } catch (error) {
62
+ enqueueSnackbar(error.message, {
63
+ autoHideDuration: 5000,
64
+ variant: 'error'
65
+ });
66
+ } finally {
67
+ setLoading(false);
68
+ setDelConfirm(null);
69
+ }
70
+ };
71
+ const onCancel = () => {
72
+ setLoading(false);
73
+ setDelConfirm(null);
74
+ };
75
+ const getLink = column => endpoint ? (0, _util.getIssuePassportLink)({
76
+ id: column.id,
77
+ endpoint
78
+ }) : '';
79
+
80
+ // eslint-disable-next-line react/prop-types
81
+ // eslint-disable-next-line react/no-unstable-nested-components
82
+ function Issuance(_ref3) {
83
+ let {
84
+ data: d
85
+ } = _ref3;
86
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
87
+ className: "issuance",
88
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
89
+ display: "flex",
90
+ justifyContent: "space-between",
91
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_permission.default, {
92
+ permission: inService ? '' : 'mutate_team',
93
+ role: inService ? _util.BlockletAdminRoles : [],
94
+ children: can => can ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_passportTag.default, {
95
+ passport: {
96
+ title: d.title,
97
+ name: d.name
98
+ },
99
+ onDelete: () => setDelConfirm({
100
+ title: t('team.passport.issuance.delete.title'),
101
+ description: t('team.passport.issuance.delete.description', {
102
+ link: getLink(d)
103
+ }),
104
+ confirm: t('common.delConfirm'),
105
+ cancel: t('common.cancel'),
106
+ onConfirm: () => {
107
+ deleteIssuance(d);
108
+ },
109
+ onCancel
110
+ })
111
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_passportTag.default, {
112
+ passport: {
113
+ title: d.title,
114
+ name: d.name
115
+ }
116
+ })
117
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
118
+ style: {
119
+ color: '#999'
120
+ },
121
+ children: [t('common.expires'), ":\xA0", (0, _util.formatToDatetime)(d.expireDate)]
122
+ })]
123
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
124
+ mt: 2,
125
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_clickToCopy.default, {
126
+ children: getLink(d)
127
+ })
128
+ })]
129
+ });
130
+ }
131
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Div, {
132
+ children: [issuances.map(x => /*#__PURE__*/(0, _jsxRuntime.jsx)(Issuance, {
133
+ data: x
134
+ })), delConfirm && /*#__PURE__*/(0, _jsxRuntime.jsx)(_confirm.default, {
135
+ title: delConfirm.title,
136
+ description: delConfirm.description,
137
+ confirm: delConfirm.confirm,
138
+ cancel: delConfirm.cancel,
139
+ params: delConfirm.params,
140
+ onConfirm: delConfirm.onConfirm,
141
+ onCancel: delConfirm.onCancel
142
+ })]
143
+ });
144
+ }
145
+ const Div = _styled.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .MuiTableHead-root {\n display: none;\n }\n .issuance {\n padding: 16px 0;\n border-bottom: 1px solid #f0f0f0;\n .MuiTypography-root {\n display: inline-block;\n width: 100%;\n background: #f3f3f3;\n border-radius: 4px;\n padding-top: 6px;\n padding-bottom: 6px;\n }\n }\n"])));
146
+ PassportIssuances.propTypes = {
147
+ teamDid: _propTypes.default.string.isRequired,
148
+ issuances: _propTypes.default.array,
149
+ onRefresh: _propTypes.default.func
150
+ };
151
+ PassportIssuances.defaultProps = {
152
+ issuances: [],
153
+ onRefresh: () => {}
154
+ };
@@ -0,0 +1,336 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = Passports;
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 _get = _interopRequireDefault(require("lodash/get"));
12
+ var _upperFirst = _interopRequireDefault(require("lodash/upperFirst"));
13
+ var _Add = _interopRequireDefault(require("@mui/icons-material/Add"));
14
+ var _Box = _interopRequireDefault(require("@mui/material/Box"));
15
+ var _Tooltip = _interopRequireDefault(require("@mui/material/Tooltip"));
16
+ var _ErrorOutline = _interopRequireDefault(require("@mui/icons-material/ErrorOutline"));
17
+ var _context = require("@arcblock/ux/lib/Locale/context");
18
+ var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
19
+ var _RevokeIcon = _interopRequireDefault(require("@arcblock/icons/lib/RevokeIcon"));
20
+ var _ExternalIssuerIcon = _interopRequireDefault(require("@arcblock/icons/lib/ExternalIssuerIcon"));
21
+ var _Empty = _interopRequireDefault(require("@arcblock/ux/lib/Empty"));
22
+ var _constant = require("@abtnode/constant");
23
+ var _createPassportSvg = _interopRequireDefault(require("@abtnode/auth/lib/util/create-passport-svg"));
24
+ var _node = require("../../contexts/node");
25
+ var _session = require("../../contexts/session");
26
+ var _team = require("../../contexts/team");
27
+ var _blocklet = require("../../contexts/blocklet");
28
+ var _util = require("../../util");
29
+ var _confirm = _interopRequireDefault(require("../../confirm"));
30
+ var _permission = _interopRequireDefault(require("../../permission"));
31
+ var _searchInput = _interopRequireDefault(require("../search-input"));
32
+ var _listHeader = _interopRequireDefault(require("../styles/list-header"));
33
+ var _issuePassport = _interopRequireDefault(require("./issue-passport"));
34
+ var _jsxRuntime = require("react/jsx-runtime");
35
+ var _templateObject;
36
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
38
+ 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; }
39
+ 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; }
40
+ 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; }
41
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
42
+ 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); }
43
+ function ConfirmDescription(_ref) {
44
+ let {
45
+ action,
46
+ passport
47
+ } = _ref;
48
+ const {
49
+ t
50
+ } = (0, _context.useLocaleContext)();
51
+ const {
52
+ roles
53
+ } = (0, _team.useTeamContext)();
54
+ const role = roles.find(x => x.name === passport.role);
55
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
56
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
57
+ children: action === 'enable' ? t('team.member.enablePassportDescription') : t('team.member.revokePassportDescription')
58
+ }), role && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
59
+ mt: 3,
60
+ fontWeight: "bold",
61
+ children: t('team.member.passportPermissionTitle')
62
+ }), role && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
63
+ mt: 1,
64
+ children: role.description
65
+ })]
66
+ });
67
+ }
68
+ ConfirmDescription.propTypes = {
69
+ action: _propTypes.default.string.isRequired,
70
+ passport: _propTypes.default.object.isRequired
71
+ };
72
+ ConfirmDescription.defaultProps = {};
73
+ function Passports(_ref2) {
74
+ var _blocklet$settings;
75
+ let {
76
+ user,
77
+ onCreate
78
+ } = _ref2;
79
+ const {
80
+ t
81
+ } = (0, _context.useLocaleContext)();
82
+ const {
83
+ session
84
+ } = (0, _session.useSessionContext)();
85
+ const {
86
+ roles,
87
+ teamDid,
88
+ teamIssuerDid,
89
+ refresh: refreshTeam,
90
+ enablePassportIssuance,
91
+ trustedPassports,
92
+ passportColor,
93
+ blocklet
94
+ } = (0, _team.useTeamContext)();
95
+ const {
96
+ appIdList: idList
97
+ } = (0, _blocklet.useBlockletContext)();
98
+ const {
99
+ api,
100
+ inService
101
+ } = (0, _node.useNodeContext)();
102
+ const {
103
+ enqueueSnackbar
104
+ } = (0, _notistack.useSnackbar)();
105
+ const [loading, setLoading] = (0, _react.useState)(false);
106
+ const [toggleConfirm, setToggleConfirm] = (0, _react.useState)(null);
107
+ const [showIssueDialog, setShowIssueDialog] = (0, _react.useState)(false);
108
+ const [search, setSearch] = (0, _react.useState)('');
109
+ const appIdList = [teamIssuerDid, ...(idList || [])].filter(Boolean);
110
+ const passports = ((0, _get.default)(user, 'passports') || []).map(x => _objectSpread(_objectSpread({}, x), {}, {
111
+ revoked: x.status === _constant.PASSPORT_STATUS.REVOKED
112
+ }));
113
+ const togglePassportStatus = async passport => {
114
+ if (loading) {
115
+ return;
116
+ }
117
+ setLoading(true);
118
+ try {
119
+ const method = passport.status === _constant.PASSPORT_STATUS.REVOKED ? 'enableUserPassport' : 'revokeUserPassport';
120
+ await api[method]({
121
+ input: {
122
+ teamDid,
123
+ userDid: user.did,
124
+ passportId: passport.id
125
+ }
126
+ });
127
+ refreshTeam();
128
+ } catch (err) {
129
+ enqueueSnackbar((0, _util.formatError)(err), {
130
+ autoHideDuration: 5000,
131
+ variant: 'error'
132
+ });
133
+ } finally {
134
+ setLoading(false);
135
+ setToggleConfirm(null);
136
+ }
137
+ };
138
+ const confirmToggle = item => item.status === _constant.PASSPORT_STATUS.REVOKED ? setToggleConfirm({
139
+ title: t('team.member.enablePassport'),
140
+ description: /*#__PURE__*/(0, _jsxRuntime.jsx)(ConfirmDescription, {
141
+ action: "enable",
142
+ passport: item
143
+ }),
144
+ confirm: t('common.enable'),
145
+ cancel: t('common.cancel'),
146
+ onConfirm: () => {
147
+ togglePassportStatus(item);
148
+ },
149
+ onCancel: () => {
150
+ setLoading(false);
151
+ setToggleConfirm(null);
152
+ },
153
+ color: 'primary'
154
+ }) : setToggleConfirm({
155
+ title: t('team.member.revokePassport'),
156
+ description: /*#__PURE__*/(0, _jsxRuntime.jsx)(ConfirmDescription, {
157
+ action: "revoke",
158
+ passport: item
159
+ }),
160
+ confirm: t('common.revoke'),
161
+ cancel: t('common.cancel'),
162
+ onConfirm: () => {
163
+ togglePassportStatus(item);
164
+ },
165
+ onCancel: () => {
166
+ setLoading(false);
167
+ setToggleConfirm(null);
168
+ }
169
+ });
170
+ const revokeInfo = (hasPermission, passport) => {
171
+ if (user.did === session.user.did && session.user.passportId && session.user.passportId === passport.id) {
172
+ return {
173
+ revokable: false,
174
+ message: t('team.passport.shouldNotDeleteCurrent')
175
+ };
176
+ }
177
+ if (!hasPermission) {
178
+ return {
179
+ revokable: false,
180
+ message: t('team.passport.noPermission')
181
+ };
182
+ }
183
+ if (teamDid === passport.issuer.id && passport.name === 'owner') {
184
+ return {
185
+ revokable: false,
186
+ message: t('team.passport.noPermission')
187
+ };
188
+ }
189
+ return {
190
+ revokable: true
191
+ };
192
+ };
193
+ const filteredPassports = passports.filter(x => !search || x.title.includes(search) || x.name.includes(search));
194
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Div, {
195
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_listHeader.default, {
196
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
197
+ className: "left",
198
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_searchInput.default, {
199
+ placeholder: t('team.passport.search'),
200
+ value: search,
201
+ onChange: e => setSearch(e.target.value)
202
+ })
203
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
204
+ className: "right",
205
+ children: enablePassportIssuance && !!user.approved && /*#__PURE__*/(0, _jsxRuntime.jsx)(_permission.default, {
206
+ permission: inService ? '' : 'mutate_team',
207
+ role: inService ? _util.BlockletAdminRoles : [],
208
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
209
+ variant: "contained",
210
+ color: "primary",
211
+ "data-cy": "issue-passport",
212
+ onClick: () => setShowIssueDialog(true),
213
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Add.default, {
214
+ style: {
215
+ fontSize: 16,
216
+ marginRight: 4
217
+ }
218
+ }), t('team.passport.issue')]
219
+ })
220
+ })
221
+ })]
222
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
223
+ children: [filteredPassports.map(x => /*#__PURE__*/(0, _jsxRuntime.jsx)(_permission.default, {
224
+ permission: inService ? '' : 'mutate_team',
225
+ role: inService ? _util.BlockletAdminRoles : [],
226
+ children: can => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
227
+ className: "passport-item",
228
+ display: "flex",
229
+ justifyContent: "space-between",
230
+ alignItems: "center",
231
+ mt: 3,
232
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
233
+ display: "flex",
234
+ alignItems: "center",
235
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
236
+ // eslint-disable-next-line react/no-danger
237
+ dangerouslySetInnerHTML: {
238
+ __html: (0, _createPassportSvg.default)({
239
+ title: x.title || x.name,
240
+ issuer: x.issuer && x.issuer.name,
241
+ issuerDid: x.issuer && x.issuer.id,
242
+ ownerName: user.fullName,
243
+ ownerAvatarUrl: user.avatar,
244
+ revoked: x.revoked,
245
+ preferredColor: passportColor,
246
+ width: '120px'
247
+ })
248
+ }
249
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
250
+ className: "body",
251
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
252
+ className: "title",
253
+ display: "flex",
254
+ alignItems: "center",
255
+ children: [(0, _upperFirst.default)(x.title), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
256
+ className: "status-icons",
257
+ children: [!!appIdList.length && !appIdList.includes(x.issuer.id) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_ExternalIssuerIcon.default, {}), x.revoked && /*#__PURE__*/(0, _jsxRuntime.jsx)(_RevokeIcon.default, {})]
258
+ })]
259
+ }), !!appIdList.length && !appIdList.includes(x.issuer.id) && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
260
+ className: "tip",
261
+ children: [x.issuer.id !== teamIssuerDid && !trustedPassports.some(y => y.issuerDid === x.issuer.id) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tooltip.default, {
262
+ title: t('team.passport.notTrustedIssuerTip'),
263
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
264
+ component: _ErrorOutline.default,
265
+ style: {
266
+ fontSize: '1.3em'
267
+ },
268
+ color: "error.main",
269
+ mr: 0.5
270
+ })
271
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
272
+ children: t('team.passport.issueBy', {
273
+ name: x.issuer.name
274
+ })
275
+ })]
276
+ })]
277
+ })]
278
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
279
+ children: revokeInfo(can, x).revokable ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
280
+ variant: "outlined",
281
+ color: x.revoked ? 'primary' : 'secondary',
282
+ onClick: () => confirmToggle(x),
283
+ children: [x.revoked ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Add.default, {
284
+ style: {
285
+ fontSize: 16,
286
+ marginRight: 4
287
+ }
288
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_RevokeIcon.default, {
289
+ style: {
290
+ height: 16,
291
+ marginRight: 4
292
+ }
293
+ }), x.revoked ? t('common.enable') : t('common.revoke')]
294
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tooltip.default, {
295
+ title: revokeInfo(can, x).message,
296
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ErrorOutline.default, {
297
+ style: {
298
+ color: '#ddd'
299
+ }
300
+ })
301
+ })
302
+ })]
303
+ })
304
+ })), !filteredPassports.length && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Empty.default, {
305
+ children: t('common.empty')
306
+ })]
307
+ }), showIssueDialog && /*#__PURE__*/(0, _jsxRuntime.jsx)(_issuePassport.default, {
308
+ teamDid: teamDid,
309
+ ownerDid: user.did,
310
+ roles: roles,
311
+ onCancel: () => setShowIssueDialog(false),
312
+ onSuccess: () => {
313
+ onCreate();
314
+ setShowIssueDialog(false);
315
+ },
316
+ showOwnerPassport: blocklet && !((_blocklet$settings = blocklet.settings) !== null && _blocklet$settings !== void 0 && _blocklet$settings.owner)
317
+ }), toggleConfirm && /*#__PURE__*/(0, _jsxRuntime.jsx)(_confirm.default, {
318
+ title: toggleConfirm.title,
319
+ description: toggleConfirm.description,
320
+ confirm: toggleConfirm.confirm,
321
+ cancel: toggleConfirm.cancel,
322
+ params: toggleConfirm.params,
323
+ onConfirm: toggleConfirm.onConfirm,
324
+ onCancel: toggleConfirm.onCancel,
325
+ color: toggleConfirm.color
326
+ })]
327
+ });
328
+ }
329
+ Passports.propTypes = {
330
+ user: _propTypes.default.object.isRequired,
331
+ onCreate: _propTypes.default.func
332
+ };
333
+ Passports.defaultProps = {
334
+ onCreate: () => {}
335
+ };
336
+ const Div = _styled.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .passport-item {\n .body {\n padding: 0;\n margin-left: 24px;\n margin-top: 0;\n }\n .title {\n font-weight: 400;\n font-size: 16px;\n line-height: 19px;\n color: #222222;\n }\n .tip {\n display: flex;\n align-items: center;\n font-size: 14px;\n margin-top: 6px;\n color: #bbb;\n }\n .status-icons {\n svg {\n fill: #bfbfbf;\n height: 1.2em;\n margin-left: 0.4em;\n }\n }\n .MuiButton-outlinedSecondary {\n color: #f16e6e;\n fill: #f16e6e;\n background: #fcf3f3;\n border: 0;\n &:hover {\n border: 0;\n }\n }\n }\n"])));
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = ToggleUserApproval;
7
+ var _react = require("react");
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _context = require("@arcblock/ux/lib/Locale/context");
10
+ var _toast = _interopRequireDefault(require("../../toast"));
11
+ var _confirm = _interopRequireDefault(require("../../confirm"));
12
+ var _node = require("../../contexts/node");
13
+ var _team = require("../../contexts/team");
14
+ var _session = require("../../contexts/session");
15
+ var _util = require("../../util");
16
+ var _jsxRuntime = require("react/jsx-runtime");
17
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
+ const isNodeOwner = (nodeInfo, userDid) => nodeInfo.nodeOwner && nodeInfo.nodeOwner.did === userDid;
19
+ const isSelf = (sessionUser, userDid) => sessionUser && sessionUser.did === userDid;
20
+ function ToggleUserApproval(_ref) {
21
+ let {
22
+ user,
23
+ onCancel: _onCancel,
24
+ onSuccess,
25
+ onError,
26
+ children
27
+ } = _ref;
28
+ const {
29
+ api,
30
+ info: nodeInfo,
31
+ inService
32
+ } = (0, _node.useNodeContext)();
33
+ const {
34
+ session
35
+ } = (0, _session.useSessionContext)();
36
+ const {
37
+ teamDid,
38
+ refresh
39
+ } = (0, _team.useTeamContext)();
40
+ const {
41
+ t
42
+ } = (0, _context.useLocaleContext)();
43
+ const [loading, setLoading] = (0, _react.useState)(false);
44
+ const [show, setShow] = (0, _react.useState)(false);
45
+ const open = () => setShow(true);
46
+ const updateUserApproval = async d => {
47
+ const {
48
+ did,
49
+ approved
50
+ } = d;
51
+ if (loading) {
52
+ return;
53
+ }
54
+ setLoading(true);
55
+ try {
56
+ await api.updateUserApproval({
57
+ input: {
58
+ teamDid,
59
+ user: {
60
+ did,
61
+ approved: !approved
62
+ }
63
+ }
64
+ });
65
+ setShow(false);
66
+ onSuccess();
67
+ refresh();
68
+ } catch (error) {
69
+ _toast.default.error((0, _util.formatError)(error));
70
+ onError();
71
+ } finally {
72
+ setLoading(false);
73
+ }
74
+ };
75
+ const approveConfirm = {
76
+ title: user.approved ? t('team.member.forbidLogin') : t('team.member.allowLogin'),
77
+ description: user.approved ? t('team.member.forbidLoginDescription') : t('team.member.allowLoginDescription'),
78
+ confirm: t('common.confirm'),
79
+ cancel: t('common.cancel'),
80
+ onConfirm: () => {
81
+ updateUserApproval(user);
82
+ },
83
+ onCancel: () => {
84
+ setLoading(false);
85
+ setShow(false);
86
+ _onCancel();
87
+ },
88
+ color: user.approved ? 'error' : 'primary'
89
+ };
90
+ let can;
91
+ if (!inService) {
92
+ can = nodeInfo.nodeOwner && !isNodeOwner(nodeInfo, user.did) && !isSelf(session.user, user.did);
93
+ } else {
94
+ can = !isSelf(session.user, user.did);
95
+ }
96
+ if (!can) {
97
+ return null;
98
+ }
99
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
100
+ children: [typeof children === 'function' ? children({
101
+ can,
102
+ open
103
+ }) : children, show ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_confirm.default, {
104
+ title: approveConfirm.title,
105
+ description: approveConfirm.description,
106
+ confirm: approveConfirm.confirm,
107
+ cancel: approveConfirm.cancel,
108
+ params: approveConfirm.params,
109
+ onConfirm: approveConfirm.onConfirm,
110
+ onCancel: approveConfirm.onCancel,
111
+ color: approveConfirm.color
112
+ }) : null]
113
+ });
114
+ }
115
+ ToggleUserApproval.propTypes = {
116
+ user: _propTypes.default.object,
117
+ onSuccess: _propTypes.default.func,
118
+ onCancel: _propTypes.default.func,
119
+ onError: _propTypes.default.func,
120
+ children: _propTypes.default.oneOfType([_propTypes.default.object, _propTypes.default.func])
121
+ };
122
+ ToggleUserApproval.defaultProps = {
123
+ user: {},
124
+ onSuccess: () => {},
125
+ onCancel: () => {},
126
+ onError: () => {},
127
+ children: null
128
+ };