@blocklet/launcher-workflow 1.5.67 → 1.5.70

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.
@@ -9,6 +9,8 @@ var _react = _interopRequireWildcard(require("react"));
9
9
 
10
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
11
 
12
+ var _lodash = _interopRequireDefault(require("lodash.get"));
13
+
12
14
  var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
13
15
 
14
16
  var _Dialog = _interopRequireDefault(require("@material-ui/core/Dialog"));
@@ -33,6 +35,17 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
33
35
 
34
36
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
35
37
 
38
+ const translations = {
39
+ en: {
40
+ confirm: 'Confirm',
41
+ cancel: 'Cancel'
42
+ },
43
+ zh: {
44
+ confirm: '同意',
45
+ cancel: '取消'
46
+ }
47
+ };
48
+
36
49
  function ConfirmDialog(_ref) {
37
50
  let {
38
51
  title,
@@ -42,11 +55,14 @@ function ConfirmDialog(_ref) {
42
55
  color,
43
56
  params: initialParams,
44
57
  onCancel,
45
- onConfirm
58
+ onConfirm,
59
+ locale
46
60
  } = _ref;
47
61
  const {
48
- t
49
- } = (0, _react.useContext)(_locale.LocaleContext);
62
+ locale: innerLocale
63
+ } = (0, _react.useContext)(_locale.LocaleContext) || {
64
+ locale
65
+ };
50
66
  const [params, setParams] = (0, _react.useState)(initialParams);
51
67
  const theme = (0, _useTheme.default)();
52
68
  const isBreakpointsDownSm = (0, _useMediaQuery.default)(theme.breakpoints.down('sm'));
@@ -68,13 +84,13 @@ function ConfirmDialog(_ref) {
68
84
  onClick: () => onCallback(onCancel),
69
85
  color: "default",
70
86
  rounded: true
71
- }, cancel || t('common.cancel')), /*#__PURE__*/_react.default.createElement(_Button.default, {
87
+ }, cancel || (0, _lodash.default)(translations, "".concat(innerLocale, ".cancel"))), /*#__PURE__*/_react.default.createElement(_Button.default, {
72
88
  onClick: () => onCallback(onConfirm),
73
89
  color: color,
74
90
  variant: "outlined",
75
91
  autoFocus: true,
76
92
  rounded: true
77
- }, confirm || t('common.confirm'))));
93
+ }, confirm || (0, _lodash.default)(translations, "".concat(innerLocale, ".confirm")))));
78
94
  }
79
95
 
80
96
  ConfirmDialog.propTypes = {
@@ -87,12 +103,14 @@ ConfirmDialog.propTypes = {
87
103
  params: _propTypes.default.object,
88
104
  // This object holds states managed in the dialog
89
105
  onCancel: _propTypes.default.func,
90
- onConfirm: _propTypes.default.func.isRequired
106
+ onConfirm: _propTypes.default.func.isRequired,
107
+ locale: _propTypes.default.oneOf(['en', 'zh'])
91
108
  };
92
109
  ConfirmDialog.defaultProps = {
93
110
  onCancel: () => {},
94
111
  cancel: '',
95
112
  confirm: '',
96
113
  color: 'danger',
97
- params: {}
114
+ params: {},
115
+ locale: 'en'
98
116
  };
@@ -15,6 +15,10 @@ var _Check = _interopRequireDefault(require("@material-ui/icons/Check"));
15
15
 
16
16
  var _Close = _interopRequireDefault(require("@material-ui/icons/Close"));
17
17
 
18
+ var _Spinner = _interopRequireDefault(require("@arcblock/ux/lib/Spinner"));
19
+
20
+ var _PriorityHigh = _interopRequireDefault(require("@material-ui/icons/PriorityHigh"));
21
+
18
22
  const _excluded = ["variant", "title", "subTitle", "footer"];
19
23
 
20
24
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -32,25 +36,45 @@ function LaunchResultMessage(_ref) {
32
36
  } = _ref,
33
37
  props = _objectWithoutProperties(_ref, _excluded);
34
38
 
35
- const Icon = variant === 'error' ? _Close.default : _Check.default;
39
+ let Icon;
40
+
41
+ switch (variant) {
42
+ case 'error':
43
+ Icon = _Close.default;
44
+ break;
45
+
46
+ case 'info':
47
+ Icon = _PriorityHigh.default;
48
+ break;
49
+
50
+ case 'loading':
51
+ Icon = _Spinner.default;
52
+ break;
53
+
54
+ default:
55
+ Icon = _Check.default;
56
+ }
57
+
36
58
  return /*#__PURE__*/_react.default.createElement(Container, Object.assign({
37
59
  variant: variant
38
- }, props), /*#__PURE__*/_react.default.createElement("span", {
39
- className: "icon"
40
- }, /*#__PURE__*/_react.default.createElement(Icon, null)), title && /*#__PURE__*/_react.default.createElement("div", {
41
- className: "result-message-title"
42
- }, title), subTitle && /*#__PURE__*/_react.default.createElement("div", {
43
- className: "sub-title"
44
- }, subTitle), footer && /*#__PURE__*/_react.default.createElement("div", {
45
- className: "result-message-footer"
46
- }, footer));
60
+ }, props), /*#__PURE__*/_react.default.createElement("div", {
61
+ className: "result-body"
62
+ }, /*#__PURE__*/_react.default.createElement("span", {
63
+ className: "result-icon color-".concat(variant)
64
+ }, /*#__PURE__*/_react.default.createElement(Icon, null)), /*#__PURE__*/_react.default.createElement("div", {
65
+ className: "result-title color-".concat(variant, " ").concat(title ? '' : 'ele-hide')
66
+ }, title), /*#__PURE__*/_react.default.createElement("div", {
67
+ className: "result-sub-title ".concat(subTitle ? '' : 'ele-hide')
68
+ }, subTitle), /*#__PURE__*/_react.default.createElement("div", {
69
+ className: "result-footer ".concat(footer ? '' : 'ele-hide')
70
+ }, footer)));
47
71
  }
48
72
 
49
73
  LaunchResultMessage.propTypes = {
50
- variant: _propTypes.default.oneOf(['success', 'error']),
74
+ variant: _propTypes.default.oneOf(['success', 'error', 'info', 'loading']),
51
75
  title: _propTypes.default.string,
52
76
  subTitle: _propTypes.default.string,
53
- footer: _propTypes.default.object
77
+ footer: _propTypes.default.any
54
78
  };
55
79
  LaunchResultMessage.defaultProps = {
56
80
  variant: 'success',
@@ -62,4 +86,4 @@ LaunchResultMessage.defaultProps = {
62
86
  const Container = _styledComponents.default.div.withConfig({
63
87
  displayName: "launch-result-message__Container",
64
88
  componentId: "sc-17nd2le-0"
65
- })(["display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;width:100%;height:100%;.icon{display:inline-flex;justify-content:center;align-items:center;width:48px;height:48px;border-radius:100%;background-color:", ";color:", ";}.result-message-title{margin-top:24px;color:", ";font-size:24px;font-weight:bolder;}.sub-title{margin-top:8px;color:", ";font-size:14px;}.result-message-footer{margin-top:24px;}"], props => props.variant === 'error' ? props.theme.palette.error.main : props.theme.palette.success.main, props => props.theme.palette.common.white, props => props.variant === 'error' ? props.theme.palette.error.main : props.theme.palette.success.main, props => props.theme.palette.grey[700]);
89
+ })(["display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;width:100%;height:100%;.result-body{max-width:500px;text-align:center;margin-top:-64px;}.result-icon{display:inline-flex;justify-content:center;align-items:center;margin-bottom:24px;width:48px;height:48px;border-radius:100%;color:", ";transition:all ease 0.3s;&.color-success{background-color:", ";}&.color-error{background-color:", ";}&.color-info{background-color:", ";}}.result-title{height:34px;font-size:24px;margin-bottom:8px;font-weight:bolder;transition:all ease 0.3s;&.ele-hide{height:0;opacity:0;margin-bottom:0;}&.color-success{color:", ";}&.color-error{color:", ";}&.color-info{color:", ";}&.ele-hide{line-height:0;opacity:0;}}.result-sub-title{margin:0 auto;max-width:90%;color:", ";font-size:14px;line-height:1.21em;transition:all ease 0.3s;&.ele-hide{line-height:0;opacity:0;}}.result-footer{margin-top:38px;height:70px;overflow:hidden;transition:all ease 0.3s;&.ele-hide{margin-top:0;height:0;opacity:0;}}"], props => props.theme.palette.common.white, props => props.theme.palette.success.main, props => props.theme.palette.error.main, props => props.theme.palette.primary.main, props => props.theme.palette.success.main, props => props.theme.palette.error.main, props => props.theme.palette.primary.main, props => props.theme.palette.grey[700]);
@@ -11,8 +11,6 @@ var _styledComponents = _interopRequireDefault(require("styled-components"));
11
11
 
12
12
  var _propTypes = _interopRequireDefault(require("prop-types"));
13
13
 
14
- var _useLocalStorage = _interopRequireDefault(require("react-use/lib/useLocalStorage"));
15
-
16
14
  var _Checkbox = _interopRequireDefault(require("@material-ui/core/Checkbox"));
17
15
 
18
16
  var _CheckCircleRounded = _interopRequireDefault(require("@material-ui/icons/CheckCircleRounded"));
@@ -21,11 +19,9 @@ var _CheckCircleOutlineRounded = _interopRequireDefault(require("@material-ui/ic
21
19
 
22
20
  var _FormLabel = _interopRequireDefault(require("@material-ui/core/FormLabel"));
23
21
 
24
- var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
25
-
26
- var _server = _interopRequireDefault(require("@arcblock/license/lib/server"));
22
+ var _Spinner = _interopRequireDefault(require("@arcblock/ux/lib/Spinner"));
27
23
 
28
- var _locale = require("../contexts/locale");
24
+ var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
29
25
 
30
26
  var _confirm = _interopRequireDefault(require("./confirm"));
31
27
 
@@ -39,15 +35,19 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
39
35
  function ServerEula(_ref) {
40
36
  let {
41
37
  onContinue,
42
- nextDisabled
38
+ nextDisabled,
39
+ launching,
40
+ checkKey,
41
+ texts,
42
+ description
43
43
  } = _ref;
44
- const [agreed, setAgreed] = (0, _useLocalStorage.default)('server-eula-checked', false);
44
+ const [agreed, setAgreed] = (0, _react.useState)(localStorage.getItem(checkKey) === 'true');
45
45
  const [open, setOpen] = (0, _react.useState)(false);
46
- const {
47
- t
48
- } = (0, _react.useContext)(_locale.LocaleContext);
49
46
 
50
- const handleChecked = () => setAgreed(x => !x);
47
+ const handleChecked = () => setAgreed(x => {
48
+ localStorage.setItem(checkKey, !x);
49
+ return !x;
50
+ });
51
51
 
52
52
  const handleOpen = () => setOpen(x => !x);
53
53
 
@@ -55,6 +55,7 @@ function ServerEula(_ref) {
55
55
 
56
56
  const handleConfirm = () => {
57
57
  setAgreed(true);
58
+ localStorage.setItem(checkKey, true);
58
59
  setOpen(false);
59
60
  };
60
61
 
@@ -69,32 +70,54 @@ function ServerEula(_ref) {
69
70
  }), /*#__PURE__*/_react.default.createElement(_FormLabel.default, {
70
71
  className: "eula-trigger",
71
72
  onClick: handleOpen
72
- }, t('license.footer'))), /*#__PURE__*/_react.default.createElement(_Button.default, {
73
+ }, texts.listenName)), /*#__PURE__*/_react.default.createElement(_Button.default, {
73
74
  disabled: !agreed || nextDisabled,
74
75
  color: "primary",
75
76
  variant: "contained",
76
77
  className: "next-button",
77
78
  onClick: onContinue
78
- }, t('common.next'))), open && /*#__PURE__*/_react.default.createElement(_confirm.default, {
79
- title: t('license.title'),
80
- description: /*#__PURE__*/_react.default.createElement(_server.default, {
81
- className: "eula-content"
82
- }),
79
+ }, launching ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Spinner.default, {
80
+ size: 14
81
+ }), texts.launchingText) : texts.buttonNext)), open && (texts.confirmOK ? /*#__PURE__*/_react.default.createElement(_confirm.default, {
82
+ title: texts.confirmTitle,
83
+ description: description,
84
+ color: "primary",
85
+ confirm: texts.confirmOK,
86
+ cancel: texts.confirmCancel,
87
+ onCancel: handleCancel,
88
+ onConfirm: handleConfirm
89
+ }) : /*#__PURE__*/_react.default.createElement(_confirm.default, {
90
+ title: texts.confirmTitle,
91
+ description: description,
83
92
  color: "primary",
84
93
  onCancel: handleCancel,
85
94
  onConfirm: handleConfirm
86
- }));
95
+ })));
87
96
  }
88
97
 
89
98
  ServerEula.propTypes = {
90
99
  onContinue: _propTypes.default.func.isRequired,
91
- nextDisabled: _propTypes.default.bool
100
+ nextDisabled: _propTypes.default.bool,
101
+ launching: _propTypes.default.bool,
102
+ checkKey: _propTypes.default.string.isRequired,
103
+ description: _propTypes.default.any,
104
+ texts: _propTypes.default.object
92
105
  };
93
106
  ServerEula.defaultProps = {
94
- nextDisabled: false
107
+ nextDisabled: false,
108
+ launching: false,
109
+ description: '',
110
+ texts: {
111
+ listenName: '',
112
+ launchingText: '',
113
+ buttonNext: '',
114
+ confirmTitle: '',
115
+ confirmOK: '',
116
+ confirmCancel: ''
117
+ }
95
118
  };
96
119
 
97
120
  const Div = _styledComponents.default.div.withConfig({
98
121
  displayName: "server-eula__Div",
99
122
  componentId: "sc-16uy00s-0"
100
- })(["width:90%;max-width:450px;margin:0 auto;display:flex;justify-content:space-between;align-items:center;@media (max-width:", "px){flex-direction:column;}.eula-checkbox{display:flex;align-items:center;.eula-trigger{cursor:pointer;font-size:14px;&:hover{color:", ";}}}.next-button{width:120px;}"], props => props.theme.breakpoints.values.sm, props => props.theme.palette.primary.main);
123
+ })(["margin:0 auto;display:flex;justify-content:space-between;align-items:center;@media (max-width:", "px){flex-direction:column;}.eula-checkbox{display:flex;flex:1;align-items:center;.eula-trigger{cursor:pointer;", "{padding-right:24px;}font-size:14px;white-space:nowrap;&:hover{color:", ";}}}.next-button{width:200px;}"], props => props.theme.breakpoints.values.sm, props => props.theme.breakpoints.up('md'), props => props.theme.palette.primary.main);
@@ -18,6 +18,8 @@ var _urlJoin = _interopRequireDefault(require("url-join"));
18
18
 
19
19
  var _session = require("./session");
20
20
 
21
+ var _locale = require("./locale");
22
+
21
23
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
24
 
23
25
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
@@ -44,6 +46,9 @@ function RequestProvider(_ref) {
44
46
  const {
45
47
  session
46
48
  } = (0, _session.useSessionContext)();
49
+ const {
50
+ locale
51
+ } = (0, _locale.useLocaleContext)();
47
52
 
48
53
  const privateRequest = _axios.default.create({
49
54
  baseURL
@@ -51,6 +56,12 @@ function RequestProvider(_ref) {
51
56
 
52
57
  privateRequest.interceptors.request.use(config => {
53
58
  config.url = (0, _urlJoin.default)('/api', config.url);
59
+
60
+ if (!config.params) {
61
+ config.params = {};
62
+ }
63
+
64
+ config.params.locale = locale;
54
65
  return config;
55
66
  });
56
67
  privateRequest.interceptors.response.use(response => response, err => {
package/lib/index.js CHANGED
@@ -77,11 +77,11 @@ function Stripe(_ref2) {
77
77
  } = _ref2,
78
78
  rest = _objectWithoutProperties(_ref2, _excluded);
79
79
 
80
- return /*#__PURE__*/_react.default.createElement(_request.RequestProvider, {
81
- baseURL: baseURL
82
- }, /*#__PURE__*/_react.default.createElement(_locale.LocaleProvider, {
80
+ return /*#__PURE__*/_react.default.createElement(_locale.LocaleProvider, {
83
81
  translations: _locales.translations,
84
82
  locale: locale
83
+ }, /*#__PURE__*/_react.default.createElement(_request.RequestProvider, {
84
+ baseURL: baseURL
85
85
  }, /*#__PURE__*/_react.default.createElement(_checkout.default, rest)));
86
86
  }
87
87
 
@@ -101,11 +101,11 @@ function Launcher(_ref3) {
101
101
  locale,
102
102
  baseURL
103
103
  } = _ref3;
104
- return /*#__PURE__*/_react.default.createElement(_request.RequestProvider, {
105
- baseURL: baseURL
106
- }, /*#__PURE__*/_react.default.createElement(_locale.LocaleProvider, {
104
+ return /*#__PURE__*/_react.default.createElement(_locale.LocaleProvider, {
107
105
  translations: _locales.translations,
108
106
  locale: locale
107
+ }, /*#__PURE__*/_react.default.createElement(_request.RequestProvider, {
108
+ baseURL: baseURL
109
109
  }, /*#__PURE__*/_react.default.createElement(LaunchContent, {
110
110
  Route: Route,
111
111
  routerPrefix: routerPrefix,
package/lib/locales/en.js CHANGED
@@ -19,7 +19,8 @@ module.exports = {
19
19
  redeem: 'Redeem',
20
20
  redirecting: 'Redirecting',
21
21
  cancel: 'Cancel',
22
- confirm: 'Confirm'
22
+ confirm: 'Confirm',
23
+ launching: 'Launching'
23
24
  },
24
25
  plan: {
25
26
  title: 'Select Blocklet Server Plan',
package/lib/locales/zh.js CHANGED
@@ -17,7 +17,8 @@ module.exports = {
17
17
  purchase: '购买',
18
18
  redirecting: '跳转中',
19
19
  cancel: '取消',
20
- confirm: '同意'
20
+ confirm: '同意',
21
+ launching: '启动中'
21
22
  },
22
23
  plan: {
23
24
  title: '创建节点',
package/lib/prepare.js CHANGED
@@ -11,6 +11,8 @@ var _reactRouterDom = require("react-router-dom");
11
11
 
12
12
  var _styledComponents = _interopRequireDefault(require("styled-components"));
13
13
 
14
+ var _Toast = _interopRequireDefault(require("@arcblock/ux/lib/Toast"));
15
+
14
16
  var _Connect = _interopRequireDefault(require("@arcblock/did-connect/lib/Connect"));
15
17
 
16
18
  var _utils = require("@arcblock/did-connect/lib/utils");
@@ -23,6 +25,8 @@ var _FormHelperText = _interopRequireDefault(require("@material-ui/core/FormHelp
23
25
 
24
26
  var _launcherConstant = require("@blocklet/launcher-constant");
25
27
 
28
+ var _server = _interopRequireDefault(require("@arcblock/license/lib/server"));
29
+
26
30
  var _pageHeader = _interopRequireDefault(require("./components/page-header"));
27
31
 
28
32
  var _serverEula = _interopRequireDefault(require("./components/server-eula"));
@@ -33,6 +37,8 @@ var _locale = require("./contexts/locale");
33
37
 
34
38
  var _router = _interopRequireWildcard(require("./contexts/router"));
35
39
 
40
+ var _util = require("./util");
41
+
36
42
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
43
 
38
44
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
@@ -80,8 +86,6 @@ BlockletServerIcon.defaultProps = {
80
86
  fill: "none",
81
87
  xmlns: "http://www.w3.org/2000/svg"
82
88
  };
83
- const MAX_NAME_LENGTH = 30;
84
- const MAX_DESC_LENGTH = 50;
85
89
 
86
90
  function PreparePage() {
87
91
  const {
@@ -89,18 +93,21 @@ function PreparePage() {
89
93
  } = (0, _react.useContext)(_locale.LocaleContext);
90
94
  const [name, setName] = (0, _react.useState)('');
91
95
  const [description, setDescription] = (0, _react.useState)('');
92
- const [error, setError] = (0, _react.useState)({
96
+ const [formError, setFormError] = (0, _react.useState)({
93
97
  name: '',
94
98
  description: ''
95
99
  });
96
100
  const routerPrefix = (0, _router.usePrefix)();
101
+ const [launching, setLaunching] = (0, _react.useState)(false);
102
+ const [error, setError] = (0, _react.useState)('');
97
103
  const [showLaunchInstanceDialog, setShowLaunchInstanceDialog] = (0, _react.useState)(false);
98
104
  const {
99
105
  nftId
100
106
  } = (0, _reactRouterDom.useParams)();
101
107
  const history = (0, _reactRouterDom.useHistory)();
102
108
  const {
103
- create: createRequest
109
+ create: createRequest,
110
+ api
104
111
  } = (0, _request.default)();
105
112
 
106
113
  const handleInput = id => e => {
@@ -115,31 +122,34 @@ function PreparePage() {
115
122
  validate();
116
123
  };
117
124
 
125
+ const isRedeem = nftId === _launcherConstant.REDEEM_NFT_ID;
126
+ const headerScope = isRedeem ? 'redeem' : 'prepare';
127
+
118
128
  const validate = () => {
119
129
  let isError = false;
120
130
 
121
- if (name.length > MAX_NAME_LENGTH) {
131
+ if (name.length > _launcherConstant.INSTANCE_MAX_NAME_LENGTH) {
122
132
  isError = true;
123
- setError(value => _objectSpread(_objectSpread({}, value), {}, {
124
- name: t('launchPrepare.error.nameExceed', {
125
- length: MAX_NAME_LENGTH
133
+ setFormError(value => _objectSpread(_objectSpread({}, value), {}, {
134
+ name: t('launchPrepare.formError.nameExceed', {
135
+ length: _launcherConstant.INSTANCE_MAX_NAME_LENGTH
126
136
  })
127
137
  }));
128
138
  } else {
129
- setError(value => _objectSpread(_objectSpread({}, value), {}, {
139
+ setFormError(value => _objectSpread(_objectSpread({}, value), {}, {
130
140
  name: ''
131
141
  }));
132
142
  }
133
143
 
134
- if (description.length > MAX_DESC_LENGTH) {
144
+ if (description.length > _launcherConstant.INSTANCE_MAX_DESC_LENGTH) {
135
145
  isError = true;
136
- setError(value => _objectSpread(_objectSpread({}, value), {}, {
137
- description: t('launchPrepare.error.descriptionExceed', {
138
- length: MAX_DESC_LENGTH
146
+ setFormError(value => _objectSpread(_objectSpread({}, value), {}, {
147
+ description: t('launchPrepare.formError.descriptionExceed', {
148
+ length: _launcherConstant.INSTANCE_MAX_DESC_LENGTH
139
149
  })
140
150
  }));
141
151
  } else {
142
- setError(value => _objectSpread(_objectSpread({}, value), {}, {
152
+ setFormError(value => _objectSpread(_objectSpread({}, value), {}, {
143
153
  description: ''
144
154
  }));
145
155
  }
@@ -147,12 +157,40 @@ function PreparePage() {
147
157
  return isError;
148
158
  };
149
159
 
150
- const handleLaunch = () => {
160
+ const handleLaunch = async () => {
161
+ setLaunching(true);
162
+
151
163
  if (validate()) {
152
164
  return;
153
165
  }
154
166
 
155
- setShowLaunchInstanceDialog(true);
167
+ if (isRedeem) {
168
+ setShowLaunchInstanceDialog(true);
169
+ return;
170
+ }
171
+
172
+ try {
173
+ const {
174
+ status
175
+ } = await api.post('/instances/launch', {
176
+ nftId,
177
+ name,
178
+ description
179
+ });
180
+
181
+ if (status !== 202) {
182
+ setError(t('launch.error.launchFailed'));
183
+ return;
184
+ }
185
+
186
+ handleAuthSuccess({
187
+ nftId
188
+ });
189
+ } catch (err) {
190
+ setError((0, _util.getAPIResponseError)(err));
191
+ } finally {
192
+ setLaunching(false);
193
+ }
156
194
  }; // eslint-disable-next-line no-shadow
157
195
 
158
196
 
@@ -163,11 +201,11 @@ function PreparePage() {
163
201
  history.push((0, _router.default)(routerPrefix, "/in-progress/".concat(nftId).concat(window.location.search)));
164
202
  };
165
203
 
166
- const handleCloseAuthDialog = () => setShowLaunchInstanceDialog(false);
204
+ const handleCloseAuthDialog = () => {
205
+ setLaunching(false);
206
+ setShowLaunchInstanceDialog(false);
207
+ };
167
208
 
168
- const isRedeem = nftId === _launcherConstant.REDEEM_NFT_ID;
169
- const headerScope = isRedeem ? 'redeem' : 'prepare';
170
- const buttonScope = isRedeem ? 'redeem' : 'launch';
171
209
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(Container, null, /*#__PURE__*/_react.default.createElement(_pageHeader.default, {
172
210
  title: t("".concat(headerScope, ".title")),
173
211
  subTitle: t("".concat(headerScope, ".subTitle"))
@@ -179,7 +217,7 @@ function PreparePage() {
179
217
  className: "inputs"
180
218
  }, /*#__PURE__*/_react.default.createElement(_FormControl.default, {
181
219
  className: "input-item",
182
- error: !!error.name
220
+ formError: !!formError.name
183
221
  }, /*#__PURE__*/_react.default.createElement(_TextField.default, {
184
222
  id: "name",
185
223
  variant: "outlined",
@@ -188,24 +226,35 @@ function PreparePage() {
188
226
  value: name,
189
227
  labelWidth: 0,
190
228
  autoFocus: true
191
- }), error.name && /*#__PURE__*/_react.default.createElement(_FormHelperText.default, null, error.name)), /*#__PURE__*/_react.default.createElement(_FormControl.default, {
229
+ }), formError.name && /*#__PURE__*/_react.default.createElement(_FormHelperText.default, null, formError.name)), /*#__PURE__*/_react.default.createElement(_FormControl.default, {
192
230
  className: "input-item",
193
- error: !!error.description
231
+ formError: !!formError.description
194
232
  }, /*#__PURE__*/_react.default.createElement(_TextField.default, {
195
233
  id: "description",
196
234
  variant: "outlined",
197
235
  label: t('common.description'),
198
- error: !!error.desc,
236
+ formError: !!formError.desc,
199
237
  onChange: handleInput('description'),
200
238
  multiline: true,
201
239
  maxRows: 5,
202
240
  value: description,
203
241
  labelWidth: 0
204
- }), error.description && /*#__PURE__*/_react.default.createElement(_FormHelperText.default, null, error.description)))), /*#__PURE__*/_react.default.createElement("div", {
242
+ }), formError.description && /*#__PURE__*/_react.default.createElement(_FormHelperText.default, null, formError.description)))), /*#__PURE__*/_react.default.createElement("div", {
205
243
  className: "botton-container"
206
244
  }, /*#__PURE__*/_react.default.createElement(_serverEula.default, {
207
245
  onContinue: handleLaunch,
208
- nextDisabled: !name.trim() || !description.trim()
246
+ nextDisabled: !name.trim() || !description.trim() || launching,
247
+ launching: launching,
248
+ checkKey: "server-eula-checked",
249
+ description: /*#__PURE__*/_react.default.createElement(_server.default, {
250
+ className: "eula-content"
251
+ }),
252
+ texts: {
253
+ listenName: t('license.footer'),
254
+ launchingText: t('common.launching'),
255
+ buttonNext: t('common.next'),
256
+ confirmTitle: t('license.title')
257
+ }
209
258
  }))), /*#__PURE__*/_react.default.createElement(_Connect.default, {
210
259
  open: showLaunchInstanceDialog,
211
260
  popup: true,
@@ -223,15 +272,19 @@ function PreparePage() {
223
272
  disableClose: true,
224
273
  showDownload: false,
225
274
  messages: {
226
- title: t("".concat(buttonScope, ".dialog.title")),
227
- scan: t("".concat(buttonScope, ".dialog.scan")),
228
- confirm: t("".concat(buttonScope, ".dialog.confirm")),
229
- success: t("".concat(buttonScope, ".dialog.success"))
275
+ title: t('redeem.dialog.title'),
276
+ scan: t('redeem.dialog.scan'),
277
+ confirm: t('redeem.dialog.confirm'),
278
+ success: t('redeem.dialog.success')
230
279
  }
280
+ }), error && /*#__PURE__*/_react.default.createElement(_Toast.default, {
281
+ message: error,
282
+ variant: "error",
283
+ onClose: () => setError('')
231
284
  }));
232
285
  }
233
286
 
234
287
  const Container = _styledComponents.default.div.withConfig({
235
288
  displayName: "prepare__Container",
236
289
  componentId: "sc-1ddofcz-0"
237
- })(["display:flex;flex-direction:column;width:100%;height:100%;.page-logo{display:flex;justify-content:center;margin-top:62px;", "{margin-top:48px;}}.inputs{display:flex;align-items:center;flex-direction:column;text-align:center;}.input-item{margin-top:24px;width:90%;max-width:450px;font-size:14px;input,textarea{font-size:14px;}}.botton-container{margin-top:24px;text-align:center;}"], props => props.theme.breakpoints.down('sm'));
290
+ })(["display:flex;flex-direction:column;width:100%;height:100%;.page-logo{display:flex;justify-content:center;margin-top:62px;", "{margin-top:48px;}}.inputs{display:flex;align-items:center;flex-direction:column;text-align:center;}.input-item{margin-top:24px;width:90%;max-width:450px;font-size:14px;input,textarea{font-size:14px;}}.botton-container{width:100%;margin:24px auto;max-width:450px;text-align:center;}"], props => props.theme.breakpoints.down('sm'));
package/lib/purchase.js CHANGED
@@ -15,6 +15,8 @@ var _lodash = _interopRequireDefault(require("lodash.get"));
15
15
 
16
16
  var _styledComponents = _interopRequireDefault(require("styled-components"));
17
17
 
18
+ var _jsCookie = _interopRequireDefault(require("js-cookie"));
19
+
18
20
  var _Coins = require("@styled-icons/remix-fill/Coins");
19
21
 
20
22
  var _util = require("@ocap/util");
@@ -160,8 +162,12 @@ function PurchasePage() {
160
162
 
161
163
  const handlePaid = _ref => {
162
164
  let {
163
- nftId
165
+ nftId,
166
+ launchToken
164
167
  } = _ref;
168
+
169
+ _jsCookie.default.set('launch-token', launchToken);
170
+
165
171
  const url = "/prepare/".concat(nftId).concat(window.location.search);
166
172
  history.push((0, _router.default)(routerPrefix, url));
167
173
  };
package/lib/util.js CHANGED
@@ -3,11 +3,14 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.getAPIResponseError = void 0;
6
7
  exports.getBlockletMetaUrl = getBlockletMetaUrl;
7
8
  exports.loadURL = exports.getLaunchBlockletUrl = void 0;
8
9
 
9
10
  var _urlJoin = _interopRequireDefault(require("url-join"));
10
11
 
12
+ var _lodash = _interopRequireDefault(require("lodash.get"));
13
+
11
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
15
 
13
16
  function getBlockletMetaUrl(registry, did) {
@@ -19,7 +22,7 @@ const getLaunchBlockletUrl = (serverUrl, blockletMetaUrl, locale) => {
19
22
  return serverUrl;
20
23
  }
21
24
 
22
- let result = (0, _urlJoin.default)(serverUrl, "/launch-blocklet?blocklet_meta_url=".concat(encodeURIComponent(blockletMetaUrl)));
25
+ let result = (0, _urlJoin.default)(serverUrl, "/launch-blocklet/install?blocklet_meta_url=".concat(encodeURIComponent(blockletMetaUrl), "&from=launcher"));
23
26
 
24
27
  if (locale) {
25
28
  result += "&locale=".concat(locale);
@@ -30,6 +33,10 @@ const getLaunchBlockletUrl = (serverUrl, blockletMetaUrl, locale) => {
30
33
 
31
34
  exports.getLaunchBlockletUrl = getLaunchBlockletUrl;
32
35
 
36
+ const getAPIResponseError = error => (0, _lodash.default)(error, 'response.data.error', '') || error.message;
37
+
38
+ exports.getAPIResponseError = getAPIResponseError;
39
+
33
40
  const loadURL = url => new Promise(resolve => {
34
41
  let timer;
35
42
  const iframe = document.createElement('iframe');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blocklet/launcher-workflow",
3
- "version": "1.5.67",
3
+ "version": "1.5.70",
4
4
  "description": "Purchase components for Launcher UI",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -41,8 +41,8 @@
41
41
  "@arcblock/icons": "^1.16.49",
42
42
  "@arcblock/license": "^1.16.49",
43
43
  "@arcblock/ux": "^1.16.49",
44
- "@blocklet/launcher-constant": "1.5.67",
45
- "@blocklet/launcher-layout": "1.5.67",
44
+ "@blocklet/launcher-constant": "1.5.70",
45
+ "@blocklet/launcher-layout": "1.5.70",
46
46
  "@material-ui/core": "^4.12.3",
47
47
  "@material-ui/icons": "^4.11.2",
48
48
  "@material-ui/lab": "^4.0.0-alpha.60",
@@ -52,6 +52,7 @@
52
52
  "@styled-icons/remix-fill": "^10.18.0",
53
53
  "axios": "^0.26.0",
54
54
  "flat": "^5.0.2",
55
+ "js-cookie": "^3.0.1",
55
56
  "lodash.get": "^4.4.2",
56
57
  "lodash.throttle": "^4.1.1",
57
58
  "prop-types": "^15.8.1",
@@ -68,5 +69,5 @@
68
69
  "babel-plugin-inline-react-svg": "^2.0.1",
69
70
  "babel-plugin-styled-components": "^1.10.7"
70
71
  },
71
- "gitHead": "148ece1f7072a00dac0ef077e8e96b4460cc6381"
72
+ "gitHead": "6cd2aa6e4d3559047c68e2208b7ec12f31236930"
72
73
  }