@abtnode/ux 1.8.33 → 1.8.35

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 (39) hide show
  1. package/lib/blocklet/component/environment.js +1 -1
  2. package/lib/blocklet/component/index.js +61 -31
  3. package/lib/blocklet/component/line.js +28 -0
  4. package/lib/blocklet/component/setting.js +1 -1
  5. package/lib/blocklet/configuration.js +180 -13
  6. package/lib/blocklet/overview.js +127 -10
  7. package/lib/blocklet/router/action/add-domain-alias.js +171 -0
  8. package/lib/blocklet/router/action/add-rule.js +196 -0
  9. package/lib/blocklet/router/action/config-routing-rule.js +125 -0
  10. package/lib/blocklet/router/action/delete-domain-alias.js +107 -0
  11. package/lib/blocklet/router/action/delete-rule.js +114 -0
  12. package/lib/blocklet/router/action/update-rule.js +195 -0
  13. package/lib/blocklet/router/domain-actions.js +71 -0
  14. package/lib/blocklet/router/domain-status.js +96 -0
  15. package/lib/blocklet/router/rule-actions.js +75 -0
  16. package/lib/blocklet/router/rule-list.js +179 -0
  17. package/lib/blocklet/router/util.js +146 -0
  18. package/lib/blocklet/types.js +25 -0
  19. package/lib/blocklet/util.js +105 -9
  20. package/lib/blocklet/version.js +1 -1
  21. package/lib/certificate.js +110 -0
  22. package/lib/contexts/blocklet.js +19 -0
  23. package/lib/delete-confirm.js +125 -0
  24. package/lib/form/form-text-input.js +9 -2
  25. package/lib/hooks/blocklet.js +171 -0
  26. package/lib/hooks/url-evaluation.js +157 -0
  27. package/lib/hooks/use-subscription.js +28 -0
  28. package/lib/layout/addon.js +17 -17
  29. package/lib/layout/feedback.js +57 -0
  30. package/lib/locales/en.js +6 -2
  31. package/lib/locales/zh.js +6 -2
  32. package/lib/schema-form/index.js +9 -4
  33. package/lib/schema-form/text-input.js +1 -1
  34. package/lib/team/members/index.js +23 -11
  35. package/lib/team/members/member.js +3 -0
  36. package/lib/team/passports/color.js +131 -0
  37. package/lib/team/passports/index.js +32 -20
  38. package/lib/util/index.js +70 -5
  39. package/package.json +12 -12
@@ -232,7 +232,7 @@ function ComponentEnvironment(_ref) {
232
232
  severity: "info",
233
233
  children: t('blocklet.config.environment.tip')
234
234
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_permission.default, {
235
- permission: inService ? '' : 'mutate_blocklet',
235
+ permission: inService ? '' : 'mutate_blockets',
236
236
  role: inService ? _util2.BlockletAdminRoles : [],
237
237
  children: hasPermission => /*#__PURE__*/(0, _jsxRuntime.jsx)(_table.default, {
238
238
  className: (0, _util2.isBlockletDev)(blocklet) ? 'readonly-block config-table' : 'config-table',
@@ -47,6 +47,9 @@ var _avatar = _interopRequireDefault(require("../avatar"));
47
47
  var _mode = _interopRequireDefault(require("../mode"));
48
48
  var _configuration = _interopRequireDefault(require("./configuration"));
49
49
  var _delete = _interopRequireDefault(require("./delete"));
50
+ var _line = _interopRequireDefault(require("./line"));
51
+ var _addRule = _interopRequireDefault(require("../router/action/add-rule"));
52
+ var _ruleList = _interopRequireDefault(require("../router/rule-list"));
50
53
  var _jsxRuntime = require("react/jsx-runtime");
51
54
  const _excluded = ["blocklet", "onUpdate", "getComponentUrl", "AddComponent"];
52
55
  var _templateObject, _templateObject2;
@@ -357,13 +360,9 @@ function ComponentItem(_ref) {
357
360
  tip: deleteDisabledTip
358
361
  })]
359
362
  }, "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, {
363
+ }, "group-not-gateway-box"), /*#__PURE__*/(0, _jsxRuntime.jsx)(_line.default, {
364
+ depth: depth
365
+ }), (_blocklet$children = blocklet.children) !== null && _blocklet$children !== void 0 && _blocklet$children.length ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Collapse.default, {
367
366
  in: expand,
368
367
  children: blocklet.children.map(x => /*#__PURE__*/(0, _jsxRuntime.jsx)(ComponentItem, {
369
368
  blocklet: x,
@@ -587,7 +586,7 @@ function BlockletComponent(_ref4) {
587
586
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
588
587
  className: "title",
589
588
  children: [t('common.components'), /*#__PURE__*/(0, _jsxRuntime.jsx)(_permission.default, {
590
- permission: inService ? '' : 'mutate_blocklet',
589
+ permission: inService ? '' : 'mutate_blockets',
591
590
  role: inService ? _util2.BlockletAdminRoles : [],
592
591
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(StyledBadge, {
593
592
  top: 1.2,
@@ -618,34 +617,58 @@ function BlockletComponent(_ref4) {
618
617
  })
619
618
  })]
620
619
  }), /*#__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
- }
620
+ permission: inService ? '' : 'mutate_blockets',
621
+ role: inService ? _util2.BlockletAdminRoles : [],
622
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
623
+ display: "flex",
624
+ alignItems: "center",
625
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_addRule.default, {
626
+ children: _ref6 => {
627
+ let {
628
+ open
629
+ } = _ref6;
630
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
631
+ disabled: loading || (0, _util2.isInProgress)(blocklet.status),
632
+ variant: "text",
633
+ color: "primary",
634
+ "data-cy": "add-rule",
635
+ onClick: open,
636
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Add.default, {
637
+ style: {
638
+ fontSize: '1.3em',
639
+ marginRight: 4
640
+ }
641
+ }), t('router.rule.add.title')]
642
+ });
643
+ }
644
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(AddComponent, {
645
+ blocklet: blocklet,
646
+ children: _ref7 => {
647
+ let {
648
+ open
649
+ } = _ref7;
650
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
651
+ disabled: loading || (0, _util2.isInProgress)(blocklet.status),
652
+ variant: "text",
653
+ color: "primary",
654
+ "data-cy": "add-component",
655
+ onClick: open,
656
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Add.default, {
657
+ style: {
658
+ fontSize: '1.3em',
659
+ marginRight: 4
660
+ }
661
+ }), t('blocklet.component.add')]
662
+ });
663
+ }
664
+ })]
642
665
  })
643
666
  })]
644
667
  }), components && components.length ? [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
645
668
  mt: 2,
646
669
  ml: {
647
- xs: '-16px',
648
- md: '-28px'
670
+ xs: '-12px',
671
+ md: '-24px'
649
672
  },
650
673
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ComponentItem, {
651
674
  blocklet: blocklet,
@@ -657,6 +680,13 @@ function BlockletComponent(_ref4) {
657
680
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Empty.default, {
658
681
  children: t('blocklet.component.noComponent')
659
682
  })
683
+ }), !!blocklet.site.rules.length && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
684
+ mt: 0,
685
+ ml: {
686
+ xs: '-16px',
687
+ md: '-28px'
688
+ },
689
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ruleList.default, {})
660
690
  }), !!updateConfirm && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Dialog.default, {
661
691
  open: true,
662
692
  fullWidth: true,
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = Line;
7
+ var _propTypes = _interopRequireDefault(require("prop-types"));
8
+ var _Box = _interopRequireDefault(require("@mui/material/Box"));
9
+ var _jsxRuntime = require("react/jsx-runtime");
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ function Line(_ref) {
12
+ let {
13
+ depth
14
+ } = _ref;
15
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
16
+ ml: Math.max((depth - 1) * 2, 0),
17
+ sx: {
18
+ borderBottom: 1,
19
+ borderColor: 'rgba(0,0,0,0.12)'
20
+ }
21
+ }, "group-collapse-box");
22
+ }
23
+ Line.propTypes = {
24
+ depth: _propTypes.default.number
25
+ };
26
+ Line.defaultProps = {
27
+ depth: 1
28
+ };
@@ -112,7 +112,7 @@ function ComponentSetting(_ref) {
112
112
  })
113
113
  }));
114
114
  }
115
- const ComponentSettingInDaemon = (0, _permission.withPermission)(ComponentSetting, 'mutate_blocklet');
115
+ const ComponentSettingInDaemon = (0, _permission.withPermission)(ComponentSetting, 'mutate_blockets');
116
116
  const ComponentSettingInService = (0, _permission.withPermission)(ComponentSetting, '', _util.BlockletAdminRoles);
117
117
  function ComponentSettingWithPermission(props) {
118
118
  const {
@@ -9,21 +9,32 @@ var _styled = _interopRequireDefault(require("@emotion/styled"));
9
9
  var _propTypes = _interopRequireDefault(require("prop-types"));
10
10
  var _get = _interopRequireDefault(require("lodash/get"));
11
11
  var _omit = _interopRequireDefault(require("lodash/omit"));
12
+ var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
12
13
  var _TextField = _interopRequireDefault(require("@mui/material/TextField"));
13
14
  var _Box = _interopRequireDefault(require("@mui/material/Box"));
14
15
  var _MenuItem = _interopRequireDefault(require("@mui/material/MenuItem"));
15
16
  var _useTheme = _interopRequireDefault(require("@mui/material/styles/useTheme"));
16
17
  var _Switch = _interopRequireDefault(require("@mui/material/Switch"));
17
18
  var _Divider = _interopRequireDefault(require("@mui/material/Divider"));
19
+ var _Add = _interopRequireDefault(require("@mui/icons-material/Add"));
20
+ var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
21
+ var _Tooltip = _interopRequireDefault(require("@mui/material/Tooltip"));
18
22
  var _context = require("@arcblock/ux/lib/Locale/context");
23
+ var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
24
+ var _Empty = _interopRequireDefault(require("@arcblock/ux/lib/Empty"));
25
+ var _LockIcon = _interopRequireDefault(require("@arcblock/icons/lib/LockIcon"));
19
26
  var _constant = require("@blocklet/constant");
20
27
  var _util = require("@blocklet/meta/lib/util");
21
28
  var _toast = _interopRequireDefault(require("../toast"));
22
29
  var _schemaForm = _interopRequireDefault(require("../schema-form"));
30
+ var _formTextInput = _interopRequireDefault(require("../form/form-text-input"));
23
31
  var _config = _interopRequireDefault(require("../who-can-access/config"));
24
32
  var _node = require("../contexts/node");
25
33
  var _util2 = require("../util");
26
34
  var _permission = require("../permission");
35
+ var _addDomainAlias = _interopRequireDefault(require("./router/action/add-domain-alias"));
36
+ var _domainStatus = _interopRequireDefault(require("./router/domain-status"));
37
+ var _domainActions = _interopRequireDefault(require("./router/domain-actions"));
27
38
  var _jsxRuntime = require("react/jsx-runtime");
28
39
  var _templateObject, _templateObject2;
29
40
  const _excluded = ["blocklet", "onUpdate", "hasPermission"],
@@ -61,6 +72,15 @@ function BlockletEnvironment(_ref) {
61
72
  useSubscription
62
73
  }
63
74
  } = node;
75
+ const {
76
+ did
77
+ } = blocklet.meta;
78
+ const {
79
+ site
80
+ } = blocklet;
81
+ const {
82
+ domainAliases
83
+ } = site;
64
84
  const clusterMode = (0, _get.default)(blocklet.meta, 'capabilities.clusterMode', false);
65
85
  useSubscription('system.info', res => {
66
86
  if (clusterMode) {
@@ -82,7 +102,6 @@ function BlockletEnvironment(_ref) {
82
102
  const customType = blocklet.environments.find(x => x.key === 'BLOCKLET_WALLET_TYPE');
83
103
  const customDelete = blocklet.environments.find(x => x.key === 'BLOCKLET_DELETABLE');
84
104
  const deletable = !customDelete || customDelete.value === 'yes';
85
- const customColor = blocklet.environments.find(x => x.key === 'BLOCKLET_PASSPORT_COLOR');
86
105
  const customUrl = blocklet.environments.find(x => x.key === 'BLOCKLET_APP_URL');
87
106
  const customLogo = blocklet.environments.find(x => x.key === 'BLOCKLET_APP_LOGO');
88
107
  const customLogoSquare = blocklet.environments.find(x => x.key === 'BLOCKLET_APP_LOGO_SQUARE');
@@ -94,14 +113,6 @@ function BlockletEnvironment(_ref) {
94
113
  key: _constant.BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_DESCRIPTION,
95
114
  description: t('blocklet.config.description'),
96
115
  value: blocklet.environments.find(x => x.key === 'BLOCKLET_APP_DESCRIPTION').value
97
- }, {
98
- key: _constant.BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_PASSPORT_COLOR,
99
- description: t('blocklet.config.passportColor'),
100
- value: customColor ? customColor.value : 'auto',
101
- componentType: 'passport',
102
- componentProps: {
103
- blocklet
104
- }
105
116
  }, {
106
117
  key: _constant.BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_URL,
107
118
  description: t('blocklet.config.appUrl'),
@@ -273,6 +284,30 @@ function BlockletEnvironment(_ref) {
273
284
  setLoading(false);
274
285
  }
275
286
  };
287
+ const onUpdateCors = async value => {
288
+ const oldValue = site.corsAllowedOrigins || [];
289
+ const newValue = value.split(',').map(x => x.trim()).filter(Boolean);
290
+ if ((0, _isEqual.default)(oldValue, newValue)) {
291
+ return false;
292
+ }
293
+ try {
294
+ setLoading(true);
295
+ const corsAllowedOrigins = newValue.length ? newValue : ['__none__'];
296
+ await node.api.updateRoutingSite({
297
+ input: {
298
+ id: site.id,
299
+ corsAllowedOrigins,
300
+ teamDid: blocklet.meta.did
301
+ }
302
+ });
303
+ setLoading(false);
304
+ } catch (err) {
305
+ _toast.default.error(err.message);
306
+ setLoading(false);
307
+ return false;
308
+ }
309
+ return true;
310
+ };
276
311
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Div, _objectSpread(_objectSpread({}, rest), {}, {
277
312
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_schemaForm.default, {
278
313
  disabled: disabled,
@@ -378,6 +413,138 @@ function BlockletEnvironment(_ref) {
378
413
  className: "config-form",
379
414
  component: _Divider.default,
380
415
  my: 3
416
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
417
+ className: "config-form",
418
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
419
+ display: "flex",
420
+ justifyContent: "space-between",
421
+ alignItems: "center",
422
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
423
+ className: "config-label",
424
+ children: t('common.domain')
425
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
426
+ display: "flex",
427
+ alignItems: "center",
428
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_addDomainAlias.default, {
429
+ id: site.id,
430
+ title: t('router.domain.add.title'),
431
+ teamDid: did,
432
+ children: _ref3 => {
433
+ let {
434
+ open
435
+ } = _ref3;
436
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
437
+ style: {
438
+ marginLeft: 16
439
+ },
440
+ variant: "contained",
441
+ color: "primary",
442
+ "data-cy": "add-domain-alias",
443
+ onClick: open,
444
+ disabled: (0, _util2.isInProgress)(blocklet.status),
445
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Add.default, {
446
+ style: {
447
+ fontSize: '1.3em',
448
+ marginRight: 4
449
+ }
450
+ }), t('common.add')]
451
+ });
452
+ }
453
+ })
454
+ })]
455
+ }), domainAliases.map((domain, index) => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
456
+ display: "flex",
457
+ alignItems: "center",
458
+ justifyContent: "space-between",
459
+ mt: index ? 0 : 1,
460
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
461
+ display: "flex",
462
+ alignItems: "center",
463
+ justifyContent: "space-between",
464
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_domainStatus.default, {
465
+ domain: domain,
466
+ filters: ['domain']
467
+ }, "".concat(domain.value, "-domain")), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
468
+ ml: 2,
469
+ mr: 0.5,
470
+ children: domain.value
471
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_domainStatus.default, {
472
+ domain: domain,
473
+ filters: ['http']
474
+ }, "".concat(domain.value, "-http")), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
475
+ style: {
476
+ marginLeft: 12
477
+ }
478
+ })]
479
+ }), hasPermission && !domain.isProtected ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_domainActions.default, {
480
+ site: site,
481
+ domain: domain,
482
+ blocklet: blocklet
483
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tooltip.default, {
484
+ title: t('blocklet.router.domainLockTooltip'),
485
+ placement: "top",
486
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {
487
+ disabled: true,
488
+ size: "large",
489
+ style: {
490
+ pointerEvents: 'auto',
491
+ // padding replace to margin, fix the tooltip position
492
+ paddingTop: 0,
493
+ paddingBottom: 0,
494
+ margin: '12px 0'
495
+ },
496
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_LockIcon.default, {
497
+ style: {
498
+ fill: theme.palette.text.disabled
499
+ }
500
+ })
501
+ })
502
+ })]
503
+ }, domain.value)), !domainAliases.length && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
504
+ mt: 4,
505
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Empty.default, {
506
+ children: t('common.empty')
507
+ })
508
+ })]
509
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
510
+ className: "config-form",
511
+ component: _Divider.default,
512
+ my: 3
513
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
514
+ className: "config-form",
515
+ mt: 2,
516
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
517
+ className: "config-label",
518
+ mb: 0,
519
+ children: t('common.security')
520
+ })
521
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
522
+ className: "config-form",
523
+ mt: 2,
524
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
525
+ className: "config-label",
526
+ fontSize: 14,
527
+ mb: 0,
528
+ children: t('router.domainSecurity.cors.title')
529
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
530
+ mb: 1.5,
531
+ className: "config-desc",
532
+ children: t('router.domainSecurity.cors.description', {
533
+ name: 'the blocklet'
534
+ })
535
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_formTextInput.default, {
536
+ style: {
537
+ marginTop: 0
538
+ },
539
+ disabled: loading || disabled,
540
+ loading: loading,
541
+ initialValue: (site.corsAllowedOrigins || []).join(', '),
542
+ onSubmit: onUpdateCors
543
+ })]
544
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
545
+ className: "config-form",
546
+ component: _Divider.default,
547
+ my: 3
381
548
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
382
549
  className: "config-form",
383
550
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
@@ -427,11 +594,11 @@ function BlockletEnvironment(_ref) {
427
594
  defaultValue: {
428
595
  [_constant.BLOCKLET_CONFIGURABLE_KEY.BLOCKLET_APP_SK]: blocklet.environments.find(x => x.key === 'BLOCKLET_APP_SK').value
429
596
  },
430
- onChange: (changeValue, _ref3) => {
597
+ onChange: (changeValue, _ref4) => {
431
598
  let {
432
599
  action,
433
600
  currentItem
434
- } = _ref3;
601
+ } = _ref4;
435
602
  if (action === 'edit') {
436
603
  setEditingItem(currentItem);
437
604
  } else if (['cancel', 'confirm'].includes(action)) {
@@ -444,7 +611,7 @@ function BlockletEnvironment(_ref) {
444
611
  })]
445
612
  }));
446
613
  }
447
- const BlockletEnvironmentInDaemon = (0, _permission.withPermission)(BlockletEnvironment, 'mutate_blocklet');
614
+ const BlockletEnvironmentInDaemon = (0, _permission.withPermission)(BlockletEnvironment, 'mutate_blockets');
448
615
  const BlockletEnvironmentInService = (0, _permission.withPermission)(BlockletEnvironment, '', _util2.BlockletAdminRoles);
449
616
  function BlockletEnvironmentWithPermission(props) {
450
617
  const {
@@ -464,5 +631,5 @@ BlockletEnvironment.defaultProps = {
464
631
  onUpdate: () => {},
465
632
  hasPermission: false
466
633
  };
467
- const Div = _styled.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .config-form {\n width: 80%;\n flex-grow: 1;\n overflow-y: auto;\n ", " {\n width: 100%;\n flex-shrink: 0;\n padding: 0 24px;\n transform: translate(0, 0);\n max-height: 60vh;\n }\n }\n\n .config-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin: 16px 0;\n }\n\n .config-label {\n font-weight: bold;\n }\n\n .config-desc {\n font-weight: normal;\n font-size: 12px;\n color: #666;\n }\n"])), props => props.theme.breakpoints.down('md'));
634
+ const Div = _styled.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .config-form {\n width: 80%;\n flex-grow: 1;\n overflow-y: auto;\n ", " {\n width: 100%;\n flex-shrink: 0;\n padding: 0 24px;\n transform: translate(0, 0);\n max-height: 60vh;\n }\n }\n\n .config-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin: 16px 0;\n }\n\n .config-label {\n font-weight: bold;\n }\n\n .config-desc {\n font-weight: normal;\n font-size: 12px;\n color: #666;\n }\n\n .form-item {\n margin-top: 0;\n }\n"])), props => props.theme.breakpoints.down('md'));
468
635
  const StyledMenuItem = (0, _styled.default)(_MenuItem.default)(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n .tip {\n font-size: 12px;\n color: ", ";\n }\n"])), props => props.theme.palette.text.secondary);
@@ -7,28 +7,87 @@ exports.default = BlockletOverview;
7
7
  var _react = require("react");
8
8
  var _styled = _interopRequireDefault(require("@emotion/styled"));
9
9
  var _propTypes = _interopRequireDefault(require("prop-types"));
10
+ var _Box = _interopRequireDefault(require("@mui/material/Box"));
11
+ var _Alert = _interopRequireDefault(require("@mui/material/Alert"));
12
+ var _Tooltip = _interopRequireDefault(require("@mui/material/Tooltip"));
13
+ var _Spinner = _interopRequireDefault(require("@arcblock/ux/lib/Spinner"));
10
14
  var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
11
15
  var _Tag = _interopRequireDefault(require("@arcblock/ux/lib/Tag"));
12
16
  var _InfoRow = _interopRequireDefault(require("@arcblock/ux/lib/InfoRow"));
13
17
  var _util = require("@blocklet/meta/lib/util");
14
18
  var _context = require("@arcblock/ux/lib/Locale/context");
19
+ var _Empty = _interopRequireDefault(require("@arcblock/ux/lib/Empty"));
20
+ var _blocklet = require("../contexts/blocklet");
21
+ var _util2 = require("../util");
15
22
  var _didAddress = _interopRequireDefault(require("../did-address"));
16
23
  var _blockletSource = _interopRequireDefault(require("./blocklet-source"));
17
24
  var _runtimeInfo = _interopRequireDefault(require("./runtime-info"));
18
25
  var _diskInfo = _interopRequireDefault(require("./disk-info"));
19
26
  var _status = _interopRequireDefault(require("./status"));
20
27
  var _version = _interopRequireDefault(require("./version"));
21
- var _util2 = require("../util");
28
+ var _domainStatus = _interopRequireDefault(require("./router/domain-status"));
29
+ var _types = require("./types");
22
30
  var _jsxRuntime = require("react/jsx-runtime");
23
- var _templateObject;
24
31
  const _excluded = ["blocklet"];
32
+ var _templateObject, _templateObject2;
25
33
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
26
- function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
27
34
  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; }
28
35
  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; }
29
36
  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; }
30
37
  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; }
31
38
  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; }
39
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
40
+ function DomainLink(_ref) {
41
+ let {
42
+ domain,
43
+ children
44
+ } = _ref;
45
+ const {
46
+ t
47
+ } = (0, _react.useContext)(_context.LocaleContext);
48
+ const {
49
+ href,
50
+ accessibility
51
+ } = domain;
52
+ if (!accessibility || accessibility.loading) {
53
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(LinkDiv, {
54
+ children: [children, /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tooltip.default, {
55
+ title: t('blocklet.router.checkUrlAccessible'),
56
+ placement: "top-end",
57
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
58
+ className: "status",
59
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner.default, {
60
+ size: 12
61
+ })
62
+ })
63
+ })]
64
+ });
65
+ }
66
+ if (!accessibility.accessible) {
67
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(LinkDiv, {
68
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tooltip.default, {
69
+ title: t('blocklet.router.urlInaccessible'),
70
+ placement: "top-end",
71
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
72
+ children: children
73
+ })
74
+ })
75
+ });
76
+ }
77
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(LinkDiv, {
78
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("a", {
79
+ href: href,
80
+ target: "_blank",
81
+ rel: "noopener noreferrer",
82
+ children: children
83
+ })
84
+ });
85
+ }
86
+ DomainLink.propTypes = {
87
+ domain: _types.DomainType.isRequired,
88
+ children: _propTypes.default.any.isRequired
89
+ };
90
+ const LinkDiv = _styled.default.span(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n &,\n & > * {\n color: #222;\n font-size: 18px;\n }\n\n .status {\n margin-left: 8px;\n }\n"])));
32
91
  const getEngineRows = (engine, t) => {
33
92
  if (!engine) {
34
93
  return [];
@@ -46,15 +105,18 @@ const getEngineRows = (engine, t) => {
46
105
  })
47
106
  }];
48
107
  };
49
- function BlockletOverview(_ref) {
108
+ function BlockletOverview(_ref2) {
50
109
  var _blocklet$settings;
51
110
  let {
52
111
  blocklet
53
- } = _ref,
54
- rest = _objectWithoutProperties(_ref, _excluded);
112
+ } = _ref2,
113
+ rest = _objectWithoutProperties(_ref2, _excluded);
55
114
  const {
56
115
  t
57
116
  } = (0, _react.useContext)(_context.LocaleContext);
117
+ const {
118
+ loadingRuntimeInfo
119
+ } = (0, _blocklet.useBlockletContext)();
58
120
  const {
59
121
  value: appDid
60
122
  } = (blocklet.environments || []).find(x => x.key === 'BLOCKLET_APP_ID') || {};
@@ -139,10 +201,65 @@ function BlockletOverview(_ref) {
139
201
  children: row.value
140
202
  }, row.name);
141
203
  });
204
+ const {
205
+ site
206
+ } = blocklet;
207
+ const {
208
+ domainAliases = []
209
+ } = site || {};
142
210
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Div, _objectSpread(_objectSpread({
143
211
  component: "div"
144
212
  }, rest), {}, {
145
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
213
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
214
+ display: "flex",
215
+ justifyContent: "space-between",
216
+ alignItems: "center",
217
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
218
+ className: "title first",
219
+ mb: 0,
220
+ children: t('common.domain')
221
+ })
222
+ }), blocklet.status !== 'running' && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
223
+ mt: -2,
224
+ mb: 1.5,
225
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Alert.default, {
226
+ severity: "warning",
227
+ children: t('blocklet.router.noRunning')
228
+ })
229
+ }), domainAliases.map((domain, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
230
+ display: "flex",
231
+ alignItems: "center",
232
+ justifyContent: "space-between",
233
+ mt: index ? 3 : 0,
234
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Box.default, {
235
+ display: "flex",
236
+ alignItems: "center",
237
+ justifyContent: "space-between",
238
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_domainStatus.default, {
239
+ domain: domain,
240
+ filters: ['domain']
241
+ }, "".concat(domain.value, "-domain")), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Box.default, {
242
+ ml: 2,
243
+ mr: 0.5,
244
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(DomainLink, {
245
+ domain: domain,
246
+ target: "_blank",
247
+ children: domain.value
248
+ })
249
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_domainStatus.default, {
250
+ domain: domain,
251
+ filters: ['http']
252
+ }, "".concat(domain.value, "-http")), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
253
+ style: {
254
+ marginLeft: 12
255
+ }
256
+ })]
257
+ })
258
+ }, domain.value)), !domainAliases.length && (loadingRuntimeInfo ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner.default, {
259
+ size: 16
260
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_Empty.default, {
261
+ children: t('common.empty')
262
+ })), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
146
263
  className: "title",
147
264
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
148
265
  children: t('common.basicInfo')
@@ -159,11 +276,11 @@ function BlockletOverview(_ref) {
159
276
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
160
277
  className: "title",
161
278
  children: t('common.engine')
162
- }), engineRows.map(_ref2 => {
279
+ }), engineRows.map(_ref3 => {
163
280
  let {
164
281
  name,
165
282
  value
166
- } = _ref2;
283
+ } = _ref3;
167
284
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_InfoRow.default, {
168
285
  nameWidth: 120,
169
286
  name: name,
@@ -181,4 +298,4 @@ function BlockletOverview(_ref) {
181
298
  BlockletOverview.propTypes = {
182
299
  blocklet: _propTypes.default.object.isRequired
183
300
  };
184
- const Div = (0, _styled.default)(_Typography.default)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .title {\n font-size: 1.2rem;\n font-weight: bold;\n margin-top: ", ";\n margin-bottom: ", ";\n }\n"])), props => props.theme.spacing(5), props => props.theme.spacing(3));
301
+ const Div = (0, _styled.default)(_Typography.default)(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n .title {\n font-size: 1.2rem;\n font-weight: bold;\n margin-top: ", ";\n margin-bottom: ", ";\n &.first {\n margin-top: 0;\n }\n }\n"])), props => props.theme.spacing(5), props => props.theme.spacing(3));