@blocklet/launcher-workflow 1.5.65 → 1.5.68
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.
- package/lib/components/confirm.js +98 -0
- package/lib/components/instance-operation.js +3 -3
- package/lib/components/server-eula.js +107 -0
- package/lib/contexts/request.js +11 -0
- package/lib/index.js +6 -6
- package/lib/locales/en.js +12 -5
- package/lib/locales/zh.js +11 -4
- package/lib/prepare.js +76 -41
- package/lib/purchase.js +7 -1
- package/lib/util.js +7 -0
- package/package.json +6 -4
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = ConfirmDialog;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
|
+
|
|
12
|
+
var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
|
|
13
|
+
|
|
14
|
+
var _Dialog = _interopRequireDefault(require("@material-ui/core/Dialog"));
|
|
15
|
+
|
|
16
|
+
var _DialogActions = _interopRequireDefault(require("@material-ui/core/DialogActions"));
|
|
17
|
+
|
|
18
|
+
var _DialogContent = _interopRequireDefault(require("@material-ui/core/DialogContent"));
|
|
19
|
+
|
|
20
|
+
var _DialogContentText = _interopRequireDefault(require("@material-ui/core/DialogContentText"));
|
|
21
|
+
|
|
22
|
+
var _DialogTitle = _interopRequireDefault(require("@material-ui/core/DialogTitle"));
|
|
23
|
+
|
|
24
|
+
var _useTheme = _interopRequireDefault(require("@material-ui/core/styles/useTheme"));
|
|
25
|
+
|
|
26
|
+
var _useMediaQuery = _interopRequireDefault(require("@material-ui/core/useMediaQuery"));
|
|
27
|
+
|
|
28
|
+
var _locale = require("../contexts/locale");
|
|
29
|
+
|
|
30
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
31
|
+
|
|
32
|
+
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); }
|
|
33
|
+
|
|
34
|
+
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
|
+
|
|
36
|
+
function ConfirmDialog(_ref) {
|
|
37
|
+
let {
|
|
38
|
+
title,
|
|
39
|
+
description,
|
|
40
|
+
cancel,
|
|
41
|
+
confirm,
|
|
42
|
+
color,
|
|
43
|
+
params: initialParams,
|
|
44
|
+
onCancel,
|
|
45
|
+
onConfirm
|
|
46
|
+
} = _ref;
|
|
47
|
+
const {
|
|
48
|
+
t
|
|
49
|
+
} = (0, _react.useContext)(_locale.LocaleContext);
|
|
50
|
+
const [params, setParams] = (0, _react.useState)(initialParams);
|
|
51
|
+
const theme = (0, _useTheme.default)();
|
|
52
|
+
const isBreakpointsDownSm = (0, _useMediaQuery.default)(theme.breakpoints.down('sm'));
|
|
53
|
+
|
|
54
|
+
const onCallback = cb => {
|
|
55
|
+
if (typeof cb === 'function') {
|
|
56
|
+
cb(params);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
return /*#__PURE__*/_react.default.createElement(_Dialog.default, {
|
|
61
|
+
open: true,
|
|
62
|
+
fullScreen: isBreakpointsDownSm
|
|
63
|
+
}, /*#__PURE__*/_react.default.createElement(_DialogTitle.default, null, typeof title === 'function' ? title() : title), /*#__PURE__*/_react.default.createElement(_DialogContent.default, null, /*#__PURE__*/_react.default.createElement(_DialogContentText.default, null, typeof description === 'function' ? description(params, setParams) : description)), /*#__PURE__*/_react.default.createElement(_DialogActions.default, {
|
|
64
|
+
style: {
|
|
65
|
+
padding: '8px 24px 24px'
|
|
66
|
+
}
|
|
67
|
+
}, /*#__PURE__*/_react.default.createElement(_Button.default, {
|
|
68
|
+
onClick: () => onCallback(onCancel),
|
|
69
|
+
color: "default",
|
|
70
|
+
rounded: true
|
|
71
|
+
}, cancel || t('common.cancel')), /*#__PURE__*/_react.default.createElement(_Button.default, {
|
|
72
|
+
onClick: () => onCallback(onConfirm),
|
|
73
|
+
color: color,
|
|
74
|
+
variant: "outlined",
|
|
75
|
+
autoFocus: true,
|
|
76
|
+
rounded: true
|
|
77
|
+
}, confirm || t('common.confirm'))));
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
ConfirmDialog.propTypes = {
|
|
81
|
+
title: _propTypes.default.any.isRequired,
|
|
82
|
+
description: _propTypes.default.any.isRequired,
|
|
83
|
+
// can be a function that renders different content based on params
|
|
84
|
+
cancel: _propTypes.default.string,
|
|
85
|
+
color: _propTypes.default.string,
|
|
86
|
+
confirm: _propTypes.default.string,
|
|
87
|
+
params: _propTypes.default.object,
|
|
88
|
+
// This object holds states managed in the dialog
|
|
89
|
+
onCancel: _propTypes.default.func,
|
|
90
|
+
onConfirm: _propTypes.default.func.isRequired
|
|
91
|
+
};
|
|
92
|
+
ConfirmDialog.defaultProps = {
|
|
93
|
+
onCancel: () => {},
|
|
94
|
+
cancel: '',
|
|
95
|
+
confirm: '',
|
|
96
|
+
color: 'danger',
|
|
97
|
+
params: {}
|
|
98
|
+
};
|
|
@@ -9,12 +9,12 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
9
9
|
|
|
10
10
|
var _reactRouterDom = require("react-router-dom");
|
|
11
11
|
|
|
12
|
-
var _reactUse = require("react-use");
|
|
13
|
-
|
|
14
12
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
15
13
|
|
|
16
14
|
var _lodash = _interopRequireDefault(require("lodash.get"));
|
|
17
15
|
|
|
16
|
+
var _useInterval = _interopRequireDefault(require("react-use/lib/useInterval"));
|
|
17
|
+
|
|
18
18
|
var _lodash2 = _interopRequireDefault(require("lodash.throttle"));
|
|
19
19
|
|
|
20
20
|
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
@@ -121,7 +121,7 @@ function OperationPage(_ref) {
|
|
|
121
121
|
};
|
|
122
122
|
|
|
123
123
|
const poll = (0, _lodash2.default)(getInstanceStatus, 5000);
|
|
124
|
-
(0,
|
|
124
|
+
(0, _useInterval.default)(poll, launchState.status === STATUS.launching && nftId ? 5000 : null);
|
|
125
125
|
(0, _react.useEffect)(() => {
|
|
126
126
|
if (!nftId) {
|
|
127
127
|
return;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = ServerEula;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
11
|
+
|
|
12
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
13
|
+
|
|
14
|
+
var _useLocalStorage = _interopRequireDefault(require("react-use/lib/useLocalStorage"));
|
|
15
|
+
|
|
16
|
+
var _Checkbox = _interopRequireDefault(require("@material-ui/core/Checkbox"));
|
|
17
|
+
|
|
18
|
+
var _CheckCircleRounded = _interopRequireDefault(require("@material-ui/icons/CheckCircleRounded"));
|
|
19
|
+
|
|
20
|
+
var _CheckCircleOutlineRounded = _interopRequireDefault(require("@material-ui/icons/CheckCircleOutlineRounded"));
|
|
21
|
+
|
|
22
|
+
var _FormLabel = _interopRequireDefault(require("@material-ui/core/FormLabel"));
|
|
23
|
+
|
|
24
|
+
var _Spinner = _interopRequireDefault(require("@arcblock/ux/lib/Spinner"));
|
|
25
|
+
|
|
26
|
+
var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
|
|
27
|
+
|
|
28
|
+
var _server = _interopRequireDefault(require("@arcblock/license/lib/server"));
|
|
29
|
+
|
|
30
|
+
var _locale = require("../contexts/locale");
|
|
31
|
+
|
|
32
|
+
var _confirm = _interopRequireDefault(require("./confirm"));
|
|
33
|
+
|
|
34
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
35
|
+
|
|
36
|
+
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); }
|
|
37
|
+
|
|
38
|
+
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; }
|
|
39
|
+
|
|
40
|
+
/* eslint-disable react/jsx-wrap-multilines */
|
|
41
|
+
function ServerEula(_ref) {
|
|
42
|
+
let {
|
|
43
|
+
onContinue,
|
|
44
|
+
nextDisabled,
|
|
45
|
+
launching
|
|
46
|
+
} = _ref;
|
|
47
|
+
const [agreed, setAgreed] = (0, _useLocalStorage.default)('server-eula-checked', false);
|
|
48
|
+
const [open, setOpen] = (0, _react.useState)(false);
|
|
49
|
+
const {
|
|
50
|
+
t
|
|
51
|
+
} = (0, _react.useContext)(_locale.LocaleContext);
|
|
52
|
+
|
|
53
|
+
const handleChecked = () => setAgreed(x => !x);
|
|
54
|
+
|
|
55
|
+
const handleOpen = () => setOpen(x => !x);
|
|
56
|
+
|
|
57
|
+
const handleCancel = () => setOpen(false);
|
|
58
|
+
|
|
59
|
+
const handleConfirm = () => {
|
|
60
|
+
setAgreed(true);
|
|
61
|
+
setOpen(false);
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(Div, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
65
|
+
className: "eula-checkbox"
|
|
66
|
+
}, /*#__PURE__*/_react.default.createElement(_Checkbox.default, {
|
|
67
|
+
checked: agreed,
|
|
68
|
+
onChange: handleChecked,
|
|
69
|
+
color: "primary",
|
|
70
|
+
checkedIcon: /*#__PURE__*/_react.default.createElement(_CheckCircleRounded.default, null),
|
|
71
|
+
icon: /*#__PURE__*/_react.default.createElement(_CheckCircleOutlineRounded.default, null)
|
|
72
|
+
}), /*#__PURE__*/_react.default.createElement(_FormLabel.default, {
|
|
73
|
+
className: "eula-trigger",
|
|
74
|
+
onClick: handleOpen
|
|
75
|
+
}, t('license.footer'))), /*#__PURE__*/_react.default.createElement(_Button.default, {
|
|
76
|
+
disabled: !agreed || nextDisabled,
|
|
77
|
+
color: "primary",
|
|
78
|
+
variant: "contained",
|
|
79
|
+
className: "next-button",
|
|
80
|
+
onClick: onContinue
|
|
81
|
+
}, launching ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Spinner.default, {
|
|
82
|
+
size: 14
|
|
83
|
+
}), t('common.launching')) : t('common.next'))), open && /*#__PURE__*/_react.default.createElement(_confirm.default, {
|
|
84
|
+
title: t('license.title'),
|
|
85
|
+
description: /*#__PURE__*/_react.default.createElement(_server.default, {
|
|
86
|
+
className: "eula-content"
|
|
87
|
+
}),
|
|
88
|
+
color: "primary",
|
|
89
|
+
onCancel: handleCancel,
|
|
90
|
+
onConfirm: handleConfirm
|
|
91
|
+
}));
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
ServerEula.propTypes = {
|
|
95
|
+
onContinue: _propTypes.default.func.isRequired,
|
|
96
|
+
nextDisabled: _propTypes.default.bool,
|
|
97
|
+
launching: _propTypes.default.bool
|
|
98
|
+
};
|
|
99
|
+
ServerEula.defaultProps = {
|
|
100
|
+
nextDisabled: false,
|
|
101
|
+
launching: false
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
const Div = _styledComponents.default.div.withConfig({
|
|
105
|
+
displayName: "server-eula__Div",
|
|
106
|
+
componentId: "sc-16uy00s-0"
|
|
107
|
+
})(["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);
|
package/lib/contexts/request.js
CHANGED
|
@@ -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(
|
|
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(
|
|
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
|
@@ -17,11 +17,14 @@ module.exports = {
|
|
|
17
17
|
next: 'Next',
|
|
18
18
|
purchase: 'Purchase',
|
|
19
19
|
redeem: 'Redeem',
|
|
20
|
-
redirecting: 'Redirecting'
|
|
20
|
+
redirecting: 'Redirecting',
|
|
21
|
+
cancel: 'Cancel',
|
|
22
|
+
confirm: 'Confirm',
|
|
23
|
+
launching: 'Launching'
|
|
21
24
|
},
|
|
22
25
|
plan: {
|
|
23
|
-
title: 'Select Blocklet Server
|
|
24
|
-
subTitle: '
|
|
26
|
+
title: 'Select Blocklet Server Plan',
|
|
27
|
+
subTitle: 'Select payment method and plan',
|
|
25
28
|
loadListFailed: 'Plan list load error',
|
|
26
29
|
paymentCredit: {
|
|
27
30
|
status: {
|
|
@@ -35,9 +38,13 @@ module.exports = {
|
|
|
35
38
|
useFiat: 'Credit Card',
|
|
36
39
|
noPlan: 'No blocklet server available for purchase'
|
|
37
40
|
},
|
|
41
|
+
license: {
|
|
42
|
+
title: 'End User License Agreement',
|
|
43
|
+
footer: 'I agree to the Blocklet Server EULA'
|
|
44
|
+
},
|
|
38
45
|
prepare: {
|
|
39
46
|
title: 'Naming Blocklet Server',
|
|
40
|
-
subTitle: 'Please enter
|
|
47
|
+
subTitle: 'Please enter server name and description, they will appear in your server passport'
|
|
41
48
|
},
|
|
42
49
|
launch: {
|
|
43
50
|
title: 'Create Blocklet Server',
|
|
@@ -71,7 +78,7 @@ module.exports = {
|
|
|
71
78
|
},
|
|
72
79
|
redeem: {
|
|
73
80
|
title: 'Redeem Blocklet Server',
|
|
74
|
-
subTitle: 'Name
|
|
81
|
+
subTitle: 'Name the blocklet server you are going to redeem, the name will exist on server passport',
|
|
75
82
|
dialog: {
|
|
76
83
|
title: 'Redeem Blocklet Server',
|
|
77
84
|
scan: 'Scan the QR code below with your DID wallet to complete redeem',
|
package/lib/locales/zh.js
CHANGED
|
@@ -12,10 +12,13 @@ module.exports = {
|
|
|
12
12
|
description: '描述',
|
|
13
13
|
retry: '重试',
|
|
14
14
|
launch: '启动',
|
|
15
|
-
next: '
|
|
15
|
+
next: '继续',
|
|
16
16
|
redeem: '兑换',
|
|
17
17
|
purchase: '购买',
|
|
18
|
-
redirecting: '跳转中'
|
|
18
|
+
redirecting: '跳转中',
|
|
19
|
+
cancel: '取消',
|
|
20
|
+
confirm: '同意',
|
|
21
|
+
launching: '启动中'
|
|
19
22
|
},
|
|
20
23
|
plan: {
|
|
21
24
|
title: '创建节点',
|
|
@@ -33,9 +36,13 @@ module.exports = {
|
|
|
33
36
|
useFiat: '信用卡支付',
|
|
34
37
|
noPlan: '没有可购买的节点类型'
|
|
35
38
|
},
|
|
39
|
+
license: {
|
|
40
|
+
title: '节点用户协议',
|
|
41
|
+
footer: '我已经阅读并同意节点的用户协议'
|
|
42
|
+
},
|
|
36
43
|
prepare: {
|
|
37
44
|
title: '命名节点',
|
|
38
|
-
subTitle: '
|
|
45
|
+
subTitle: '请输入要创建的节点名称和描述,它们将显示在您的节点通行证中'
|
|
39
46
|
},
|
|
40
47
|
launch: {
|
|
41
48
|
title: '创建节点',
|
|
@@ -69,7 +76,7 @@ module.exports = {
|
|
|
69
76
|
},
|
|
70
77
|
redeem: {
|
|
71
78
|
title: '启动节点',
|
|
72
|
-
subTitle: '
|
|
79
|
+
subTitle: '为你的节点起个名字吧,节点名字将会打印在节点通行证上',
|
|
73
80
|
dialog: {
|
|
74
81
|
title: '兑换节点',
|
|
75
82
|
scan: '用您的 DID 钱包扫描下面的二维码,提供 NFT',
|
package/lib/prepare.js
CHANGED
|
@@ -11,7 +11,7 @@ var _reactRouterDom = require("react-router-dom");
|
|
|
11
11
|
|
|
12
12
|
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
13
13
|
|
|
14
|
-
var
|
|
14
|
+
var _Toast = _interopRequireDefault(require("@arcblock/ux/lib/Toast"));
|
|
15
15
|
|
|
16
16
|
var _Connect = _interopRequireDefault(require("@arcblock/did-connect/lib/Connect"));
|
|
17
17
|
|
|
@@ -27,12 +27,16 @@ var _launcherConstant = require("@blocklet/launcher-constant");
|
|
|
27
27
|
|
|
28
28
|
var _pageHeader = _interopRequireDefault(require("./components/page-header"));
|
|
29
29
|
|
|
30
|
+
var _serverEula = _interopRequireDefault(require("./components/server-eula"));
|
|
31
|
+
|
|
30
32
|
var _request = _interopRequireDefault(require("./contexts/request"));
|
|
31
33
|
|
|
32
34
|
var _locale = require("./contexts/locale");
|
|
33
35
|
|
|
34
36
|
var _router = _interopRequireWildcard(require("./contexts/router"));
|
|
35
37
|
|
|
38
|
+
var _util = require("./util");
|
|
39
|
+
|
|
36
40
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
37
41
|
|
|
38
42
|
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 +84,6 @@ BlockletServerIcon.defaultProps = {
|
|
|
80
84
|
fill: "none",
|
|
81
85
|
xmlns: "http://www.w3.org/2000/svg"
|
|
82
86
|
};
|
|
83
|
-
const MAX_NAME_LENGTH = 30;
|
|
84
|
-
const MAX_DESC_LENGTH = 50;
|
|
85
87
|
|
|
86
88
|
function PreparePage() {
|
|
87
89
|
const {
|
|
@@ -89,18 +91,21 @@ function PreparePage() {
|
|
|
89
91
|
} = (0, _react.useContext)(_locale.LocaleContext);
|
|
90
92
|
const [name, setName] = (0, _react.useState)('');
|
|
91
93
|
const [description, setDescription] = (0, _react.useState)('');
|
|
92
|
-
const [
|
|
94
|
+
const [formError, setFormError] = (0, _react.useState)({
|
|
93
95
|
name: '',
|
|
94
96
|
description: ''
|
|
95
97
|
});
|
|
96
98
|
const routerPrefix = (0, _router.usePrefix)();
|
|
99
|
+
const [launching, setLaunching] = (0, _react.useState)(false);
|
|
100
|
+
const [error, setError] = (0, _react.useState)('');
|
|
97
101
|
const [showLaunchInstanceDialog, setShowLaunchInstanceDialog] = (0, _react.useState)(false);
|
|
98
102
|
const {
|
|
99
103
|
nftId
|
|
100
104
|
} = (0, _reactRouterDom.useParams)();
|
|
101
105
|
const history = (0, _reactRouterDom.useHistory)();
|
|
102
106
|
const {
|
|
103
|
-
create: createRequest
|
|
107
|
+
create: createRequest,
|
|
108
|
+
api
|
|
104
109
|
} = (0, _request.default)();
|
|
105
110
|
|
|
106
111
|
const handleInput = id => e => {
|
|
@@ -115,31 +120,34 @@ function PreparePage() {
|
|
|
115
120
|
validate();
|
|
116
121
|
};
|
|
117
122
|
|
|
123
|
+
const isRedeem = nftId === _launcherConstant.REDEEM_NFT_ID;
|
|
124
|
+
const headerScope = isRedeem ? 'redeem' : 'prepare';
|
|
125
|
+
|
|
118
126
|
const validate = () => {
|
|
119
127
|
let isError = false;
|
|
120
128
|
|
|
121
|
-
if (name.length >
|
|
129
|
+
if (name.length > _launcherConstant.INSTANCE_MAX_NAME_LENGTH) {
|
|
122
130
|
isError = true;
|
|
123
|
-
|
|
124
|
-
name: t('launchPrepare.
|
|
125
|
-
length:
|
|
131
|
+
setFormError(value => _objectSpread(_objectSpread({}, value), {}, {
|
|
132
|
+
name: t('launchPrepare.formError.nameExceed', {
|
|
133
|
+
length: _launcherConstant.INSTANCE_MAX_NAME_LENGTH
|
|
126
134
|
})
|
|
127
135
|
}));
|
|
128
136
|
} else {
|
|
129
|
-
|
|
137
|
+
setFormError(value => _objectSpread(_objectSpread({}, value), {}, {
|
|
130
138
|
name: ''
|
|
131
139
|
}));
|
|
132
140
|
}
|
|
133
141
|
|
|
134
|
-
if (description.length >
|
|
142
|
+
if (description.length > _launcherConstant.INSTANCE_MAX_DESC_LENGTH) {
|
|
135
143
|
isError = true;
|
|
136
|
-
|
|
137
|
-
description: t('launchPrepare.
|
|
138
|
-
length:
|
|
144
|
+
setFormError(value => _objectSpread(_objectSpread({}, value), {}, {
|
|
145
|
+
description: t('launchPrepare.formError.descriptionExceed', {
|
|
146
|
+
length: _launcherConstant.INSTANCE_MAX_DESC_LENGTH
|
|
139
147
|
})
|
|
140
148
|
}));
|
|
141
149
|
} else {
|
|
142
|
-
|
|
150
|
+
setFormError(value => _objectSpread(_objectSpread({}, value), {}, {
|
|
143
151
|
description: ''
|
|
144
152
|
}));
|
|
145
153
|
}
|
|
@@ -147,12 +155,40 @@ function PreparePage() {
|
|
|
147
155
|
return isError;
|
|
148
156
|
};
|
|
149
157
|
|
|
150
|
-
const handleLaunch = () => {
|
|
158
|
+
const handleLaunch = async () => {
|
|
159
|
+
setLaunching(true);
|
|
160
|
+
|
|
151
161
|
if (validate()) {
|
|
152
162
|
return;
|
|
153
163
|
}
|
|
154
164
|
|
|
155
|
-
|
|
165
|
+
if (isRedeem) {
|
|
166
|
+
setShowLaunchInstanceDialog(true);
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
try {
|
|
171
|
+
const {
|
|
172
|
+
status
|
|
173
|
+
} = await api.post('/instances/launch', {
|
|
174
|
+
nftId,
|
|
175
|
+
name,
|
|
176
|
+
description
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
if (status !== 202) {
|
|
180
|
+
setError(t('launch.error.launchFailed'));
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
handleAuthSuccess({
|
|
185
|
+
nftId
|
|
186
|
+
});
|
|
187
|
+
} catch (err) {
|
|
188
|
+
setError((0, _util.getAPIResponseError)(err));
|
|
189
|
+
} finally {
|
|
190
|
+
setLaunching(false);
|
|
191
|
+
}
|
|
156
192
|
}; // eslint-disable-next-line no-shadow
|
|
157
193
|
|
|
158
194
|
|
|
@@ -163,11 +199,11 @@ function PreparePage() {
|
|
|
163
199
|
history.push((0, _router.default)(routerPrefix, "/in-progress/".concat(nftId).concat(window.location.search)));
|
|
164
200
|
};
|
|
165
201
|
|
|
166
|
-
const handleCloseAuthDialog = () =>
|
|
202
|
+
const handleCloseAuthDialog = () => {
|
|
203
|
+
setLaunching(false);
|
|
204
|
+
setShowLaunchInstanceDialog(false);
|
|
205
|
+
};
|
|
167
206
|
|
|
168
|
-
const isRedeem = nftId === _launcherConstant.REDEEM_NFT_ID;
|
|
169
|
-
const headerScope = isRedeem ? 'redeem' : 'prepare';
|
|
170
|
-
const buttonScope = isRedeem ? 'redeem' : 'launch';
|
|
171
207
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(Container, null, /*#__PURE__*/_react.default.createElement(_pageHeader.default, {
|
|
172
208
|
title: t("".concat(headerScope, ".title")),
|
|
173
209
|
subTitle: t("".concat(headerScope, ".subTitle"))
|
|
@@ -179,7 +215,7 @@ function PreparePage() {
|
|
|
179
215
|
className: "inputs"
|
|
180
216
|
}, /*#__PURE__*/_react.default.createElement(_FormControl.default, {
|
|
181
217
|
className: "input-item",
|
|
182
|
-
|
|
218
|
+
formError: !!formError.name
|
|
183
219
|
}, /*#__PURE__*/_react.default.createElement(_TextField.default, {
|
|
184
220
|
id: "name",
|
|
185
221
|
variant: "outlined",
|
|
@@ -188,31 +224,26 @@ function PreparePage() {
|
|
|
188
224
|
value: name,
|
|
189
225
|
labelWidth: 0,
|
|
190
226
|
autoFocus: true
|
|
191
|
-
}),
|
|
227
|
+
}), formError.name && /*#__PURE__*/_react.default.createElement(_FormHelperText.default, null, formError.name)), /*#__PURE__*/_react.default.createElement(_FormControl.default, {
|
|
192
228
|
className: "input-item",
|
|
193
|
-
|
|
229
|
+
formError: !!formError.description
|
|
194
230
|
}, /*#__PURE__*/_react.default.createElement(_TextField.default, {
|
|
195
231
|
id: "description",
|
|
196
232
|
variant: "outlined",
|
|
197
233
|
label: t('common.description'),
|
|
198
|
-
|
|
234
|
+
formError: !!formError.desc,
|
|
199
235
|
onChange: handleInput('description'),
|
|
200
236
|
multiline: true,
|
|
201
237
|
maxRows: 5,
|
|
202
238
|
value: description,
|
|
203
239
|
labelWidth: 0
|
|
204
|
-
}),
|
|
240
|
+
}), formError.description && /*#__PURE__*/_react.default.createElement(_FormHelperText.default, null, formError.description)))), /*#__PURE__*/_react.default.createElement("div", {
|
|
205
241
|
className: "botton-container"
|
|
206
|
-
}, /*#__PURE__*/_react.default.createElement(
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
color: "primary",
|
|
212
|
-
variant: "contained",
|
|
213
|
-
rounded: true,
|
|
214
|
-
onClick: handleLaunch
|
|
215
|
-
}, t('common.next')))), /*#__PURE__*/_react.default.createElement(_Connect.default, {
|
|
242
|
+
}, /*#__PURE__*/_react.default.createElement(_serverEula.default, {
|
|
243
|
+
onContinue: handleLaunch,
|
|
244
|
+
nextDisabled: !name.trim() || !description.trim() || launching,
|
|
245
|
+
launching: launching
|
|
246
|
+
}))), /*#__PURE__*/_react.default.createElement(_Connect.default, {
|
|
216
247
|
open: showLaunchInstanceDialog,
|
|
217
248
|
popup: true,
|
|
218
249
|
action: "launch-instance",
|
|
@@ -229,15 +260,19 @@ function PreparePage() {
|
|
|
229
260
|
disableClose: true,
|
|
230
261
|
showDownload: false,
|
|
231
262
|
messages: {
|
|
232
|
-
title: t(
|
|
233
|
-
scan: t(
|
|
234
|
-
confirm: t(
|
|
235
|
-
success: t(
|
|
263
|
+
title: t('redeem.dialog.title'),
|
|
264
|
+
scan: t('redeem.dialog.scan'),
|
|
265
|
+
confirm: t('redeem.dialog.confirm'),
|
|
266
|
+
success: t('redeem.dialog.success')
|
|
236
267
|
}
|
|
268
|
+
}), error && /*#__PURE__*/_react.default.createElement(_Toast.default, {
|
|
269
|
+
message: error,
|
|
270
|
+
variant: "error",
|
|
271
|
+
onClose: () => setError('')
|
|
237
272
|
}));
|
|
238
273
|
}
|
|
239
274
|
|
|
240
275
|
const Container = _styledComponents.default.div.withConfig({
|
|
241
276
|
displayName: "prepare__Container",
|
|
242
277
|
componentId: "sc-1ddofcz-0"
|
|
243
|
-
})(["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:
|
|
278
|
+
})(["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'));
|
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) {
|
|
@@ -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.
|
|
3
|
+
"version": "1.5.68",
|
|
4
4
|
"description": "Purchase components for Launcher UI",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -39,9 +39,10 @@
|
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"@arcblock/did-connect": "^1.16.49",
|
|
41
41
|
"@arcblock/icons": "^1.16.49",
|
|
42
|
+
"@arcblock/license": "^1.16.49",
|
|
42
43
|
"@arcblock/ux": "^1.16.49",
|
|
43
|
-
"@blocklet/launcher-constant": "1.5.
|
|
44
|
-
"@blocklet/launcher-layout": "1.5.
|
|
44
|
+
"@blocklet/launcher-constant": "1.5.68",
|
|
45
|
+
"@blocklet/launcher-layout": "1.5.68",
|
|
45
46
|
"@material-ui/core": "^4.12.3",
|
|
46
47
|
"@material-ui/icons": "^4.11.2",
|
|
47
48
|
"@material-ui/lab": "^4.0.0-alpha.60",
|
|
@@ -51,6 +52,7 @@
|
|
|
51
52
|
"@styled-icons/remix-fill": "^10.18.0",
|
|
52
53
|
"axios": "^0.26.0",
|
|
53
54
|
"flat": "^5.0.2",
|
|
55
|
+
"js-cookie": "^3.0.1",
|
|
54
56
|
"lodash.get": "^4.4.2",
|
|
55
57
|
"lodash.throttle": "^4.1.1",
|
|
56
58
|
"prop-types": "^15.8.1",
|
|
@@ -67,5 +69,5 @@
|
|
|
67
69
|
"babel-plugin-inline-react-svg": "^2.0.1",
|
|
68
70
|
"babel-plugin-styled-components": "^1.10.7"
|
|
69
71
|
},
|
|
70
|
-
"gitHead": "
|
|
72
|
+
"gitHead": "70a65ca42b47efb86e93b8495ce6db35d4360cff"
|
|
71
73
|
}
|