@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,262 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = TransferMember;
7
+ var _react = require("react");
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _styled = _interopRequireDefault(require("@emotion/styled"));
10
+ var _useAsync = _interopRequireDefault(require("react-use/lib/useAsync"));
11
+ var _get = _interopRequireDefault(require("lodash/get"));
12
+ var _Dialog = _interopRequireDefault(require("@arcblock/ux/lib/Dialog"));
13
+ var _CircularProgress = _interopRequireDefault(require("@mui/material/CircularProgress"));
14
+ var _DialogContentText = _interopRequireDefault(require("@mui/material/DialogContentText"));
15
+ var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
16
+ var _TextField = _interopRequireDefault(require("@mui/material/TextField"));
17
+ var _Connect = _interopRequireDefault(require("@arcblock/did-connect/lib/Connect"));
18
+ var _context = require("@arcblock/ux/lib/Locale/context");
19
+ var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
20
+ var _Alert = _interopRequireDefault(require("@arcblock/ux/lib/Alert"));
21
+ var _clickToCopy = _interopRequireDefault(require("../../click-to-copy"));
22
+ var _node = require("../../contexts/node");
23
+ var _util = require("../../util");
24
+ var _session = require("../../contexts/session");
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 TransferMember(_ref) {
30
+ let {
31
+ teamDid,
32
+ onCancel,
33
+ onSuccess,
34
+ onError,
35
+ endpoint
36
+ } = _ref;
37
+ const {
38
+ api,
39
+ info
40
+ } = (0, _node.useNodeContext)();
41
+ const {
42
+ api: sessionAPI
43
+ } = (0, _react.useContext)(_session.SessionContext);
44
+ const [loading, setLoading] = (0, _react.useState)(false);
45
+ const {
46
+ locale
47
+ } = (0, _context.useLocaleContext)();
48
+ const [error, setError] = (0, _react.useState)('');
49
+ const {
50
+ t
51
+ } = (0, _context.useLocaleContext)();
52
+ const [openTransferNFTAuth, setOpenTransferNFTAuth] = (0, _react.useState)(false);
53
+ const [activeStep, setActiveStep] = (0, _react.useState)(0);
54
+ const [inviteInfo, setInviteInfo] = (0, _react.useState)('');
55
+ const [remark, setRemark] = (0, _react.useState)('');
56
+ const needTransferNFT = !!(0, _get.default)(info, 'ownerNft.did');
57
+ const delegationState = (0, _useAsync.default)(async () => {
58
+ if (needTransferNFT) {
59
+ const {
60
+ state
61
+ } = await api.getDelegationState();
62
+ return state;
63
+ }
64
+ return {
65
+ delegated: true
66
+ };
67
+ });
68
+ if (delegationState.loading) {
69
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dialog.default, {
70
+ title: t('team.transferNode.inviteDialog.title'),
71
+ fullWidth: true,
72
+ open: true,
73
+ onClose: onCancel,
74
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
75
+ style: {
76
+ display: 'flex',
77
+ justifyContent: 'center'
78
+ },
79
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_CircularProgress.default, {})
80
+ })
81
+ });
82
+ }
83
+ if (delegationState.error) {
84
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dialog.default, {
85
+ title: t('team.transferNode.inviteDialog.title'),
86
+ fullWidth: true,
87
+ open: true,
88
+ onClose: onCancel,
89
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Alert.default, {
90
+ type: "error",
91
+ variant: "icon",
92
+ children: (0, _util.formatError)(delegationState.error)
93
+ })
94
+ });
95
+ }
96
+ const onCreate = async () => {
97
+ setError(null);
98
+ setLoading(true);
99
+ try {
100
+ const {
101
+ inviteInfo: tmpInviteInfo
102
+ } = await api.createTransferInvitation({
103
+ input: {
104
+ teamDid,
105
+ role: 'owner',
106
+ remark: remark.trim()
107
+ }
108
+ });
109
+ setInviteInfo(tmpInviteInfo);
110
+ setActiveStep(steps.length - 1); // 跳转到最后一步
111
+ } catch (err) {
112
+ const errMsg = (0, _util.formatError)(err);
113
+ setError(errMsg);
114
+ onError(err);
115
+ } finally {
116
+ setLoading(false);
117
+ }
118
+ };
119
+ const handleTransferNFT = () => {
120
+ setOpenTransferNFTAuth(true);
121
+ setActiveStep(1);
122
+ };
123
+ const handleCancelTransferNFT = () => {
124
+ setOpenTransferNFTAuth(false);
125
+ setActiveStep(0);
126
+ };
127
+ const steps = [{
128
+ body: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Typography.default, {
129
+ component: "div",
130
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Alert.default, {
131
+ type: "warning",
132
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
133
+ children: t('team.transferNode.inviteDialog.tips.progress')
134
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
135
+ children: t('team.transferNode.inviteDialog.tips.newOwnerPermissions')
136
+ })]
137
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Alert.default, {
138
+ type: "warning",
139
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
140
+ children: t('team.transferNode.inviteDialog.tips.revoke')
141
+ })
142
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
143
+ style: {
144
+ marginTop: 20,
145
+ marginBottom: 10
146
+ }
147
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
148
+ label: t('common.remark'),
149
+ autoComplete: "off",
150
+ variant: "outlined",
151
+ fullWidth: true,
152
+ style: {
153
+ marginBottom: 8
154
+ },
155
+ value: remark,
156
+ onChange: e => {
157
+ setError(null);
158
+ setRemark(e.target.value);
159
+ },
160
+ disabled: loading,
161
+ "data-cy": "transfer-node-input-remark"
162
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
163
+ style: {
164
+ marginTop: 20,
165
+ marginBottom: 10
166
+ }
167
+ })]
168
+ }),
169
+ cancel: t('common.cancel'),
170
+ confirm: t('team.transferNode.inviteDialog.createInviteLink'),
171
+ onCancel,
172
+ onConfirm: needTransferNFT && !(0, _get.default)(delegationState, 'value.delegated') ? handleTransferNFT : onCreate
173
+ }, {
174
+ body: () => {
175
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Connect.default, {
176
+ action: "delegate-transfer-nft",
177
+ open: openTransferNFTAuth,
178
+ locale: locale,
179
+ checkFn: sessionAPI.get,
180
+ onClose: handleCancelTransferNFT,
181
+ onSuccess: onCreate,
182
+ checkTimeout: 5 * 60 * 1000,
183
+ webWalletUrl: (0, _util.getWebWalletUrl)(info),
184
+ extraParams: {
185
+ targetDID: info.did
186
+ },
187
+ messages: {
188
+ title: t('team.transferNode.delegateDialog.title'),
189
+ scan: t('team.transferNode.delegateDialog.scan'),
190
+ confirm: t('team.transferNode.delegateDialog.confirm'),
191
+ success: t('team.transferNode.delegateDialog.success')
192
+ },
193
+ popup: true
194
+ });
195
+ }
196
+ }, {
197
+ body: () => {
198
+ const link = (0, _util.getInviteLink)({
199
+ inviteId: inviteInfo.inviteId,
200
+ endpoint
201
+ });
202
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
203
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(Bold, {
204
+ children: t('team.transferNode.inviteDialog.createSuccessTip', {
205
+ expireDate: (0, _util.formatToDatetime)(inviteInfo.expireDate)
206
+ })
207
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
208
+ style: {
209
+ marginTop: '40px'
210
+ }
211
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_clickToCopy.default, {
212
+ children: link
213
+ })]
214
+ });
215
+ },
216
+ confirm: t('common.confirm'),
217
+ onConfirm: onSuccess
218
+ }];
219
+ const step = steps[activeStep];
220
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Dialog.default, {
221
+ title: t('team.transferNode.inviteDialog.title'),
222
+ fullWidth: true,
223
+ open: true,
224
+ showCloseButton: false,
225
+ actions: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
226
+ children: [step.cancel && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
227
+ onClick: step.onCancel,
228
+ color: "inherit",
229
+ children: step.cancel
230
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
231
+ onClick: step.onConfirm,
232
+ color: "primary",
233
+ disabled: loading,
234
+ variant: "contained",
235
+ autoFocus: true,
236
+ children: [loading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_CircularProgress.default, {
237
+ size: 16
238
+ }), step.confirm]
239
+ })]
240
+ }),
241
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_DialogContentText.default, {
242
+ component: "div",
243
+ children: typeof step.body === 'function' ? step.body() : step.body
244
+ }), !!error && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Alert.default, {
245
+ type: "error",
246
+ variant: "icon",
247
+ children: error
248
+ })]
249
+ });
250
+ }
251
+ TransferMember.propTypes = {
252
+ teamDid: _propTypes.default.string.isRequired,
253
+ onCancel: _propTypes.default.func.isRequired,
254
+ onSuccess: _propTypes.default.func.isRequired,
255
+ onError: _propTypes.default.func,
256
+ endpoint: _propTypes.default.string
257
+ };
258
+ TransferMember.defaultProps = {
259
+ onError: () => {},
260
+ endpoint: ''
261
+ };
262
+ const Bold = _styled.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n font-size: 16px;\n font-weight: bold;\n"])));
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.parseAvatar = parseAvatar;
7
+ var _urlJoin = _interopRequireDefault(require("url-join"));
8
+ var _constant = require("@abtnode/constant");
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ // eslint-disable-next-line import/prefer-default-export
11
+ function parseAvatar(avatar, teamDid, inService) {
12
+ if (avatar && avatar.startsWith(_constant.USER_AVATAR_URL_PREFIX)) {
13
+ const prefix = window.env.apiPrefix || '/';
14
+ if (inService) {
15
+ return (0, _urlJoin.default)(prefix, _constant.USER_AVATAR_PATH_PREFIX, avatar.replace(_constant.USER_AVATAR_URL_PREFIX, ''));
16
+ }
17
+ return (0, _urlJoin.default)(prefix, _constant.USER_AVATAR_PATH_PREFIX, teamDid, avatar.replace(_constant.USER_AVATAR_URL_PREFIX, ''));
18
+ }
19
+ return avatar;
20
+ }
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = PassportColorWithPermission;
7
+ var _react = require("react");
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _Box = _interopRequireDefault(require("@mui/material/Box"));
10
+ var _Dialog = _interopRequireDefault(require("@arcblock/ux/lib/Dialog"));
11
+ var _CircularProgress = _interopRequireDefault(require("@mui/material/CircularProgress"));
12
+ var _reactColor = require("react-color");
13
+ var _context = require("@arcblock/ux/lib/Locale/context");
14
+ var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
15
+ var _createPassportSvg = _interopRequireDefault(require("@abtnode/auth/lib/util/create-passport-svg"));
16
+ var _util = require("@blocklet/meta/lib/util");
17
+ var _passportColor = require("@abtnode/auth/lib/util/passport-color");
18
+ var _constant = require("@blocklet/constant");
19
+ var _toast = _interopRequireDefault(require("../../toast"));
20
+ var _node = require("../../contexts/node");
21
+ var _blocklet = require("../../contexts/blocklet");
22
+ var _util2 = require("../../util");
23
+ var _permission = require("../../permission");
24
+ var _jsxRuntime = require("react/jsx-runtime");
25
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
26
+ 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; }
27
+ 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; }
28
+ 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; }
29
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
30
+ 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); }
31
+ function PassportColor(_ref) {
32
+ let {
33
+ onCancel,
34
+ onSuccess
35
+ } = _ref;
36
+ const {
37
+ api
38
+ } = (0, _node.useNodeContext)();
39
+ const {
40
+ blocklet
41
+ } = (0, _blocklet.useBlockletContext)();
42
+ const {
43
+ t
44
+ } = (0, _context.useLocaleContext)();
45
+ const [loading, setLoading] = (0, _react.useState)(false);
46
+ const curColor = (blocklet.environments.find(x => x.key === 'BLOCKLET_PASSPORT_COLOR') || {}).value || 'auto';
47
+ const defaultColor = curColor === 'auto' ? (0, _passportColor.getPassportColorFromDid)(blocklet.appDid) : curColor;
48
+ const [color, setColor] = (0, _react.useState)(defaultColor);
49
+ const onSubmit = async () => {
50
+ const params = [{
51
+ key: _constant.BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_PASSPORT_COLOR,
52
+ value: color
53
+ }];
54
+ try {
55
+ setLoading(true);
56
+ await api.configBlocklet({
57
+ input: {
58
+ did: blocklet.meta.did,
59
+ configs: params
60
+ }
61
+ });
62
+ onSuccess();
63
+ } catch (err) {
64
+ _toast.default.error(err.message);
65
+ } finally {
66
+ setLoading(false);
67
+ }
68
+ };
69
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dialog.default, {
70
+ title: t('team.passport.color'),
71
+ onClose: onCancel,
72
+ open: true,
73
+ fullWidth: true,
74
+ actions: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
75
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
76
+ onClick: onCancel,
77
+ color: "inherit",
78
+ children: t('common.cancel')
79
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
80
+ onClick: onSubmit,
81
+ color: "primary",
82
+ disabled: loading,
83
+ variant: "contained",
84
+ autoFocus: true,
85
+ "data-cy": "color-btn-confirm",
86
+ children: [loading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_CircularProgress.default, {
87
+ size: 16
88
+ }), t('common.save')]
89
+ })]
90
+ }),
91
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
92
+ display: "flex",
93
+ justifyContent: "center",
94
+ alignItems: "center",
95
+ className: "dialog-content",
96
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactColor.ChromePicker, {
97
+ color: color,
98
+ onChange: c => setColor(c.hex)
99
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("img", {
100
+ style: {
101
+ width: 96,
102
+ marginLeft: 48
103
+ },
104
+ alt: "",
105
+ src: (0, _createPassportSvg.default)({
106
+ title: 'Owner',
107
+ issuer: (0, _util.getDisplayName)(blocklet),
108
+ issuerDid: blocklet.appDid,
109
+ ownerName: 'Your Name',
110
+ isDataUrl: true,
111
+ preferredColor: color
112
+ })
113
+ })]
114
+ })
115
+ });
116
+ }
117
+ const PassportColorInDaemon = (0, _permission.withPermission)(PassportColor, 'mutate_team');
118
+ const PassportColorInService = (0, _permission.withPermission)(PassportColor, '', _util2.BlockletAdminRoles);
119
+ function PassportColorWithPermission(props) {
120
+ const {
121
+ inService
122
+ } = (0, _node.useNodeContext)();
123
+ if (inService) {
124
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(PassportColorInService, _objectSpread({}, props));
125
+ }
126
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(PassportColorInDaemon, _objectSpread({}, props));
127
+ }
128
+ PassportColor.propTypes = {
129
+ onCancel: _propTypes.default.func.isRequired,
130
+ onSuccess: _propTypes.default.func.isRequired
131
+ };
132
+ PassportColor.defaultProps = {};
@@ -0,0 +1,271 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = PassportDetailWithPermission;
7
+ var _react = require("react");
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+ var _styled = _interopRequireDefault(require("@emotion/styled"));
10
+ var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
11
+ var _Dialog = _interopRequireDefault(require("@arcblock/ux/lib/Dialog"));
12
+ var _CircularProgress = _interopRequireDefault(require("@mui/material/CircularProgress"));
13
+ var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
14
+ var _FormControlLabel = _interopRequireDefault(require("@mui/material/FormControlLabel"));
15
+ var _Checkbox = _interopRequireDefault(require("@mui/material/Checkbox"));
16
+ var _context = require("@arcblock/ux/lib/Locale/context");
17
+ var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
18
+ var _EditIcon = _interopRequireDefault(require("@arcblock/icons/lib/EditIcon"));
19
+ var _DeleteIcon = _interopRequireDefault(require("@arcblock/icons/lib/DeleteIcon"));
20
+ var _toast = _interopRequireDefault(require("../../toast"));
21
+ var _node = require("../../contexts/node");
22
+ var _team = require("../../contexts/team");
23
+ var _util = require("../../util");
24
+ var _permission = require("../../permission");
25
+ var _confirm = _interopRequireDefault(require("../../confirm"));
26
+ var _mutateRole = _interopRequireDefault(require("./mutate-role"));
27
+ var _jsxRuntime = require("react/jsx-runtime");
28
+ var _templateObject, _templateObject2;
29
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
30
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
31
+ 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; }
32
+ 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; }
33
+ 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; }
34
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
35
+ 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); }
36
+ function PassportDetail(_ref) {
37
+ let {
38
+ onCancel,
39
+ onSuccess,
40
+ onDelete,
41
+ roleName,
42
+ hasPermission
43
+ } = _ref;
44
+ const {
45
+ api
46
+ } = (0, _node.useNodeContext)();
47
+ const {
48
+ roles,
49
+ permissions,
50
+ teamDid,
51
+ refresh: refreshTeam,
52
+ isNodeTeam
53
+ } = (0, _team.useTeamContext)();
54
+ const {
55
+ t
56
+ } = (0, _context.useLocaleContext)();
57
+ const [binds, setBinds] = (0, _react.useState)([]);
58
+ const [updateForm, setUpdateForm] = (0, _react.useState)(false);
59
+ const [delConfirm, setDelConfirm] = (0, _react.useState)(null);
60
+ const [loading, setLoading] = (0, _react.useState)(false);
61
+ const role = (0, _cloneDeep.default)(roles.find(x => x.name === roleName));
62
+ const isProtected = (0, _util.isProtectedRole)(roleName);
63
+ const deletePassport = async name => {
64
+ if (loading) return;
65
+ try {
66
+ setLoading(true);
67
+ await api.deleteRole({
68
+ input: {
69
+ teamDid,
70
+ name
71
+ }
72
+ });
73
+ onDelete();
74
+ } catch (err) {
75
+ _toast.default.error(err.message);
76
+ } finally {
77
+ setLoading(false);
78
+ setDelConfirm(null);
79
+ }
80
+ };
81
+ const getData = async (team, name) => {
82
+ const res = await api.getPermissionsByRole({
83
+ input: {
84
+ teamDid: team,
85
+ role: {
86
+ name
87
+ }
88
+ }
89
+ });
90
+ const permissionList = res.permissions || [];
91
+ const bindList = permissions.map(x => _objectSpread(_objectSpread({}, x), {}, {
92
+ bind: permissionList.some(y => y.name === x.name)
93
+ }));
94
+ setBinds(bindList);
95
+ };
96
+ const onBind = async () => {
97
+ setLoading(true);
98
+ const grantNames = binds.filter(x => x.bind).map(x => x.name);
99
+ try {
100
+ await api.updatePermissionsForRole({
101
+ input: {
102
+ teamDid,
103
+ roleName: role.name,
104
+ grantNames
105
+ }
106
+ });
107
+ _toast.default.success(t('common.saveSuccess'));
108
+ onSuccess();
109
+ } catch (err) {
110
+ _toast.default.error((0, _util.formatError)(err));
111
+ } finally {
112
+ setLoading(false);
113
+ }
114
+ };
115
+ (0, _react.useEffect)(() => {
116
+ if (teamDid && roleName) {
117
+ getData(teamDid, roleName);
118
+ }
119
+ }, [teamDid, roleName]); // eslint-disable-line
120
+
121
+ const readPermissionsOnly = isNodeTeam || !hasPermission;
122
+ let bindPermission = null;
123
+ if (isNodeTeam) {
124
+ bindPermission = /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
125
+ className: "bind",
126
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
127
+ className: "title",
128
+ children: t('common.permission')
129
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
130
+ className: "list",
131
+ children: binds
132
+ // if readonly, show obtained permissions only
133
+ .filter(x => readPermissionsOnly ? x.bind : true).map(x => /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
134
+ className: "item",
135
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_FormControlLabel.default, {
136
+ control: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Checkbox.default, {
137
+ disabled: readPermissionsOnly,
138
+ checked: x.bind,
139
+ onChange: () => {
140
+ setBinds(state => state.map(y => {
141
+ if (y.name === x.name) {
142
+ y.bind = !y.bind;
143
+ }
144
+ return y;
145
+ }));
146
+ },
147
+ name: x.name
148
+ }),
149
+ label: x.description
150
+ })
151
+ }))
152
+ })]
153
+ });
154
+ }
155
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Dialog.default, {
156
+ title: t('common.passport'),
157
+ onClose: onCancel,
158
+ open: true,
159
+ fullWidth: true,
160
+ toolbar: hasPermission && !isProtected && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
161
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {
162
+ onClick: () => setUpdateForm(role),
163
+ "data-cy": "edit-passport-".concat(role.name),
164
+ size: "large",
165
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_EditIcon.default, {
166
+ fill: "#bfbfbf"
167
+ })
168
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {
169
+ onClick: () => setDelConfirm({
170
+ title: t('team.passport.delete.title'),
171
+ description: t('team.passport.delete.description', {
172
+ name: role.title
173
+ }),
174
+ confirm: t('common.delConfirm'),
175
+ cancel: t('common.cancel'),
176
+ onConfirm: () => {
177
+ deletePassport(role.name);
178
+ },
179
+ onCancel: () => {
180
+ setLoading(false);
181
+ setDelConfirm(null);
182
+ }
183
+ }),
184
+ "data-cy": "delete-passport-".concat(role.name),
185
+ size: "large",
186
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_DeleteIcon.default, {
187
+ "data-cy": "close-passport-dialog",
188
+ fill: "#bfbfbf"
189
+ })
190
+ })]
191
+ }),
192
+ actions: isNodeTeam && !readPermissionsOnly && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
193
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
194
+ onClick: onCancel,
195
+ color: "inherit",
196
+ children: t('common.cancel')
197
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
198
+ onClick: onBind,
199
+ color: "primary",
200
+ disabled: loading || !role,
201
+ variant: "contained",
202
+ autoFocus: true,
203
+ "data-cy": "bind-permission-btn-confirm",
204
+ children: [loading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_CircularProgress.default, {
205
+ size: 16
206
+ }), t('common.save')]
207
+ })]
208
+ }),
209
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(Div, {
210
+ children: [!role && /*#__PURE__*/(0, _jsxRuntime.jsx)(Center, {
211
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_CircularProgress.default, {})
212
+ }), role && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
213
+ className: "dialog-content",
214
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
215
+ className: "header",
216
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
217
+ className: "title",
218
+ children: role.title
219
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
220
+ className: "description",
221
+ style: {
222
+ marginTop: isNodeTeam ? 16 : 48
223
+ },
224
+ children: role.description
225
+ })]
226
+ }), bindPermission]
227
+ })]
228
+ }), updateForm && /*#__PURE__*/(0, _jsxRuntime.jsx)(_mutateRole.default, {
229
+ teamDid: teamDid,
230
+ onCancel: () => setUpdateForm(null),
231
+ onSuccess: () => {
232
+ setUpdateForm(null);
233
+ refreshTeam();
234
+ },
235
+ mode: "update",
236
+ roleName: updateForm.name,
237
+ item: updateForm
238
+ }), delConfirm && /*#__PURE__*/(0, _jsxRuntime.jsx)(_confirm.default, {
239
+ title: delConfirm.title,
240
+ description: delConfirm.description,
241
+ confirm: delConfirm.confirm,
242
+ cancel: delConfirm.cancel,
243
+ params: delConfirm.params,
244
+ onConfirm: delConfirm.onConfirm,
245
+ onCancel: delConfirm.onCancel
246
+ })]
247
+ });
248
+ }
249
+ const PassportDetailInDaemon = (0, _permission.withPermission)(PassportDetail, 'mutate_team');
250
+ const PassportDetailInService = (0, _permission.withPermission)(PassportDetail, '', _util.BlockletAdminRoles);
251
+ function PassportDetailWithPermission(props) {
252
+ const {
253
+ inService
254
+ } = (0, _node.useNodeContext)();
255
+ if (inService) {
256
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(PassportDetailInService, _objectSpread({}, props));
257
+ }
258
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(PassportDetailInDaemon, _objectSpread({}, props));
259
+ }
260
+ PassportDetail.propTypes = {
261
+ roleName: _propTypes.default.string.isRequired,
262
+ onCancel: _propTypes.default.func.isRequired,
263
+ onSuccess: _propTypes.default.func.isRequired,
264
+ onDelete: _propTypes.default.func.isRequired,
265
+ hasPermission: _propTypes.default.bool
266
+ };
267
+ PassportDetail.defaultProps = {
268
+ hasPermission: false
269
+ };
270
+ const Div = _styled.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .header {\n .title {\n font-weight: 400;\n font-size: 24px;\n line-height: 28px;\n color: #222222;\n }\n\n .description {\n margin-top: 16px;\n font-weight: 400;\n font-size: 16px;\n line-height: 19px;\n color: #999999;\n }\n }\n\n .bind {\n margin-top: 24px;\n .title {\n font-weight: 400;\n font-size: 16px;\n line-height: 19px;\n color: #666666;\n margin-bottom: 24px;\n }\n .item {\n margin-top: 24px;\n }\n\n .MuiFormControlLabel-label {\n font-weight: 400;\n font-size: 16px;\n line-height: 19px;\n color: #666;\n }\n\n .PrivateSwitchBase-root-45 {\n padding: 0;\n padding-right: 12px;\n }\n }\n"])));
271
+ 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"])));