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