@blocklet/launcher-workflow 2.3.80 → 2.3.82

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/purchase.js DELETED
@@ -1,603 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
- var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
8
- var _Center = _interopRequireDefault(require("@arcblock/ux/lib/Center"));
9
- var _useConnect = _interopRequireDefault(require("@arcblock/did-connect/lib/Connect/use-connect"));
10
- var _compactLayout = _interopRequireDefault(require("@blocklet/launcher-layout/lib/compact-layout"));
11
- var _constant = require("@blocklet/launcher-util/es/constant");
12
- var _useMobile = _interopRequireDefault(require("@blocklet/launcher-ux/lib/use-mobile"));
13
- var _styled = _interopRequireDefault(require("@emotion/styled"));
14
- var _CircularProgress = _interopRequireDefault(require("@mui/material/CircularProgress"));
15
- var _Tooltip = _interopRequireDefault(require("@mui/material/Tooltip"));
16
- var _reactSplide = require("@splidejs/react-splide");
17
- var _splideExtensionGrid = require("@splidejs/splide-extension-grid");
18
- var _lodash = _interopRequireDefault(require("lodash.get"));
19
- var _propTypes = _interopRequireDefault(require("prop-types"));
20
- var _react = _interopRequireWildcard(require("react"));
21
- var _reactRouterDom = require("react-router-dom");
22
- var _useMeasure = _interopRequireDefault(require("react-use/lib/useMeasure"));
23
- var _useSetState = _interopRequireDefault(require("react-use/lib/useSetState"));
24
- var _urlJoin = _interopRequireDefault(require("url-join"));
25
- var _constant2 = require("@arcblock/did-connect/lib/constant");
26
- var _launchResultMessage = _interopRequireDefault(require("@blocklet/launcher-layout/lib/launch-result-message"));
27
- var _formatError = _interopRequireDefault(require("@blocklet/launcher-util/es/format-error"));
28
- var _useBrowser = _interopRequireDefault(require("@arcblock/react-hooks/lib/useBrowser"));
29
- require("@splidejs/splide/dist/css/splide.min.css");
30
- var _inProgressSession = _interopRequireDefault(require("./components/in-progress-session"));
31
- var _layout = _interopRequireDefault(require("./components/layout"));
32
- var _body = _interopRequireDefault(require("./components/layout/body"));
33
- var _footer = _interopRequireDefault(require("./components/layout/footer"));
34
- var _header = _interopRequireDefault(require("./components/layout/header"));
35
- var _plan = _interopRequireDefault(require("./components/plan"));
36
- var _locale = require("./contexts/locale");
37
- var _request = _interopRequireDefault(require("./contexts/request"));
38
- var _session = require("./contexts/session");
39
- var _workflow = require("./contexts/workflow");
40
- var _util = require("./util");
41
- var _jsxRuntime = require("react/jsx-runtime");
42
- var _templateObject;
43
- /* eslint-disable react-hooks/exhaustive-deps */
44
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
45
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
46
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
47
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
48
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
49
- function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
50
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
51
- function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
52
- function _taggedTemplateLiteral(e, t) { return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } })); }
53
- var NextIcon = function NextIcon(props) {
54
- return /*#__PURE__*/(0, _jsxRuntime.jsx)("svg", _objectSpread(_objectSpread({}, props), {}, {
55
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {
56
- d: "m15.5.932-4.3 4.38 14.5 14.6-14.5 14.5 4.3 4.4 14.6-14.6 4.4-4.3-4.4-4.4L15.5.912z"
57
- })
58
- }));
59
- };
60
- NextIcon.defaultProps = {
61
- xmlns: "http://www.w3.org/2000/svg",
62
- width: "40",
63
- height: "40"
64
- };
65
- var PrevIcon = function PrevIcon(props) {
66
- return /*#__PURE__*/(0, _jsxRuntime.jsx)("svg", _objectSpread(_objectSpread({}, props), {}, {
67
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {
68
- d: "m15.5.932-4.3 4.38 14.5 14.6-14.5 14.5 4.3 4.4 14.6-14.6 4.4-4.3-4.4-4.4L15.5.912z"
69
- })
70
- }));
71
- };
72
- PrevIcon.defaultProps = {
73
- xmlns: "http://www.w3.org/2000/svg",
74
- width: "40",
75
- height: "40"
76
- };
77
- const SLIDE_WIDTH = 300;
78
- const SLIDE_MIN_WIDTH = 280;
79
- const getSlideConfig = (maxLength, planLength) => {
80
- const factor = Math.min(maxLength, planLength);
81
- const width = factor < 3 ? SLIDE_MIN_WIDTH : SLIDE_WIDTH;
82
- return {
83
- perPage: factor,
84
- width: "".concat(factor * width, "px"),
85
- gap: '24px'
86
- };
87
- };
88
- function PurchasePage(_ref) {
89
- var _state$plans3;
90
- let {
91
- disableBack
92
- } = _ref;
93
- const {
94
- t,
95
- locale
96
- } = (0, _locale.useLocaleContext)();
97
- const {
98
- create,
99
- api: launchSessionAPI,
100
- baseURL
101
- } = (0, _request.default)();
102
- const {
103
- isMobile
104
- } = (0, _useMobile.default)();
105
- const navigate = (0, _reactRouterDom.useNavigate)();
106
- const {
107
- session,
108
- storage,
109
- events
110
- } = (0, _session.useSessionContext)();
111
- const {
112
- connectApi,
113
- connectHolder
114
- } = (0, _useConnect.default)();
115
- const [params, setParams] = (0, _reactRouterDom.useSearchParams)();
116
- const {
117
- routerPrefix,
118
- embed,
119
- didPayPrefix,
120
- isPurchaseOnly
121
- } = (0, _workflow.useWorkflowContext)();
122
- const [planListRef, {
123
- width
124
- }] = (0, _useMeasure.default)();
125
- const [state, setState] = (0, _useSetState.default)({
126
- loading: true,
127
- error: '',
128
- plans: [],
129
- paymentMethods: [],
130
- paymentMethod: params.get('paymentMethod'),
131
- sessionId: params.get('sessionId'),
132
- planId: params.get('planId'),
133
- showMorePrompt: false,
134
- arrows: false,
135
- perPage: 100,
136
- width: "".concat(SLIDE_WIDTH, "px"),
137
- gap: '16px'
138
- });
139
- const api = create({
140
- baseURL: didPayPrefix
141
- });
142
- const browser = (0, _useBrowser.default)();
143
- const selectPlan = launch => {
144
- if (!state.plans.length) {
145
- return;
146
- }
147
- if (launch && launch.planId && state.plans.find(x => x._id === launch.planId)) {
148
- setState({
149
- planId: launch.planId
150
- });
151
- }
152
- const recommended = state.plans.find(x => !!x.isRecommended);
153
- if (recommended) {
154
- setState({
155
- planId: recommended._id
156
- });
157
- } else {
158
- setState({
159
- planId: state.plans[0]._id
160
- });
161
- }
162
- };
163
-
164
- // 用户退出的时候自动重新创建启动会话
165
- (0, _react.useEffect)(() => {
166
- if (isPurchaseOnly) {
167
- return;
168
- }
169
- events.on('logout', () => {
170
- const metaUrl = params.get('blocklet_meta_url');
171
- _util.launchSession.create(launchSessionAPI, routerPrefix, metaUrl, (err, launch) => {
172
- setState({
173
- sessionId: launch._id
174
- });
175
- selectPlan(launch);
176
- });
177
- });
178
- }, []);
179
-
180
- // 创建启动会话或者加载现有的会话
181
- (0, _react.useEffect)(() => {
182
- Promise.all([api.get('/plans'), api.get('/payment-methods')]).then(_ref2 => {
183
- let [{
184
- data
185
- }, {
186
- data: {
187
- data: paymentMethods
188
- }
189
- }] = _ref2;
190
- if (data.length === 0 || paymentMethods.length === 0) {
191
- setState({
192
- loading: false,
193
- error: t('purchase.noProducts')
194
- });
195
- return;
196
- }
197
- let plans = (data || []).sort((a, b) => b.weight - a.weight);
198
- const {
199
- components = []
200
- } = (0, _lodash.default)(window, 'blockletMeta', {}) || {};
201
- const supported = components.every(x => (0, _lodash.default)(x, 'meta.capabilities.serverless', true));
202
- plans.forEach(x => {
203
- if ((0, _lodash.default)(x, 'extra.type') === 'serverless' && !supported) {
204
- x.available = false;
205
- x.reason = t('purchase.serverlessNotSupported');
206
- } else {
207
- x.available = true;
208
- }
209
- });
210
- plans = plans.sort((a, b) => {
211
- if (b.available && !a.available) {
212
- return 1;
213
- }
214
- if (!b.available && a.available) {
215
- return -1;
216
- }
217
- return 0;
218
- });
219
- setState({
220
- plans,
221
- paymentMethods,
222
- paymentMethod: paymentMethods[0]._id,
223
- loading: false
224
- });
225
- if (isPurchaseOnly) {
226
- selectPlan();
227
- return;
228
- }
229
- const metaUrl = params.get('blocklet_meta_url');
230
- if (params.get('sessionId')) {
231
- _util.launchSession.load(launchSessionAPI, routerPrefix, params.get('sessionId'), metaUrl, (err, launch) => {
232
- selectPlan(launch);
233
- });
234
- } else if (metaUrl) {
235
- _util.launchSession.create(launchSessionAPI, routerPrefix, metaUrl, (err, launch) => {
236
- setState({
237
- sessionId: launch._id
238
- });
239
- selectPlan(launch);
240
- });
241
- }
242
- }).catch(err => {
243
- setState({
244
- error: (0, _formatError.default)(err)
245
- });
246
- });
247
- }, []);
248
- (0, _react.useEffect)(() => {
249
- if (!state.sessionId) {
250
- return;
251
- }
252
- if (state.sessionId !== params.get('sessionId')) {
253
- params.set('sessionId', state.sessionId);
254
- setParams(params, {
255
- replace: true
256
- });
257
- }
258
- }, [state.sessionId]);
259
- (0, _react.useEffect)(() => {
260
- var _state$plans;
261
- if (!((_state$plans = state.plans) !== null && _state$plans !== void 0 && _state$plans.length) || typeof state.perPage === 'undefined') {
262
- return;
263
- }
264
- const index = state.plans.findIndex(x => !!x.isRecommended && x.available);
265
- const pageIndex = Math.floor(index / state.perPage);
266
-
267
- // 如果推荐 Plan 不在第一页,则将推荐 Plan 放在第一个
268
- if (pageIndex >= 1) {
269
- const recommend = state.plans[index];
270
- const copy = [...state.plans];
271
- copy.splice(index, 1);
272
- copy.unshift(recommend);
273
- setState({
274
- plans: copy
275
- });
276
- }
277
- }, [state.perPage, state.plans]);
278
- (0, _react.useEffect)(() => {
279
- var _state$plans2;
280
- if (!((_state$plans2 = state.plans) !== null && _state$plans2 !== void 0 && _state$plans2.length)) {
281
- return;
282
- }
283
- if (Number.isNaN(width)) {
284
- return;
285
- }
286
-
287
- // 最小得有1个
288
- const tmp = Math.max(Math.floor(width / SLIDE_WIDTH) - 1, 1);
289
- setState(getSlideConfig(tmp, state.plans.length));
290
- }, [width, state.plans, isMobile]);
291
- const handleSelect = planId => {
292
- var _state$plans$find;
293
- if (state.planId === planId) {
294
- return;
295
- }
296
- if (((_state$plans$find = state.plans.find(x => x._id === planId)) === null || _state$plans$find === void 0 ? void 0 : _state$plans$find.available) === false) {
297
- return;
298
- }
299
- setState({
300
- planId
301
- });
302
- };
303
- (0, _react.useEffect)(() => {
304
- if (!state.planId) {
305
- return;
306
- }
307
- if (state.planId !== params.get('planId')) {
308
- params.set('planId', state.planId);
309
- setParams(params, {
310
- replace: true
311
- });
312
- }
313
- }, [state.planId]);
314
- (0, _react.useEffect)(() => {
315
- if (!state.paymentMethod) {
316
- return;
317
- }
318
- if (state.paymentMethod !== params.get('paymentMethod')) {
319
- params.set('paymentMethod', state.paymentMethod);
320
- setParams(params, {
321
- replace: true
322
- });
323
- }
324
- }, [state.paymentMethod]);
325
- (0, _react.useEffect)(() => {
326
- if (isPurchaseOnly) {
327
- return;
328
- }
329
- if (!state.planId || !state.sessionId) {
330
- return;
331
- }
332
- const plan = state.plans.find(x => x._id === state.planId);
333
- const type = (0, _lodash.default)(plan, 'extra.type') || 'serverless';
334
- _util.launchSession.select(launchSessionAPI, routerPrefix, state.sessionId, type, state.planId);
335
- }, [state.planId, state.sessionId]);
336
- const productFeatures = [];
337
- if (!state.loading && ((_state$plans3 = state.plans) === null || _state$plans3 === void 0 ? void 0 : _state$plans3.length) > 0) {
338
- // TODO: Pricing Table: 临时做法
339
- try {
340
- const {
341
- features
342
- } = state.plans[0];
343
- if (features && features.length > 0) {
344
- const tmp = JSON.parse(features[0].en);
345
- tmp.forEach(item => {
346
- productFeatures.push({
347
- _id: item.featureId,
348
- name: item.name,
349
- type: item.type
350
- });
351
- });
352
- }
353
- } catch (error) {
354
- console.error('parse product feature failed:', error);
355
- }
356
- }
357
- const ensureLogin = () => {
358
- return new Promise(resolve => {
359
- if (!session.user) {
360
- session.login(() => {
361
- resolve();
362
- });
363
- } else {
364
- resolve();
365
- }
366
- });
367
- };
368
- const handleRedeem = () => {
369
- if (browser.wallet) {
370
- // HACK: 钱包客户端中因为打开浏览器 Tab 的限制,所以在钱包客户端浏览器中使用 “登录 -> 兑换(购买)" 两步的流程
371
- ensureLogin().then(() => {
372
- var _session$user;
373
- connectApi.open({
374
- useSocket: false,
375
- locale,
376
- action: 'redeem',
377
- prefix: "".concat(window.location.origin).concat((0, _urlJoin.default)(baseURL || '', _constant2.API_DID_PREFIX)),
378
- onSuccess: handleRedeemed,
379
- checkTimeout: 60 * 5000,
380
- showDownload: false,
381
- extraParams: {
382
- planId: state.planId || state.plans[0]._id,
383
- sessionId: state.sessionId,
384
- forceSwitch: !(session !== null && session !== void 0 && session.user),
385
- // HACK: 在 openPopup 阶段需要手动添加 sourceAppPid 字段
386
- sourceAppPid: session === null || session === void 0 || (_session$user = session.user) === null || _session$user === void 0 ? void 0 : _session$user.sourceAppPid,
387
- provider: 'wallet'
388
- },
389
- messages: {
390
- title: t('redeem.dialog.title'),
391
- scan: t('redeem.dialog.scan'),
392
- confirm: t('redeem.dialog.confirm'),
393
- success: t('redeem.dialog.success')
394
- }
395
- }, {
396
- locale
397
- });
398
- });
399
- } else {
400
- var _session$user2;
401
- connectApi.openPopup({
402
- useSocket: false,
403
- locale,
404
- action: 'redeem',
405
- prefix: "".concat(window.location.origin).concat((0, _urlJoin.default)(baseURL || '', _constant2.API_DID_PREFIX)),
406
- onSuccess: handleRedeemed,
407
- checkTimeout: 60 * 5000,
408
- showDownload: false,
409
- extraParams: {
410
- planId: state.planId || state.plans[0]._id,
411
- sessionId: state.sessionId,
412
- forceSwitch: !(session !== null && session !== void 0 && session.user),
413
- // HACK: 在 openPopup 阶段需要手动添加 sourceAppPid 字段
414
- sourceAppPid: session === null || session === void 0 || (_session$user2 = session.user) === null || _session$user2 === void 0 ? void 0 : _session$user2.sourceAppPid,
415
- provider: 'wallet'
416
- },
417
- messages: {
418
- title: t('redeem.dialog.title'),
419
- scan: t('redeem.dialog.scan'),
420
- confirm: t('redeem.dialog.confirm'),
421
- success: t('redeem.dialog.success')
422
- },
423
- baseUrl: window.location.origin
424
- }, {
425
- locale
426
- });
427
- }
428
- };
429
- const handleRedeemed = _ref3 => {
430
- let {
431
- sessionToken,
432
- nftId,
433
- type,
434
- sessionId
435
- } = _ref3;
436
- if (type === _constant.NFT_TYPE_SERVERLESS) {
437
- params.set('launchType', 'serverless');
438
- }
439
- if (sessionToken) {
440
- storage.setToken(sessionToken);
441
- session.refresh();
442
- }
443
- if (sessionId) {
444
- params.set('sessionId', sessionId);
445
- }
446
- navigate({
447
- pathname: (0, _urlJoin.default)(routerPrefix, "/launch/".concat(nftId)),
448
- search: params.toString()
449
- });
450
- };
451
- const plan = state.planId && state.plans ? state.plans.find(x => x._id === state.planId) : null;
452
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Container, {
453
- embed: embed,
454
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_header.default, {
455
- title: t('purchase.pageTitle'),
456
- disableBack: disableBack
457
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_body.default, {
458
- style: {
459
- justifyContent: 'center'
460
- },
461
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
462
- style: {
463
- flex: 1,
464
- position: 'relative'
465
- },
466
- children: [state.error && /*#__PURE__*/(0, _jsxRuntime.jsx)(_launchResultMessage.default, {
467
- variant: "error",
468
- title: t('common.error'),
469
- subTitle: state.error
470
- }), !state.error && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
471
- className: "container-inner",
472
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_compactLayout.default, {
473
- bottom: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_footer.default, {
474
- className: "footer",
475
- children: [embed && isPurchaseOnly === false && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
476
- className: "footer-left",
477
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
478
- onClick: handleRedeem,
479
- className: "redeem-button",
480
- variant: "outlined",
481
- children: t('purchase.redeem')
482
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRouterDom.Link, {
483
- className: "select-space",
484
- to: (0, _urlJoin.default)(routerPrefix, "/purchase/select".concat(window.location.search)),
485
- children: t('purchase.selectSpaceHint')
486
- })]
487
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, {
488
- component: _reactRouterDom.Link,
489
- disabled: state.loading || !state.planId,
490
- to: (0, _urlJoin.default)(routerPrefix, "/purchase/checkout?".concat(params.toString())),
491
- className: "button-next",
492
- variant: "contained",
493
- children: plan ? t('purchase.hasPlan', {
494
- name: plan.name[locale]
495
- }) : t('purchase.noPlan')
496
- })]
497
- }),
498
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
499
- ref: planListRef,
500
- className: "plan-list",
501
- children: state.loading ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Center.default, {
502
- relative: "parent",
503
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_CircularProgress.default, {})
504
- }) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
505
- children: [!isMobile && /*#__PURE__*/(0, _jsxRuntime.jsx)(_plan.default, {
506
- toc: true,
507
- productFeatures: productFeatures,
508
- paymentMethods: state.paymentMethods,
509
- paymentMethod: state.paymentMethod,
510
- onChangeMethod: paymentMethod => setState({
511
- paymentMethod
512
- }),
513
- className: "toc"
514
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactSplide.Splide, {
515
- extensions: {
516
- Grid: _splideExtensionGrid.Grid
517
- },
518
- onPaginationMounted: splide => {
519
- const pageCount = Math.ceil(state.plans.length / splide.options.perPage);
520
- const showArrows = pageCount > 1;
521
- setState({
522
- arrows: showArrows
523
- });
524
- if (showArrows) {
525
- setTimeout(() => {
526
- setState({
527
- showMorePrompt: true
528
- });
529
- // 3s 后隐藏
530
- setTimeout(() => setState({
531
- showMorePrompt: false
532
- }), 3000);
533
- }, 1000);
534
- }
535
- },
536
- hasTrack: false,
537
- options: {
538
- rewind: true,
539
- pagination: true,
540
- arrows: state.arrows,
541
- classes: {
542
- pagination: 'splide__pagination splide__pagination-custom'
543
- },
544
- trimSpace: true,
545
- width: state.width,
546
- perPage: state.perPage,
547
- gap: state.gap
548
- },
549
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
550
- className: "splide__arrows",
551
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
552
- className: "splide__arrow splide__arrow--prev",
553
- type: "button",
554
- disabled: "",
555
- "aria-label": "Previous slide",
556
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(PrevIcon, {
557
- viewBox: "0 0 40 40"
558
- })
559
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Tooltip.default, {
560
- open: state.showMorePrompt,
561
- title: t('purchase.morePlanPrompt'),
562
- placement: "top",
563
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
564
- className: "splide__arrow splide__arrow--next",
565
- type: "button",
566
- "aria-label": "Next slide",
567
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(NextIcon, {
568
- viewBox: "0 0 40 40"
569
- })
570
- })
571
- })]
572
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactSplide.SplideTrack, {
573
- children: state.plans.map(x => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactSplide.SplideSlide, {
574
- style: {
575
- width: 'auto'
576
- },
577
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_plan.default, {
578
- recommend: !!x.isRecommended,
579
- checked: x._id === state.planId,
580
- plan: x,
581
- paymentMethod: state.paymentMethod,
582
- paymentMethods: state.paymentMethods,
583
- onClick: () => handleSelect(x._id)
584
- })
585
- }, x._id))
586
- })]
587
- })]
588
- })
589
- })
590
- })
591
- })]
592
- })
593
- }), session.user && /*#__PURE__*/(0, _jsxRuntime.jsx)(_inProgressSession.default, {}), connectHolder]
594
- });
595
- }
596
- const Container = (0, _styled.default)(_layout.default)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n .container-inner {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n }\n\n .plan-list {\n display: flex;\n justify-content: center;\n align-items: center;\n\n @media (min-width: 900px) {\n margin-top: 20px;\n }\n\n @media (min-width: 680px) and (max-width: 899px) {\n justify-content: center;\n }\n\n .toc {\n min-width: 180px;\n margin-right: 20px;\n }\n\n button.splide__pagination__page.is-active {\n background: #9397a1;\n }\n }\n\n .splide__pagination-custom {\n bottom: -24px;\n }\n\n .footer {\n display: flex;\n justify-content: ", ";\n align-item: center;\n margin-top: auto;\n padding-top: 16px;\n padding-bottom: ", ";\n\n > * {\n margin: 0 8px;\n ", " {\n margin: 0 16px;\n }\n }\n\n @media (max-width: ", "px) {\n flex-direction: column;\n align-items: center;\n }\n\n .footer-left {\n display: flex;\n gap: 16px;\n align-items: center;\n justify-content: space-between;\n\n .select-space {\n order: 1;\n color: #000;\n\n &:hover {\n text-decoration: underline !important;\n }\n }\n\n .redeem-button {\n order: 1;\n }\n\n @media (max-width: ", "px) {\n width: 100%;\n flex-direction: column;\n\n .redeem-button {\n width: 100%;\n order: 2;\n }\n }\n }\n\n .button-next {\n min-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.embed ? '0' : '16px', props => props.theme.breakpoints.up('md'), props => props.theme.breakpoints.values.sm, props => props.theme.breakpoints.values.sm, props => props.theme.breakpoints.values.sm);
597
- PurchasePage.propTypes = {
598
- disableBack: _propTypes.default.bool
599
- };
600
- PurchasePage.defaultProps = {
601
- disableBack: false
602
- };
603
- var _default = exports.default = PurchasePage;