@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/es/checkout.js DELETED
@@ -1,601 +0,0 @@
1
- /* eslint-disable react-hooks/exhaustive-deps */
2
- import Dialog from '@arcblock/ux/lib/Dialog';
3
- import { NFT_TYPE_DEDICATE, NFT_TYPE_SERVERLESS } from '@blocklet/launcher-util/es/constant';
4
- import { getBlockletDisplayName } from '@blocklet/launcher-util/es/util';
5
- import Button from '@blocklet/launcher-ux/lib/button';
6
- import useMobile from '@blocklet/launcher-ux/lib/use-mobile';
7
- import Payment from '@blocklet/payment/lib/payment';
8
- import styled from '@emotion/styled';
9
- import Grid from '@mui/material/Grid';
10
- import Skeleton from '@mui/material/Skeleton';
11
- import dsbridge from 'dsbridge';
12
- import get from 'lodash.get';
13
- import PropTypes from 'prop-types';
14
- import React, { useEffect } from 'react';
15
- import { useNavigate, useSearchParams } from 'react-router-dom';
16
- import useAsync from 'react-use/lib/useAsync';
17
- import useSetState from 'react-use/lib/useSetState';
18
- import joinURL from 'url-join';
19
- import useBrowser from '@arcblock/react-hooks/lib/useBrowser';
20
- import Confirm from '@arcblock/ux/lib/Dialog/confirm';
21
- import ResultMessage from '@blocklet/launcher-layout/lib/launch-result-message';
22
- import formatError from '@blocklet/launcher-util/es/format-error';
23
- var SpaceIcon = function SpaceIcon(props) {
24
- return /*#__PURE__*/_jsxs("svg", {
25
- ...props,
26
- children: [/*#__PURE__*/_jsx("rect", {
27
- width: "40",
28
- height: "40",
29
- rx: "8",
30
- fill: "url(#a)"
31
- }), /*#__PURE__*/_jsxs("defs", {
32
- children: [/*#__PURE__*/_jsx("pattern", {
33
- id: "a",
34
- patternContentUnits: "objectBoundingBox",
35
- width: "1",
36
- height: "1",
37
- children: /*#__PURE__*/_jsx("use", {
38
- xlinkHref: "#b",
39
- transform: "scale(.00833)"
40
- })
41
- }), /*#__PURE__*/_jsx("image", {
42
- id: "b",
43
- width: "120",
44
- height: "120",
45
- xlinkHref: "data:image/png;base64,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"
46
- })]
47
- })]
48
- });
49
- };
50
- SpaceIcon.defaultProps = {
51
- width: "40",
52
- height: "40",
53
- fill: "none",
54
- xmlns: "http://www.w3.org/2000/svg",
55
- xmlnsXlink: "http://www.w3.org/1999/xlink"
56
- };
57
- import Agreement from './components/agreement';
58
- import Checkbox from './components/checkbox';
59
- import Layout from './components/layout';
60
- import Body from './components/layout/body';
61
- import Footer from './components/layout/footer';
62
- import Header from './components/layout/header';
63
- import { useLocaleContext } from './contexts/locale';
64
- import useRequest from './contexts/request';
65
- import { useSessionContext } from './contexts/session';
66
- import { useWorkflowContext } from './contexts/workflow';
67
- import { BLOCKLET_STORE_URL, getPrice, launchSession } from './util';
68
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
69
- function CheckoutPage({
70
- blocklet
71
- }) {
72
- const {
73
- t,
74
- locale
75
- } = useLocaleContext();
76
- const {
77
- session,
78
- events
79
- } = useSessionContext();
80
- const [params] = useSearchParams();
81
- const [state, setState] = useSetState({
82
- error: '',
83
- showAgreement: false,
84
- showPayment: false,
85
- showAgreeHint: false,
86
- showPaidDialog: {
87
- open: false,
88
- nftId: ''
89
- },
90
- agreed: true,
91
- paying: false,
92
- planId: params.get('planId'),
93
- sessionId: params.get('sessionId'),
94
- paymentMethod: params.get('paymentMethod'),
95
- autoLogin: true
96
- });
97
- const browser = useBrowser();
98
- const navigate = useNavigate();
99
- const {
100
- create,
101
- api: launchSessionAPI
102
- } = useRequest();
103
- const {
104
- mobileSize,
105
- isMobile
106
- } = useMobile();
107
- const {
108
- routerPrefix,
109
- didPayPrefix,
110
- embed,
111
- isPurchaseOnly
112
- } = useWorkflowContext();
113
- const api = create({
114
- baseURL: didPayPrefix
115
- });
116
- useEffect(() => {
117
- if (isPurchaseOnly) {
118
- return;
119
- }
120
- if (session.user) {
121
- launchSession.connect(launchSessionAPI, routerPrefix, state.sessionId, session.user.did);
122
- }
123
- }, [session.user]);
124
- const enableBlockletAgreement = !!blocklet;
125
- const context = useAsync(async () => {
126
- const [{
127
- data: {
128
- data: paymentMethods
129
- }
130
- }, {
131
- data: {
132
- data: plan
133
- }
134
- }] = await Promise.all([api.get('/payment-methods'), api.get(`/plans/${state.planId}`)]);
135
- if (!plan || paymentMethods.length === 0) {
136
- throw new Error(t('purchase.noProducts'));
137
- }
138
- if (paymentMethods.length > 0 && !state.paymentMethod) {
139
- setState({
140
- paymentMethod: paymentMethods[0]._id
141
- });
142
- }
143
- return {
144
- paymentMethods,
145
- plan
146
- };
147
- });
148
-
149
- // 用户退出的时候自动重新创建启动会话
150
- useEffect(() => {
151
- if (isPurchaseOnly) {
152
- return;
153
- }
154
- events.on('logout', () => {
155
- const metaUrl = params.get('blocklet_meta_url');
156
- launchSession.create(launchSessionAPI, routerPrefix, metaUrl, (err, launch) => {
157
- setState({
158
- sessionId: launch._id
159
- });
160
- params.set('sessionId', launch._id);
161
- const type = get(context.value?.plan, 'extra.type') || 'serverless';
162
- launchSession.select(launchSessionAPI, routerPrefix, launch._id, type, state.planId);
163
- });
164
- });
165
- }, []);
166
- const switchPayment = method => {
167
- setState({
168
- paymentMethod: method
169
- });
170
- };
171
- const handleCancelPay = () => {
172
- setState({
173
- showPayment: false,
174
- paying: false
175
- });
176
- };
177
- const ensureLogin = () => {
178
- return new Promise(resolve => {
179
- if (!session.user) {
180
- session.login(() => {
181
- resolve();
182
- });
183
- } else {
184
- resolve();
185
- }
186
- });
187
- };
188
- const handlePay = () => {
189
- if (enableBlockletAgreement && !state.agreed) {
190
- setState({
191
- showAgreeHint: true
192
- });
193
- setTimeout(() => {
194
- setState({
195
- showAgreeHint: false
196
- });
197
- }, 2000);
198
- return;
199
- }
200
- if (browser.wallet) {
201
- ensureLogin().then(() => {
202
- setState({
203
- showPayment: true,
204
- paying: true,
205
- autoLogin: false
206
- });
207
- });
208
- } else {
209
- setState({
210
- showPayment: true,
211
- paying: true,
212
- autoLogin: true
213
- });
214
- }
215
- };
216
- const handleConnected = result => {
217
- if (isPurchaseOnly) {
218
- session.refresh();
219
- return;
220
- }
221
- launchSession.connect(launchSessionAPI, routerPrefix, state.sessionId, result.did, () => {
222
- session.refresh();
223
- });
224
- };
225
- const handlePaid = ({
226
- nftId,
227
- nftState
228
- }) => {
229
- if ((nftState.tags || []).includes(NFT_TYPE_SERVERLESS)) {
230
- if (!embed) {
231
- setState({
232
- showPaidDialog: {
233
- open: true,
234
- nftId
235
- }
236
- });
237
- handleCancelPay();
238
- return;
239
- }
240
- params.set('launchType', 'serverless');
241
- }
242
- if (isPurchaseOnly && !(nftState.tags || []).includes(NFT_TYPE_DEDICATE)) {
243
- handleCancelPay();
244
- dsbridge.call('arcClosePage');
245
- return;
246
- }
247
- handleCancelPay();
248
- navigate({
249
- pathname: joinURL(routerPrefix, `/launch/${nftId}`),
250
- search: params.toString()
251
- });
252
- };
253
- const handlePayFailed = () => {
254
- // TODO: Toast 错误
255
- handleCancelPay();
256
- };
257
- const calculateTotalPayment = prices => {
258
- if (!state.paymentMethod) {
259
- return '';
260
- }
261
- const providerName = paymentMethods?.find(x => x._id === state.paymentMethod)?.provider.name;
262
- return getPrice(prices, providerName);
263
- };
264
- const toggleAgreement = () => setState({
265
- agreed: !state.agreed
266
- });
267
- const {
268
- paymentMethods,
269
- plan
270
- } = context.value || {};
271
- const paymentMethod = paymentMethods?.find(x => x._id === state.paymentMethod);
272
- const providerName = paymentMethod?.provider.name;
273
- return /*#__PURE__*/_jsxs(Container, {
274
- mobileSize: mobileSize,
275
- enableBlockletAgreement: enableBlockletAgreement,
276
- children: [/*#__PURE__*/_jsx(Header, {
277
- title: t('checkout.pageTitle')
278
- }), context.error && /*#__PURE__*/_jsx(Body, {
279
- children: /*#__PURE__*/_jsx(ResultMessage, {
280
- variant: "error",
281
- title: t('common.error'),
282
- subTitle: formatError(context.error)
283
- })
284
- }), !context.error && /*#__PURE__*/_jsxs(_Fragment, {
285
- children: [/*#__PURE__*/_jsxs(Body, {
286
- children: [/*#__PURE__*/_jsx("div", {
287
- className: "header",
288
- children: t('common.details')
289
- }), context.loading ? /*#__PURE__*/_jsx(Skeleton, {
290
- className: "skeleton",
291
- sx: {
292
- width: '100%',
293
- height: '100%'
294
- }
295
- }) : /*#__PURE__*/_jsxs("div", {
296
- className: "space details",
297
- children: [/*#__PURE__*/_jsxs("div", {
298
- className: "basic",
299
- children: [/*#__PURE__*/_jsx(SpaceIcon, {}), /*#__PURE__*/_jsxs("div", {
300
- className: "basic-info",
301
- children: [/*#__PURE__*/_jsx("div", {
302
- className: "title",
303
- children: plan.name[locale]
304
- }), /*#__PURE__*/_jsx("div", {
305
- className: "sub-title",
306
- children: t('common.space')
307
- })]
308
- })]
309
- }), /*#__PURE__*/_jsx("div", {
310
- className: "price",
311
- children: getPrice(plan.prices, providerName)
312
- })]
313
- }), /*#__PURE__*/_jsx("div", {
314
- className: "divider"
315
- }), context.loading ? /*#__PURE__*/_jsx(Skeleton, {
316
- className: "skeleton",
317
- sx: {
318
- width: '100%',
319
- height: '100%'
320
- }
321
- }) : /*#__PURE__*/_jsxs("div", {
322
- className: "total-order space",
323
- children: [/*#__PURE__*/_jsx("div", {
324
- children: t('checkout.orderTotal')
325
- }), /*#__PURE__*/_jsx("div", {
326
- children: getPrice(plan?.prices || [], providerName)
327
- })]
328
- }), /*#__PURE__*/_jsxs("div", {
329
- className: "total-payment space",
330
- children: [/*#__PURE__*/_jsx("div", {
331
- children: t('checkout.paymentTotal')
332
- }), /*#__PURE__*/_jsx("div", {
333
- children: calculateTotalPayment(plan?.prices || [])
334
- })]
335
- }), /*#__PURE__*/_jsx("div", {
336
- className: "payment-method space",
337
- children: context.loading ? /*#__PURE__*/_jsx(Skeleton, {
338
- className: "skeleton",
339
- sx: {
340
- width: '100%',
341
- height: '100%'
342
- }
343
- }) : /*#__PURE__*/_jsxs("div", {
344
- className: "body",
345
- children: [/*#__PURE__*/_jsx("div", {
346
- className: "payment-method__title",
347
- children: t('checkout.paymentMethod.title')
348
- }), /*#__PURE__*/_jsx("div", {
349
- className: "payment-method__list",
350
- children: /*#__PURE__*/_jsx(Grid, {
351
- container: true,
352
- spacing: 3,
353
- justifyContent: "flex-start",
354
- children: paymentMethods.map(method => /*#__PURE__*/_jsx(Grid, {
355
- item: true,
356
- xs: 12,
357
- sm: 12,
358
- md: 3,
359
- lg: 2,
360
- xl: 2,
361
- children: /*#__PURE__*/_jsx(Checkbox, {
362
- label: method.currency.displayName[locale] || method.currency.displayName.en,
363
- checked: state.paymentMethod === method._id,
364
- onClick: () => switchPayment(method._id)
365
- })
366
- }, method._id))
367
- })
368
- })]
369
- })
370
- })]
371
- }), !context.loading && /*#__PURE__*/_jsxs(Footer, {
372
- className: "footer",
373
- children: [enableBlockletAgreement && /*#__PURE__*/_jsx("div", {
374
- className: "agreement",
375
- children: /*#__PURE__*/_jsx(Checkbox, {
376
- checked: state.agreed,
377
- showHint: state.showAgreeHint,
378
- onClick: () => toggleAgreement(),
379
- label: /*#__PURE__*/_jsxs("div", {
380
- style: {
381
- display: 'flex',
382
- alignItems: 'center'
383
- },
384
- children: [t('common.agreeTo'), /*#__PURE__*/_jsx("span", {
385
- className: "agreement-label",
386
- onClick: e => {
387
- e.stopPropagation();
388
- setState({
389
- showAgreement: true
390
- });
391
- },
392
- children: t('checkout.agreement', {
393
- name: getBlockletDisplayName(blocklet)
394
- })
395
- })]
396
- })
397
- })
398
- }), /*#__PURE__*/_jsxs("div", {
399
- className: "actions",
400
- children: [isMobile && /*#__PURE__*/_jsx(Button, {
401
- className: "button-previous",
402
- variant: "outlined",
403
- onClick: () => navigate(-1),
404
- children: t('common.previous')
405
- }), /*#__PURE__*/_jsx(Button, {
406
- loading: state.paying,
407
- className: "button-pay",
408
- disabled: state.paying || state.showPayment || !state.planId || !state.paymentMethod,
409
- variant: "contained",
410
- onClick: handlePay,
411
- children: t('common.pay')
412
- })]
413
- })]
414
- })]
415
- }), state.showPayment && /*#__PURE__*/_jsx(Payment, {
416
- baseURL: didPayPrefix,
417
- method: paymentMethod,
418
- userDid: session?.user?.did,
419
- productId: state.planId,
420
- useSocket: false,
421
- onConnect: handleConnected,
422
- onComplete: handlePaid,
423
- onFailed: handlePayFailed,
424
- onCancel: handleCancelPay,
425
- metadata: {
426
- sessionId: state.sessionId,
427
- currentUserDid: session?.user?.did,
428
- forceSwitch: !session?.user,
429
- // HACK: 在 openPopup 阶段需要手动添加 sourceAppPid 字段
430
- sourceAppPid: session?.user?.sourceAppPid
431
- },
432
- autoLogin: state.autoLogin
433
- }), /*#__PURE__*/_jsx(Confirm, {
434
- open: state.showPaidDialog.open,
435
- disableEscapeKeyDown: true,
436
- title: t('purchase.serverlessDialog.title'),
437
- confirmButton: {
438
- text: t('purchase.serverlessDialog.redirectToStoreButton')
439
- },
440
- PaperProps: {
441
- style: {
442
- maxWidth: 1200,
443
- minWidth: isMobile ? undefined : 600
444
- }
445
- },
446
- onCancel: () => setState({
447
- showPaidDialog: {
448
- open: false,
449
- nftId: ''
450
- }
451
- }),
452
- showCancelButton: false,
453
- onConfirm: () => {
454
- const url = new URL(BLOCKLET_STORE_URL);
455
- url.searchParams.set('launcher_nft_id', state.showPaidDialog.nftId);
456
- window.location = url.href;
457
- },
458
- children: /*#__PURE__*/_jsx("div", {
459
- children: t('purchase.serverlessDialog.purchaseServerlessSuccess')
460
- })
461
- }), /*#__PURE__*/_jsx(Dialog, {
462
- open: state.showAgreement,
463
- title: t('common.agreement'),
464
- onClose: () => setState({
465
- showAgreement: false
466
- }),
467
- children: /*#__PURE__*/_jsx(Agreement, {})
468
- })]
469
- });
470
- }
471
- CheckoutPage.propTypes = {
472
- blocklet: PropTypes.object
473
- };
474
- CheckoutPage.defaultProps = {
475
- blocklet: null
476
- };
477
- const Container = styled(Layout)`
478
- .header {
479
- font-weight: bolder;
480
- font-size: 1.2em;
481
- }
482
-
483
- .divider {
484
- margin-top: 20px;
485
- border: 1.2px solid #f6f6f6;
486
- }
487
-
488
- .skeleton {
489
- height: 64px;
490
- }
491
-
492
- .space {
493
- margin-top: 18px;
494
- }
495
-
496
- .total-order {
497
- display: flex;
498
- justify-content: space-between;
499
- align-items: center;
500
- font-weight: bolder;
501
- }
502
-
503
- .total-payment {
504
- display: flex;
505
- justify-content: space-between;
506
- align-items: center;
507
- color: ${props => props.theme.palette.primary.main};
508
- font-size: 22px;
509
- font-weight: bolder;
510
- }
511
-
512
- .details {
513
- display: flex;
514
- justify-content: space-between;
515
- align-items: center;
516
- height: 40px;
517
-
518
- .basic {
519
- display: flex;
520
- height: 40px;
521
-
522
- .basic-info {
523
- display: flex;
524
- flex-direction: column;
525
- justify-content: space-between;
526
- margin-left: 8px;
527
-
528
- .title {
529
- font-weight: bolder;
530
- }
531
-
532
- .sub-title {
533
- color: grey;
534
- font-size: 0.8em;
535
- }
536
- }
537
- }
538
-
539
- .period {
540
- display: flex;
541
- align-items: center;
542
-
543
- .info-icon {
544
- color: grey;
545
- margin-left: 8px;
546
- }
547
- }
548
- }
549
-
550
- .payment-method {
551
- background-color: #fbfbfb;
552
- padding: 18px;
553
-
554
- .payment-method__title {
555
- color: #9397a1;
556
- }
557
-
558
- .payment-method__list {
559
- margin-top: 8px;
560
- }
561
- }
562
-
563
- .footer {
564
- display: flex;
565
- align-items: center;
566
- justify-content: ${props => props.enableBlockletAgreement ? 'space-between' : 'flex-end'};
567
-
568
- .agreement {
569
- .agreement-label {
570
- margin-left: 4px;
571
- color: ${props => props.theme.palette.primary.main};
572
- text-decoration: underline;
573
- }
574
- }
575
-
576
- @media (min-width: ${props => props.mobileSize}) {
577
- .actions {
578
- .button-pay {
579
- width: 200px;
580
- }
581
- }
582
- }
583
-
584
- @media (max-width: ${props => props.mobileSize}) {
585
- flex-direction: column;
586
- align-items: center;
587
-
588
- .actions {
589
- display: flex;
590
- justify-content: space-between;
591
- width: 100%;
592
- margin-top: 20px;
593
-
594
- & > button {
595
- width: 48%;
596
- }
597
- }
598
- }
599
- }
600
- `;
601
- export default CheckoutPage;