@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,742 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = BlockletComponent;
7
+ var _react = require("react");
8
+ var _styled = _interopRequireDefault(require("@emotion/styled"));
9
+ var _propTypes = _interopRequireDefault(require("prop-types"));
10
+ var _semver = _interopRequireDefault(require("semver"));
11
+ var _Dialog = _interopRequireDefault(require("@mui/material/Dialog"));
12
+ var _Box = _interopRequireDefault(require("@mui/material/Box"));
13
+ var _DialogContent = _interopRequireDefault(require("@mui/material/DialogContent"));
14
+ var _DialogTitle = _interopRequireDefault(require("@mui/material/DialogTitle"));
15
+ var _DialogActions = _interopRequireDefault(require("@mui/material/DialogActions"));
16
+ var _Update = _interopRequireDefault(require("@mui/icons-material/Update"));
17
+ var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
18
+ var _Add = _interopRequireDefault(require("@mui/icons-material/Add"));
19
+ var _Badge = _interopRequireDefault(require("@mui/material/Badge"));
20
+ var _SettingsOutlined = _interopRequireDefault(require("@mui/icons-material/SettingsOutlined"));
21
+ var _InfoOutlined = _interopRequireDefault(require("@mui/icons-material/InfoOutlined"));
22
+ var _Launch = _interopRequireDefault(require("@mui/icons-material/Launch"));
23
+ var _Grid = _interopRequireDefault(require("@mui/material/Grid"));
24
+ var _Collapse = _interopRequireDefault(require("@mui/material/Collapse"));
25
+ var _Tooltip = _interopRequireDefault(require("@mui/material/Tooltip"));
26
+ var _ArrowForward = _interopRequireDefault(require("@mui/icons-material/ArrowForward"));
27
+ var _ExpandMore = _interopRequireDefault(require("@mui/icons-material/ExpandMore"));
28
+ var _ChevronRight = _interopRequireDefault(require("@mui/icons-material/ChevronRight"));
29
+ var _Spinner = _interopRequireDefault(require("@arcblock/ux/lib/Spinner"));
30
+ var _InfoRow = _interopRequireDefault(require("@arcblock/ux/lib/InfoRow"));
31
+ var _context = require("@arcblock/ux/lib/Locale/context");
32
+ var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
33
+ var _Empty = _interopRequireDefault(require("@arcblock/ux/lib/Empty"));
34
+ var _util = require("@blocklet/meta/lib/util");
35
+ var _deletingBlocklets = require("../../contexts/deleting-blocklets");
36
+ var _didAddress = _interopRequireDefault(require("../../did-address"));
37
+ var _tag = _interopRequireDefault(require("../../tag"));
38
+ var _toast = _interopRequireDefault(require("../../toast"));
39
+ var _blockletSource = _interopRequireDefault(require("../blocklet-source"));
40
+ var _runtimeInfo = _interopRequireDefault(require("../runtime-info"));
41
+ var _status = _interopRequireDefault(require("../status"));
42
+ var _version = _interopRequireDefault(require("../version"));
43
+ var _node = require("../../contexts/node");
44
+ var _util2 = require("../../util");
45
+ var _permission = _interopRequireDefault(require("../../permission"));
46
+ var _avatar = _interopRequireDefault(require("../avatar"));
47
+ var _mode = _interopRequireDefault(require("../mode"));
48
+ var _configuration = _interopRequireDefault(require("./configuration"));
49
+ var _delete = _interopRequireDefault(require("./delete"));
50
+ var _jsxRuntime = require("react/jsx-runtime");
51
+ const _excluded = ["blocklet", "onUpdate", "getComponentUrl", "AddComponent"];
52
+ var _templateObject, _templateObject2;
53
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
54
+ 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; }
55
+ 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; }
56
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
57
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
58
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
59
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
60
+ const getEngineRows = (engine, t) => {
61
+ if (!engine) {
62
+ return [];
63
+ }
64
+ return [{
65
+ name: t('common.name'),
66
+ value: engine.displayName
67
+ }, {
68
+ name: t('common.description'),
69
+ value: engine.description
70
+ }, {
71
+ name: t('common.version'),
72
+ value: /*#__PURE__*/(0, _jsxRuntime.jsx)(_tag.default, {
73
+ children: engine.version
74
+ })
75
+ }];
76
+ };
77
+ const getSourceInfo = blocklet => {
78
+ const {
79
+ source,
80
+ deployedFrom,
81
+ bundleSource
82
+ } = blocklet;
83
+ if (source) {
84
+ return {
85
+ source,
86
+ deployedFrom
87
+ };
88
+ }
89
+ if (!bundleSource) {
90
+ return {
91
+ source: 'upload',
92
+ deployedFrom
93
+ };
94
+ }
95
+ if (bundleSource.url) {
96
+ return {
97
+ source: 'url',
98
+ deployedFrom: deployedFrom || Array.isArray(bundleSource.url) ? bundleSource.url[0] : bundleSource.url
99
+ };
100
+ }
101
+ if (bundleSource.store) {
102
+ return {
103
+ source: 'registry',
104
+ deployedFrom: deployedFrom || Array.isArray(bundleSource.store) ? bundleSource.store[0] : bundleSource.store
105
+ };
106
+ }
107
+ return {};
108
+ };
109
+ function ComponentItem(_ref) {
110
+ var _blocklet$children;
111
+ let {
112
+ blocklet,
113
+ ancestors,
114
+ depth,
115
+ onRemove,
116
+ getComponentUrl
117
+ } = _ref;
118
+ const {
119
+ t
120
+ } = (0, _react.useContext)(_context.LocaleContext);
121
+ const [expand, setExpand] = (0, _react.useState)(true);
122
+ const [componentInfo, setComponentInfo] = (0, _react.useState)();
123
+ const {
124
+ deletingBlocklets: deletingComponents
125
+ } = (0, _deletingBlocklets.useDeletingBlockletContext)();
126
+ let {
127
+ status
128
+ } = blocklet;
129
+ if (depth <= 1 && deletingComponents.includes(blocklet.meta.did)) {
130
+ status = 'deleting';
131
+ }
132
+ const mountPoint = "/".concat(ancestors.map(x => x.mountPoint || '/').join('/'), "/").concat(blocklet.mountPoint || '/').replace(/\/+/g, '/');
133
+
134
+ // hide root's status and only display specific status
135
+ const showStatus = !!ancestors.length && ['downloading', 'deleting', 'starting'].includes(status);
136
+ const canExpand = depth > 0 && blocklet.children.length > 0;
137
+ const expandIcon = /*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {
138
+ size: "small",
139
+ children: expand ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_ExpandMore.default, {
140
+ fontSize: "inherit"
141
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_ChevronRight.default, {
142
+ fontSize: "inherit"
143
+ })
144
+ });
145
+ const root = ancestors[0] || blocklet;
146
+ const href = getComponentUrl(mountPoint);
147
+ const renderRows = rows => rows.map(row => {
148
+ if (row.name === t('common.did') || row.name === t('blocklet.appId')) {
149
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_InfoRow.default, {
150
+ valueComponent: "div",
151
+ nameWidth: 120,
152
+ name: row.name,
153
+ nameFormatter: () => row.name,
154
+ children: row.value
155
+ }, row.name);
156
+ }
157
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_InfoRow.default, {
158
+ valueComponent: "div",
159
+ nameWidth: 120,
160
+ name: row.name,
161
+ children: row.value
162
+ }, row.name);
163
+ });
164
+ const sourceInfo = componentInfo ? getSourceInfo(componentInfo) : {};
165
+ const componentRows = componentInfo ? [{
166
+ name: t('common.name'),
167
+ value: (0, _util.getDisplayName)(componentInfo, true)
168
+ }, {
169
+ name: t('common.version'),
170
+ value: /*#__PURE__*/(0, _jsxRuntime.jsx)(_version.default, {
171
+ blocklet: componentInfo,
172
+ checkUpgrade: false
173
+ })
174
+ }, {
175
+ name: t('common.status'),
176
+ value: /*#__PURE__*/(0, _jsxRuntime.jsx)(_status.default, {
177
+ status: status,
178
+ source: componentInfo.source
179
+ })
180
+ }, {
181
+ name: t('common.mountPoint'),
182
+ value: mountPoint
183
+ }, {
184
+ name: t('common.group'),
185
+ value: /*#__PURE__*/(0, _jsxRuntime.jsx)(_tag.default, {
186
+ type: "success",
187
+ children: componentInfo.meta.group
188
+ })
189
+ }, {
190
+ name: t('blocklet.overview.source'),
191
+ value: /*#__PURE__*/(0, _jsxRuntime.jsx)(_blockletSource.default, {
192
+ sourceInfo: sourceInfo,
193
+ blocklet: blocklet
194
+ })
195
+ }, {
196
+ name: t('blocklet.overview.deployedFrom'),
197
+ value: sourceInfo.deployedFrom || '-'
198
+ }, {
199
+ name: t('common.did'),
200
+ value: /*#__PURE__*/(0, _jsxRuntime.jsx)(_didAddress.default, {
201
+ did: componentInfo.meta.did
202
+ })
203
+ }, {
204
+ name: t('common.author'),
205
+ value: (0, _util2.formatPerson)(componentInfo.meta.author)
206
+ }, {
207
+ name: t('common.runtimeInfo'),
208
+ value: /*#__PURE__*/(0, _jsxRuntime.jsx)(_runtimeInfo.default, {
209
+ blocklet: componentInfo,
210
+ noRunningMessage: t('--')
211
+ })
212
+ }, {
213
+ name: t('common.engine'),
214
+ value: getEngineRows(componentInfo.engine, t).map(_ref2 => {
215
+ let {
216
+ name,
217
+ value
218
+ } = _ref2;
219
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_InfoRow.default, {
220
+ style: {
221
+ marginBottom: 4
222
+ },
223
+ nameWidth: 120,
224
+ name: name,
225
+ children: value
226
+ }, name);
227
+ })
228
+ }].filter(Boolean) : [];
229
+ let deleteDisabledTip = '';
230
+ if (depth !== 1 || !blocklet.dynamic) {
231
+ deleteDisabledTip = t('blocklet.component.tip.notDynamic');
232
+ } else if ((0, _util2.isInProgress)(root.status) || depth === 1 && deletingComponents.includes(blocklet.meta.did)) {
233
+ deleteDisabledTip = t('blocklet.component.tip.stopBlocklet');
234
+ }
235
+ return [(depth > 0 || blocklet.meta.group !== 'gateway') && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
236
+ display: "flex",
237
+ py: 2,
238
+ className: "component-item",
239
+ justifyContent: "space-between",
240
+ alignItems: "center",
241
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
242
+ pl: Math.max((depth - 1) * 2, 0),
243
+ width: {
244
+ xs: 300,
245
+ md: 400
246
+ },
247
+ display: "flex",
248
+ alignItems: "center",
249
+ style: {
250
+ cursor: canExpand ? 'pointer' : 'cursor'
251
+ },
252
+ onClick: () => canExpand && setExpand(!expand),
253
+ children: [canExpand ? expandIcon : /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
254
+ width: 28
255
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_avatar.default, {
256
+ blocklet: blocklet,
257
+ ancestors: ancestors
258
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
259
+ ml: "16px",
260
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
261
+ style: {
262
+ color: '#222',
263
+ fontSize: 18
264
+ },
265
+ children: (0, _util.getDisplayName)(blocklet, true)
266
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
267
+ display: "flex",
268
+ alignItems: "center",
269
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_version.default, {
270
+ blocklet: blocklet,
271
+ checkUpgrade: false
272
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_mode.default, {
273
+ style: {
274
+ marginLeft: 4
275
+ },
276
+ mode: blocklet.mode || ''
277
+ }), showStatus && /*#__PURE__*/(0, _jsxRuntime.jsx)(_status.default, {
278
+ style: {
279
+ marginLeft: 4
280
+ },
281
+ status: status,
282
+ source: blocklet.source
283
+ })]
284
+ })]
285
+ })]
286
+ }, blocklet), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
287
+ sx: {
288
+ display: {
289
+ xs: 'none',
290
+ md: 'flex'
291
+ }
292
+ },
293
+ alignItems: "center",
294
+ flexGrow: "1",
295
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("a", {
296
+ target: "_blank",
297
+ href: href,
298
+ rel: "noopener noreferrer",
299
+ title: href,
300
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
301
+ maxWidth: 400,
302
+ sx: {
303
+ color: 'secondary.main',
304
+ fontSize: 18,
305
+ px: 2
306
+ },
307
+ overflow: "hidden",
308
+ whiteSpace: "nowrap",
309
+ textOverflow: "ellipsis",
310
+ children: mountPoint
311
+ })
312
+ })
313
+ }, mountPoint), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
314
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Tooltip.default, {
315
+ title: t('common.visit'),
316
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("a", {
317
+ target: "_blank",
318
+ href: href,
319
+ rel: "noopener noreferrer",
320
+ title: href,
321
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {
322
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Launch.default, {})
323
+ })
324
+ })
325
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tooltip.default, {
326
+ title: t('common.overview'),
327
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {
328
+ onClick: () => setComponentInfo(blocklet),
329
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_InfoOutlined.default, {})
330
+ })
331
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_configuration.default, {
332
+ blocklet: blocklet,
333
+ ancestors: ancestors,
334
+ children: _ref3 => {
335
+ let {
336
+ open
337
+ } = _ref3;
338
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tooltip.default, {
339
+ title: t('common.config'),
340
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(StyledBadge, {
341
+ color: "error",
342
+ badgeContent: "",
343
+ variant: "dot",
344
+ invisible: !(0, _util.getComponentMissingConfigs)(blocklet, ancestors).length,
345
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {
346
+ onClick: open,
347
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_SettingsOutlined.default, {})
348
+ })
349
+ })
350
+ }, "config");
351
+ }
352
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_delete.default, {
353
+ blocklet: root,
354
+ component: blocklet,
355
+ remove: onRemove,
356
+ disabled: !!deleteDisabledTip,
357
+ tip: deleteDisabledTip
358
+ })]
359
+ }, "actions")]
360
+ }, "group-not-gateway-box"), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
361
+ ml: Math.max((depth - 1) * 2, 0),
362
+ sx: {
363
+ borderBottom: 1,
364
+ borderColor: 'rgba(0,0,0,0.12)'
365
+ }
366
+ }, "group-collapse-box"), (_blocklet$children = blocklet.children) !== null && _blocklet$children !== void 0 && _blocklet$children.length ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Collapse.default, {
367
+ in: expand,
368
+ children: blocklet.children.map(x => /*#__PURE__*/(0, _jsxRuntime.jsx)(ComponentItem, {
369
+ blocklet: x,
370
+ ancestors: [...ancestors, blocklet],
371
+ depth: depth + 1,
372
+ onRemove: onRemove,
373
+ getComponentUrl: getComponentUrl
374
+ }, "".concat(depth + 1, "-").concat(x.meta.did)))
375
+ }, "blocklet-collapse") : null, !!componentInfo && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dialog.default, {
376
+ open: true,
377
+ fullWidth: true,
378
+ maxWidth: "md",
379
+ onClose: () => {
380
+ setComponentInfo(null);
381
+ },
382
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
383
+ paddingY: 1.5,
384
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_DialogTitle.default, {
385
+ children: t('common.componentBasicInfo')
386
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_DialogContent.default, {
387
+ children: renderRows(componentRows)
388
+ })]
389
+ }, "dialog-wrapper")
390
+ }, "base-info-dialog")];
391
+ }
392
+ ComponentItem.propTypes = {
393
+ blocklet: _propTypes.default.object.isRequired,
394
+ ancestors: _propTypes.default.array,
395
+ depth: _propTypes.default.number,
396
+ onRemove: _propTypes.default.func,
397
+ getComponentUrl: _propTypes.default.func
398
+ };
399
+ ComponentItem.defaultProps = {
400
+ ancestors: [],
401
+ depth: 0,
402
+ onRemove: () => {},
403
+ getComponentUrl: () => window.location.origin
404
+ };
405
+ const StyledBadge = (0, _styled.default)(_Badge.default)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .BaseBadge-badge {\n top: ", "px;\n right: ", "px;\n }\n"])), props => props.top * 8 || 6, props => props.right * 8 || 6);
406
+ function BlockletComponent(_ref4) {
407
+ var _blocklet$meta;
408
+ let {
409
+ blocklet,
410
+ onUpdate,
411
+ getComponentUrl,
412
+ AddComponent
413
+ } = _ref4,
414
+ rest = _objectWithoutProperties(_ref4, _excluded);
415
+ const {
416
+ t
417
+ } = (0, _react.useContext)(_context.LocaleContext);
418
+ const {
419
+ api,
420
+ inService
421
+ } = (0, _node.useNodeContext)();
422
+ const {
423
+ addDeletingDid,
424
+ removeDeletingDid,
425
+ matchDeletingDid
426
+ } = (0, _deletingBlocklets.useDeletingBlockletContext)();
427
+ const [loading, setLoading] = (0, _react.useState)(false);
428
+ const [updateConfirm, setUpdateConfirm] = (0, _react.useState)(null);
429
+ const [showUpdateDot, setShowUpdateDot] = (0, _react.useState)(false);
430
+ const components = [...blocklet.children] || [];
431
+ if (blocklet.meta.group !== 'gateway') {
432
+ // add root blocklet to table list
433
+ components.unshift(blocklet);
434
+ }
435
+ matchDeletingDid(components.map(e => e.meta.did));
436
+ (0, _react.useEffect)(() => {
437
+ if (blocklet && !(0, _util2.isInProgress)(blocklet.status)) {
438
+ api.getLatestBlockletVersion({
439
+ input: {
440
+ did: blocklet.meta.did,
441
+ version: blocklet.meta.version
442
+ }
443
+ }).then(res => {
444
+ const {
445
+ version
446
+ } = res.data || {};
447
+ if (version && _semver.default.gt(version, blocklet.meta.version)) {
448
+ setShowUpdateDot(true);
449
+ }
450
+ }).catch(err => {
451
+ console.error(err.message);
452
+ });
453
+ }
454
+ }, [blocklet === null || blocklet === void 0 ? void 0 : (_blocklet$meta = blocklet.meta) === null || _blocklet$meta === void 0 ? void 0 : _blocklet$meta.did]); // eslint-disable-line
455
+
456
+ const checkForUpdates = async () => {
457
+ if (loading) {
458
+ return;
459
+ }
460
+ setLoading(true);
461
+ try {
462
+ // check app version
463
+ const {
464
+ version,
465
+ registryUrl
466
+ } = (await api.getLatestBlockletVersion({
467
+ input: {
468
+ did: blocklet.meta.did,
469
+ version: blocklet.meta.version
470
+ }
471
+ })).data || {};
472
+ if (version && _semver.default.gt(version, blocklet.meta.version)) {
473
+ setUpdateConfirm({
474
+ type: 'app',
475
+ params: {
476
+ version,
477
+ registryUrl
478
+ },
479
+ list: [{
480
+ name: (0, _util.getDisplayName)(blocklet),
481
+ version: blocklet.meta.version,
482
+ newVersion: version
483
+ }]
484
+ });
485
+ setLoading(false);
486
+ return;
487
+ }
488
+
489
+ // check child component version
490
+ const {
491
+ updateId,
492
+ updateList
493
+ } = (await api.checkComponentsForUpdates({
494
+ input: {
495
+ did: blocklet.meta.did
496
+ }
497
+ })).preUpdateInfo || {};
498
+ setLoading(false);
499
+ if (!updateId) {
500
+ _toast.default.info(t('blocklet.component.noUpdate'));
501
+ return;
502
+ }
503
+ const list = [];
504
+ (0, _util.forEachChildSync)(blocklet, (b, _ref5) => {
505
+ let {
506
+ id,
507
+ ancestors
508
+ } = _ref5;
509
+ const updateItem = updateList.find(x => x.id === id);
510
+ if (updateItem) {
511
+ const name = ancestors.slice(1).concat(b).map(x => x.meta.title || x.meta.name).join(' / ');
512
+ list.push({
513
+ name,
514
+ version: b.meta.version,
515
+ newVersion: updateItem.meta.version
516
+ });
517
+ }
518
+ });
519
+ setUpdateConfirm({
520
+ type: 'child',
521
+ params: {
522
+ updateId
523
+ },
524
+ list
525
+ });
526
+ } catch (err) {
527
+ setLoading(false);
528
+ _toast.default.error((0, _util2.formatError)(err));
529
+ }
530
+ };
531
+ const onConfirmUpdate = async () => {
532
+ if (loading) {
533
+ return;
534
+ }
535
+ let fn;
536
+ let input;
537
+ if (updateConfirm.type === 'app') {
538
+ fn = api.upgradeBlocklet.bind(api);
539
+ input = {
540
+ did: blocklet.meta.did,
541
+ version: updateConfirm.params.version,
542
+ registryUrl: updateConfirm.params.registryUrl || ''
543
+ };
544
+ } else {
545
+ fn = api.upgradeComponents.bind(api);
546
+ input = {
547
+ updateId: updateConfirm.params.updateId,
548
+ rootDid: blocklet.meta.did
549
+ };
550
+ }
551
+ try {
552
+ setLoading(true);
553
+ await fn({
554
+ input
555
+ });
556
+ setLoading(false);
557
+ setUpdateConfirm(null);
558
+ setShowUpdateDot(null);
559
+ } catch (error) {
560
+ setLoading(false);
561
+ _toast.default.error((0, _util2.formatError)(error));
562
+ }
563
+ };
564
+ const removeComponent = async (d, type) => {
565
+ addDeletingDid(d.meta.did);
566
+ try {
567
+ await api.deleteComponent({
568
+ input: {
569
+ did: d.meta.did,
570
+ keepData: type === 'keepData',
571
+ rootDid: blocklet.meta.did
572
+ }
573
+ });
574
+ await (0, _util2.sleep)(800);
575
+ } catch (err) {
576
+ _toast.default.error((0, _util2.formatError)(err));
577
+ removeDeletingDid(d.meta.did);
578
+ }
579
+ };
580
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Div, _objectSpread(_objectSpread({
581
+ component: "div"
582
+ }, rest), {}, {
583
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
584
+ display: "flex",
585
+ justifyContent: "space-between",
586
+ alignItems: "center",
587
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
588
+ className: "title",
589
+ children: [t('common.components'), /*#__PURE__*/(0, _jsxRuntime.jsx)(_permission.default, {
590
+ permission: inService ? '' : 'mutate_blocklet',
591
+ role: inService ? _util2.BlockletAdminRoles : [],
592
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(StyledBadge, {
593
+ top: 1.2,
594
+ right: 0.4,
595
+ color: "error",
596
+ badgeContent: "",
597
+ variant: "dot",
598
+ invisible: !showUpdateDot,
599
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
600
+ disabled: loading || (0, _util2.isInProgress)(blocklet.status),
601
+ color: "secondary",
602
+ onClick: () => {
603
+ checkForUpdates();
604
+ },
605
+ "data-cy": "check-for-updates",
606
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
607
+ mr: 0.5,
608
+ display: "flex",
609
+ children: loading ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner.default, {
610
+ size: [16, 10]
611
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_Update.default, {
612
+ style: {
613
+ fontSize: '1em'
614
+ }
615
+ })
616
+ }), t('blocklet.component.checkUpdateTitle')]
617
+ })
618
+ })
619
+ })]
620
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_permission.default, {
621
+ permission: "mutate_blocklet",
622
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(AddComponent, {
623
+ blocklet: blocklet,
624
+ children: _ref6 => {
625
+ let {
626
+ open
627
+ } = _ref6;
628
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
629
+ disabled: loading || (0, _util2.isInProgress)(blocklet.status),
630
+ variant: "text",
631
+ color: "primary",
632
+ "data-cy": "add-component",
633
+ onClick: open,
634
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Add.default, {
635
+ style: {
636
+ fontSize: '1.3em',
637
+ marginRight: 4
638
+ }
639
+ }), t('blocklet.component.add')]
640
+ });
641
+ }
642
+ })
643
+ })]
644
+ }), components && components.length ? [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
645
+ mt: 2,
646
+ ml: {
647
+ xs: '-16px',
648
+ md: '-28px'
649
+ },
650
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ComponentItem, {
651
+ blocklet: blocklet,
652
+ onRemove: removeComponent,
653
+ getComponentUrl: getComponentUrl
654
+ }, "0-".concat(blocklet.meta.did))
655
+ }, "top-blocklet-".concat(blocklet.meta.did))] : /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
656
+ mt: 8,
657
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Empty.default, {
658
+ children: t('blocklet.component.noComponent')
659
+ })
660
+ }), !!updateConfirm && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dialog.default, {
661
+ open: true,
662
+ fullWidth: true,
663
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
664
+ paddingY: 1.5,
665
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_DialogTitle.default, {
666
+ children: t('blocklet.component.updateTitle')
667
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
668
+ component: _DialogContent.default,
669
+ py: 4,
670
+ ml: 4,
671
+ children: updateConfirm.list.map(x => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
672
+ mt: 3,
673
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
674
+ item: true,
675
+ xs: 5,
676
+ children: x.name
677
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Grid.default, {
678
+ fontSize: "h6.fontSize",
679
+ container: true,
680
+ spacing: 3,
681
+ alignItems: "center",
682
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Grid.default, {
683
+ item: true,
684
+ xs: 2,
685
+ children: x.version
686
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Grid.default, {
687
+ item: true,
688
+ xs: 1,
689
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ArrowForward.default, {
690
+ style: {
691
+ fontSize: '0.9em'
692
+ }
693
+ })
694
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Grid.default, {
695
+ item: true,
696
+ xs: 2,
697
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
698
+ color: "secondary.main",
699
+ children: x.newVersion
700
+ })
701
+ })]
702
+ })]
703
+ }, "".concat(x.name, "-").concat(x.newVersion)))
704
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_DialogActions.default, {
705
+ style: {
706
+ padding: '8px 24px 24px'
707
+ },
708
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
709
+ onClick: () => {
710
+ setUpdateConfirm(null);
711
+ },
712
+ children: t('common.cancel')
713
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
714
+ onClick: e => {
715
+ e.stopPropagation();
716
+ onConfirmUpdate();
717
+ },
718
+ color: "primary",
719
+ disabled: loading,
720
+ variant: "contained",
721
+ autoFocus: true,
722
+ children: [loading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner.default, {
723
+ size: [16, 10]
724
+ }), t('common.update')]
725
+ })]
726
+ })]
727
+ })
728
+ })]
729
+ }));
730
+ }
731
+ BlockletComponent.propTypes = {
732
+ blocklet: _propTypes.default.object.isRequired,
733
+ onUpdate: _propTypes.default.func,
734
+ getComponentUrl: _propTypes.default.func,
735
+ AddComponent: _propTypes.default.element
736
+ };
737
+ BlockletComponent.defaultProps = {
738
+ onUpdate: () => {},
739
+ getComponentUrl: () => window.location.origin,
740
+ AddComponent: () => {}
741
+ };
742
+ const Div = _styled.default.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n .title {\n font-size: 1.2rem;\n font-weight: bold;\n margin-bottom: ", ";\n }\n\n @keyframes showDelay {\n 0% {\n opacity: 0;\n }\n\n 100% {\n opacity: 1;\n }\n }\n\n .component-item {\n animation: showDelay 0.75s ease 1;\n }\n"])), props => props.theme.spacing(1));