@blocklet/launcher-workflow 1.9.64 → 2.0.0
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/assets/images/check-reverse.svg +5 -0
- package/lib/assets/images/check.svg +5 -0
- package/lib/assets/images/checkbox-checked.svg +5 -0
- package/lib/assets/images/checkbox-unchecked.svg +3 -0
- package/lib/assets/images/cup.svg +9 -0
- package/lib/assets/images/space.svg +9 -0
- package/lib/checkout.js +312 -0
- package/lib/components/agreement.js +12 -0
- package/lib/components/checkbox.js +79 -0
- package/lib/components/{instance-operation.js → launch-dedicated.js} +63 -44
- package/lib/components/{prepare-serverless.js → launch-serverless.js} +5 -5
- package/lib/components/layout/body.js +27 -0
- package/lib/components/layout/footer.js +33 -0
- package/lib/components/layout/header.js +34 -0
- package/lib/components/layout/index.js +36 -0
- package/lib/components/plan.js +281 -0
- package/lib/contexts/request.js +25 -20
- package/lib/contexts/workflow.js +65 -0
- package/lib/launch.js +17 -8
- package/lib/locales/en.js +17 -6
- package/lib/locales/zh.js +19 -8
- package/lib/purchase.js +165 -207
- package/lib/util.js +18 -2
- package/package.json +6 -5
- package/lib/api.js +0 -35
- package/lib/components/prepare-standard.js +0 -241
- package/lib/contexts/router.js +0 -55
- package/lib/prepare.js +0 -26
- package/lib/router-content.js +0 -52
- package/lib/start.js +0 -34
package/lib/purchase.js
CHANGED
|
@@ -7,238 +7,196 @@ exports.default = void 0;
|
|
|
7
7
|
var _react = require("react");
|
|
8
8
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
9
|
var _reactRouterDom = require("react-router-dom");
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
var _jsCookie = _interopRequireDefault(require("js-cookie"));
|
|
10
|
+
var _useAsync = _interopRequireDefault(require("react-use/lib/useAsync"));
|
|
11
|
+
var _reactMaterialUiCarousel = _interopRequireDefault(require("react-material-ui-carousel"));
|
|
13
12
|
var _urlJoin = _interopRequireDefault(require("url-join"));
|
|
14
|
-
var
|
|
13
|
+
var _styled = _interopRequireDefault(require("@emotion/styled"));
|
|
15
14
|
var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
|
|
16
|
-
var
|
|
17
|
-
var
|
|
18
|
-
var
|
|
19
|
-
var
|
|
20
|
-
var
|
|
21
|
-
var
|
|
22
|
-
var
|
|
23
|
-
var
|
|
24
|
-
var _list = _interopRequireDefault(require("@did-pay/react/lib/payment-method/list"));
|
|
25
|
-
var _list2 = _interopRequireDefault(require("@did-pay/react/lib/plan/list"));
|
|
26
|
-
var _query = _interopRequireDefault(require("./hooks/query"));
|
|
15
|
+
var _useMobile = _interopRequireDefault(require("@blocklet/launcher-ux/lib/use-mobile"));
|
|
16
|
+
var _Grid = _interopRequireDefault(require("@mui/material/Grid"));
|
|
17
|
+
var _CircularProgress = _interopRequireDefault(require("@mui/material/CircularProgress"));
|
|
18
|
+
var _body = _interopRequireDefault(require("./components/layout/body"));
|
|
19
|
+
var _plan = _interopRequireDefault(require("./components/plan"));
|
|
20
|
+
var _layout = _interopRequireDefault(require("./components/layout"));
|
|
21
|
+
var _header = _interopRequireDefault(require("./components/layout/header"));
|
|
22
|
+
var _footer = _interopRequireDefault(require("./components/layout/footer"));
|
|
27
23
|
var _locale = require("./contexts/locale");
|
|
28
|
-
var
|
|
29
|
-
var
|
|
30
|
-
var _util = require("./util");
|
|
24
|
+
var _request = _interopRequireDefault(require("./contexts/request"));
|
|
25
|
+
var _workflow = require("./contexts/workflow");
|
|
31
26
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
32
27
|
var _templateObject;
|
|
33
|
-
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); }
|
|
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
28
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
36
29
|
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
30
|
+
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; }
|
|
31
|
+
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; }
|
|
32
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
33
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
34
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
37
35
|
function PurchasePage(_ref) {
|
|
38
|
-
var
|
|
36
|
+
var _planState$value;
|
|
39
37
|
let {
|
|
40
|
-
|
|
38
|
+
disableBack
|
|
41
39
|
} = _ref;
|
|
42
|
-
const query = (0, _query.default)();
|
|
43
|
-
const navigate = (0, _reactRouterDom.useNavigate)();
|
|
44
|
-
const disabledBack = (0, _router.useDisabledBack)();
|
|
45
|
-
const [plan, setPlan] = (0, _react.useState)(null);
|
|
46
|
-
const {
|
|
47
|
-
session
|
|
48
|
-
} = (0, _session.useSessionContext)();
|
|
49
40
|
const {
|
|
50
|
-
t
|
|
51
|
-
locale
|
|
41
|
+
t
|
|
52
42
|
} = (0, _locale.useLocaleContext)();
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
searchParams.set('launchType', 'serverless');
|
|
80
|
-
}
|
|
43
|
+
const {
|
|
44
|
+
create
|
|
45
|
+
} = (0, _request.default)();
|
|
46
|
+
const {
|
|
47
|
+
isMobile
|
|
48
|
+
} = (0, _useMobile.default)();
|
|
49
|
+
const {
|
|
50
|
+
search
|
|
51
|
+
} = (0, _reactRouterDom.useLocation)();
|
|
52
|
+
const [selectedPlanId, setSelectedPlanId] = (0, _react.useState)();
|
|
53
|
+
const {
|
|
54
|
+
routerPrefix,
|
|
55
|
+
embed,
|
|
56
|
+
didPayPrefix
|
|
57
|
+
} = (0, _workflow.useWorkflowContext)();
|
|
58
|
+
const api = create({
|
|
59
|
+
baseURL: didPayPrefix
|
|
60
|
+
});
|
|
61
|
+
const planState = (0, _useAsync.default)(async () => {
|
|
62
|
+
const {
|
|
63
|
+
data
|
|
64
|
+
} = await api.get('/plans');
|
|
65
|
+
const plans = (data || []).sort((itemX, itemY) => itemX.weight - itemY.weight);
|
|
66
|
+
if (plans.length > 0) {
|
|
67
|
+
setSelectedPlanId(plans[0]._id);
|
|
81
68
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
setPaying(false);
|
|
69
|
+
return plans;
|
|
70
|
+
});
|
|
71
|
+
const handleSelect = planId => {
|
|
72
|
+
setSelectedPlanId(planId);
|
|
87
73
|
};
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
74
|
+
const carouselProps = {
|
|
75
|
+
autoPlay: false,
|
|
76
|
+
animation: 'slide',
|
|
77
|
+
swipe: true,
|
|
78
|
+
index: 0,
|
|
79
|
+
indicators: true,
|
|
80
|
+
fullHeightHover: true,
|
|
81
|
+
cycleNavigation: false,
|
|
82
|
+
navButtonsWrapperProps: {
|
|
83
|
+
className: 'nav-buttons-wrapper'
|
|
84
|
+
},
|
|
85
|
+
navButtonsProps: {
|
|
86
|
+
style: {
|
|
87
|
+
margin: '0 0'
|
|
97
88
|
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
const pay = () => {
|
|
105
|
-
const params = getPurchaseParams();
|
|
106
|
-
if (!params.productId) {
|
|
107
|
-
return;
|
|
89
|
+
},
|
|
90
|
+
onChange: index => {
|
|
91
|
+
if (index < 0 || index > planState.value.length - 1) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
handleSelect(planState.value[index]._id);
|
|
108
95
|
}
|
|
109
|
-
setPaying(true);
|
|
110
96
|
};
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
97
|
+
const params = new URLSearchParams(search);
|
|
98
|
+
params.set('planId', selectedPlanId);
|
|
99
|
+
const productFeatures = [];
|
|
100
|
+
if (!planState.loading && ((_planState$value = planState.value) === null || _planState$value === void 0 ? void 0 : _planState$value.length) > 0) {
|
|
101
|
+
// TODO: Pricing Table: 临时做法
|
|
102
|
+
try {
|
|
103
|
+
const {
|
|
104
|
+
features
|
|
105
|
+
} = planState.value[0];
|
|
106
|
+
if (features && features.length > 0) {
|
|
107
|
+
const temp = JSON.parse(features[0].en);
|
|
108
|
+
temp.forEach(item => {
|
|
109
|
+
productFeatures.push({
|
|
110
|
+
_id: item.featureId,
|
|
111
|
+
name: item.name,
|
|
112
|
+
type: item.type
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
} catch (error) {
|
|
117
|
+
console.error('parse product feature failed:', error);
|
|
115
118
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
return (
|
|
140
|
-
/*#__PURE__*/
|
|
141
|
-
// layout-fix-container for compatibility with lower versions of safari, do not remove this className
|
|
142
|
-
(0, _jsxRuntime.jsxs)(Container, {
|
|
143
|
-
className: "layout-fix-container",
|
|
144
|
-
children: [isEmbed && !isMobile && /*#__PURE__*/(0, _jsxRuntime.jsx)(_pageHeader.default, {
|
|
145
|
-
title: t('plan.title'),
|
|
146
|
-
subTitle: t('plan.subTitle'),
|
|
147
|
-
onClickBack: disabledBack.includes('purchase') ? '' : clickBack
|
|
148
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
149
|
-
className: "page-body body",
|
|
150
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
151
|
-
className: "page-body-article",
|
|
152
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_submit.default, {
|
|
153
|
-
disabled: paying,
|
|
154
|
-
onConfirm: handlePay,
|
|
155
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_compactLayout.default, {
|
|
156
|
-
onBottomFix: type => setButtonInFix(type === 'fix'),
|
|
157
|
-
bottom: planLoaded ? /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
158
|
-
className: "button-container container-padding ".concat(buttonInFix ? 'has-shadow' : ''),
|
|
159
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
|
|
160
|
-
onClick: () => handleRedeem(),
|
|
161
|
-
variant: "outlined",
|
|
162
|
-
color: "primary",
|
|
163
|
-
style: {
|
|
164
|
-
marginRight: '24px'
|
|
165
|
-
},
|
|
166
|
-
children: t('common.redeem')
|
|
167
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Button.default, {
|
|
168
|
-
onClick: handlePay,
|
|
169
|
-
disabled: paying,
|
|
170
|
-
variant: "contained",
|
|
171
|
-
color: "primary",
|
|
172
|
-
children: [paying && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Spinner.default, {
|
|
173
|
-
size: 14
|
|
174
|
-
}), paying ? t('common.paying') : t('common.purchase')]
|
|
175
|
-
})]
|
|
176
|
-
}) : '',
|
|
177
|
-
children: [(!isEmbed || isMobile) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_pageHeader.default, {
|
|
178
|
-
title: t('plan.title'),
|
|
179
|
-
subTitle: t('plan.subTitle'),
|
|
180
|
-
onClickBack: disabledBack.includes('purchase') ? '' : clickBack
|
|
181
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
182
|
-
className: "select-payment",
|
|
183
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_list.default, {
|
|
184
|
-
locale: locale,
|
|
185
|
-
baseURL: baseURL,
|
|
186
|
-
onChange: handleSelectPaymenMethod,
|
|
187
|
-
onLoaded: handlePaymentMethodsLoaded
|
|
188
|
-
})
|
|
189
|
-
}), paymentMethod && /*#__PURE__*/(0, _jsxRuntime.jsx)(_list2.default, {
|
|
190
|
-
locale: locale,
|
|
191
|
-
baseURL: baseURL,
|
|
192
|
-
paymentMethod: paymentMethod,
|
|
193
|
-
onSelect: v => setPlan(v),
|
|
194
|
-
onLoaded: () => setPlanLoaded(true)
|
|
195
|
-
})]
|
|
119
|
+
}
|
|
120
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Container, {
|
|
121
|
+
embed: embed,
|
|
122
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_header.default, {
|
|
123
|
+
title: t('purchase.pageTitle'),
|
|
124
|
+
disableBack: disableBack
|
|
125
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_body.default, {
|
|
126
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
127
|
+
className: "plan-list",
|
|
128
|
+
children: planState.loading ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_CircularProgress.default, {}) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
129
|
+
children: [isMobile && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactMaterialUiCarousel.default, _objectSpread(_objectSpread({
|
|
130
|
+
className: "carousel"
|
|
131
|
+
}, carouselProps), {}, {
|
|
132
|
+
children: (planState.value || []).map((plan, index) => {
|
|
133
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_plan.default, {
|
|
134
|
+
style: {
|
|
135
|
+
width: '100%'
|
|
136
|
+
},
|
|
137
|
+
recommend: index === 0,
|
|
138
|
+
checked: plan._id === selectedPlanId,
|
|
139
|
+
plan: plan,
|
|
140
|
+
onClick: () => handleSelect(plan._id)
|
|
141
|
+
}, plan._id);
|
|
196
142
|
})
|
|
197
|
-
})
|
|
143
|
+
})), !isMobile && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Grid.default, {
|
|
144
|
+
container: true,
|
|
145
|
+
spacing: 2,
|
|
146
|
+
justifyContent: "space-between",
|
|
147
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Grid.default, {
|
|
148
|
+
item: true,
|
|
149
|
+
xs: 12,
|
|
150
|
+
sm: 12,
|
|
151
|
+
md: 4,
|
|
152
|
+
lg: 4,
|
|
153
|
+
xl: 3,
|
|
154
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_plan.default, {
|
|
155
|
+
toc: true,
|
|
156
|
+
productFeatures: productFeatures
|
|
157
|
+
})
|
|
158
|
+
}, "toc"), (planState.value || []).map((plan, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_Grid.default, {
|
|
159
|
+
item: true,
|
|
160
|
+
xs: 12,
|
|
161
|
+
sm: 12,
|
|
162
|
+
md: 4,
|
|
163
|
+
lg: 4,
|
|
164
|
+
xl: 3,
|
|
165
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_plan.default, {
|
|
166
|
+
recommend: index === 0,
|
|
167
|
+
checked: plan._id === selectedPlanId,
|
|
168
|
+
plan: plan,
|
|
169
|
+
onClick: () => handleSelect(plan._id)
|
|
170
|
+
})
|
|
171
|
+
}, plan._id))]
|
|
172
|
+
})]
|
|
198
173
|
})
|
|
199
|
-
}), /*#__PURE__*/(0, _jsxRuntime.
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
},
|
|
216
|
-
onCancel: () => setOpenDialog(false),
|
|
217
|
-
showCancelButton: false,
|
|
218
|
-
onConfirm: () => {
|
|
219
|
-
window.location = _util.BLOCKLET_STORE_URL;
|
|
220
|
-
},
|
|
221
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
222
|
-
children: t('purchase.serverlessDialog.purchaseServerlessSuccess')
|
|
223
|
-
})
|
|
224
|
-
}), paying && /*#__PURE__*/(0, _jsxRuntime.jsx)(_payment.default, {
|
|
225
|
-
baseURL: (0, _urlJoin.default)(window.location.origin, baseURL),
|
|
226
|
-
method: paymentMethod,
|
|
227
|
-
userDid: session === null || session === void 0 ? void 0 : (_session$user = session.user) === null || _session$user === void 0 ? void 0 : _session$user.did,
|
|
228
|
-
productId: plan._id,
|
|
229
|
-
onComplete: handlePaid,
|
|
230
|
-
onFailed: handlePayFailed,
|
|
231
|
-
onCancel: handleCancelPay
|
|
174
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_footer.default, {
|
|
175
|
+
className: "footer",
|
|
176
|
+
children: [embed && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
177
|
+
className: "select-space",
|
|
178
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Link, {
|
|
179
|
+
to: (0, _urlJoin.default)(routerPrefix, "/select".concat(window.location.search)),
|
|
180
|
+
children: t('purchase.selectSpaceHint')
|
|
181
|
+
})
|
|
182
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
|
|
183
|
+
component: _reactRouterDom.Link,
|
|
184
|
+
disabled: planState.loading || !selectedPlanId,
|
|
185
|
+
to: (0, _urlJoin.default)(routerPrefix, "/checkout?".concat(params.toString())),
|
|
186
|
+
className: "button-next",
|
|
187
|
+
variant: "contained",
|
|
188
|
+
children: t('common.next')
|
|
189
|
+
})]
|
|
232
190
|
})]
|
|
233
|
-
})
|
|
234
|
-
);
|
|
191
|
+
})]
|
|
192
|
+
});
|
|
235
193
|
}
|
|
236
|
-
const Container = _styled.default.
|
|
194
|
+
const Container = (0, _styled.default)(_layout.default)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .carousel {\n width: 100%;\n }\n\n .plan-list {\n display: flex;\n justify-content: center;\n align-items: center;\n margin-top: 20px;\n }\n\n .footer {\n display: flex;\n justify-content: ", ";\n align-item: center;\n margin-top: auto;\n\n @media (max-width: ", "px) {\n flex-direction: column;\n align-items: center;\n }\n\n .select-space {\n a {\n color: #000;\n }\n }\n\n .button-next {\n width: 200px;\n\n @media (max-width: ", "px) {\n width: 100%;\n margin-top: 20px;\n }\n }\n }\n"])), props => props.embed ? 'space-between' : 'flex-end', props => props.theme.breakpoints.values.sm, props => props.theme.breakpoints.values.sm);
|
|
237
195
|
PurchasePage.propTypes = {
|
|
238
|
-
|
|
196
|
+
disableBack: _propTypes.default.bool
|
|
239
197
|
};
|
|
240
198
|
PurchasePage.defaultProps = {
|
|
241
|
-
|
|
199
|
+
disableBack: false
|
|
242
200
|
};
|
|
243
201
|
var _default = PurchasePage;
|
|
244
202
|
exports.default = _default;
|
package/lib/util.js
CHANGED
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.getAsset = exports.getAPIResponseError = exports.BLOCKLET_STORE_URL = void 0;
|
|
7
7
|
exports.getBlockletMetaUrl = getBlockletMetaUrl;
|
|
8
|
-
exports.loadURL = exports.getLaunchBlockletUrl = void 0;
|
|
8
|
+
exports.loadURL = exports.getPrice = exports.getLaunchBlockletUrl = void 0;
|
|
9
9
|
var _urlJoin = _interopRequireDefault(require("url-join"));
|
|
10
10
|
var _lodash = _interopRequireDefault(require("lodash.get"));
|
|
11
11
|
var _axios = _interopRequireDefault(require("axios"));
|
|
@@ -85,4 +85,20 @@ const getAsset = async (chainHost, address) => {
|
|
|
85
85
|
}
|
|
86
86
|
return state;
|
|
87
87
|
};
|
|
88
|
-
exports.getAsset = getAsset;
|
|
88
|
+
exports.getAsset = getAsset;
|
|
89
|
+
const formatOcapPrice = price => "".concat(price.value, " ").concat(price.paymentMethod.currency.symbol);
|
|
90
|
+
const formatStripePrice = price => "".concat(price.paymentMethod.currency.symbol || price.unit).concat(price.value);
|
|
91
|
+
const formatPrice = (price, providerName) => {
|
|
92
|
+
if (providerName === 'ocap') {
|
|
93
|
+
return formatOcapPrice(price);
|
|
94
|
+
}
|
|
95
|
+
return formatStripePrice(price);
|
|
96
|
+
};
|
|
97
|
+
const getPrice = (prices, providerName) => {
|
|
98
|
+
const price = prices.find(p => p.paymentMethod.provider.name === providerName);
|
|
99
|
+
if (!price) {
|
|
100
|
+
return '';
|
|
101
|
+
}
|
|
102
|
+
return formatPrice(price, providerName);
|
|
103
|
+
};
|
|
104
|
+
exports.getPrice = getPrice;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blocklet/launcher-workflow",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Purchase components for Launcher UI",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -40,9 +40,9 @@
|
|
|
40
40
|
"@arcblock/icons": "^2.4.68",
|
|
41
41
|
"@arcblock/license": "^2.4.68",
|
|
42
42
|
"@arcblock/ux": "^2.4.68",
|
|
43
|
-
"@blocklet/launcher-layout": "
|
|
44
|
-
"@blocklet/launcher-util": "
|
|
45
|
-
"@blocklet/launcher-ux": "
|
|
43
|
+
"@blocklet/launcher-layout": "2.0.0",
|
|
44
|
+
"@blocklet/launcher-util": "2.0.0",
|
|
45
|
+
"@blocklet/launcher-ux": "2.0.0",
|
|
46
46
|
"@did-pay/react": "^1.9.38",
|
|
47
47
|
"@emotion/react": "^11.10.5",
|
|
48
48
|
"@emotion/styled": "^11.10.5",
|
|
@@ -58,6 +58,7 @@
|
|
|
58
58
|
"lodash.throttle": "^4.1.1",
|
|
59
59
|
"prop-types": "^15.8.1",
|
|
60
60
|
"react-lottie-player": "^1.5.4",
|
|
61
|
+
"react-material-ui-carousel": "^3.4.2",
|
|
61
62
|
"react-router-dom": "^6.8.1",
|
|
62
63
|
"react-use": "^17.4.0",
|
|
63
64
|
"url-join": "^4.0.1"
|
|
@@ -69,5 +70,5 @@
|
|
|
69
70
|
"@babel/preset-react": "^7.18.6",
|
|
70
71
|
"babel-plugin-inline-react-svg": "^2.0.1"
|
|
71
72
|
},
|
|
72
|
-
"gitHead": "
|
|
73
|
+
"gitHead": "d55d16c2830ccaea07e9dd5cc81e55bffa6f597d"
|
|
73
74
|
}
|
package/lib/api.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = useRequest;
|
|
7
|
-
var _axios = _interopRequireDefault(require("axios"));
|
|
8
|
-
var _lodash = _interopRequireDefault(require("lodash.get"));
|
|
9
|
-
var _urlJoin = _interopRequireDefault(require("url-join"));
|
|
10
|
-
var _session = require("./contexts/session");
|
|
11
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
12
|
-
_axios.default.defaults.timeout = 200000;
|
|
13
|
-
function useRequest() {
|
|
14
|
-
const {
|
|
15
|
-
session
|
|
16
|
-
} = (0, _session.useSessionContext)();
|
|
17
|
-
const baseURL = 'https://launcher.staging.arcblock.io/';
|
|
18
|
-
const privateRequest = _axios.default.create({
|
|
19
|
-
baseURL
|
|
20
|
-
});
|
|
21
|
-
privateRequest.interceptors.request.use(config => {
|
|
22
|
-
config.url = (0, _urlJoin.default)('/api', config.url);
|
|
23
|
-
return config;
|
|
24
|
-
});
|
|
25
|
-
privateRequest.interceptors.response.use(response => response, err => {
|
|
26
|
-
if ((0, _lodash.default)(err, 'response.status') === 401) {
|
|
27
|
-
session.login();
|
|
28
|
-
}
|
|
29
|
-
return Promise.reject(err);
|
|
30
|
-
});
|
|
31
|
-
return {
|
|
32
|
-
privateRequest,
|
|
33
|
-
create: _axios.default.create
|
|
34
|
-
};
|
|
35
|
-
}
|