@wix/headless-bookings 0.0.38 → 0.0.40
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/cjs/dist/react/core/payment/Payment.d.ts +36 -104
- package/cjs/dist/react/core/payment/Payment.js +29 -111
- package/cjs/dist/react/core/time-slot-list/TimeSlot.d.ts +14 -22
- package/cjs/dist/react/core/time-slot-list/TimeSlot.js +30 -34
- package/cjs/dist/react/index.d.ts +0 -1
- package/cjs/dist/react/index.js +0 -1
- package/cjs/dist/react/payment/Payment.d.ts +119 -82
- package/cjs/dist/react/payment/Payment.js +126 -81
- package/cjs/dist/react/time-slot-list/TimeSlot.d.ts +24 -2
- package/cjs/dist/react/time-slot-list/TimeSlot.js +18 -2
- package/cjs/dist/react/time-slot-list/TimeSlotList.js +3 -5
- package/cjs/dist/services/index.d.ts +1 -1
- package/cjs/dist/services/index.js +1 -1
- package/cjs/dist/services/payment/payment.def.d.ts +2 -1
- package/cjs/dist/services/payment/payment.js +8 -2
- package/cjs/dist/services/time-slot-list/index.d.ts +1 -0
- package/cjs/dist/services/time-slot-list/index.js +1 -0
- package/cjs/dist/services/time-slot-list/time-slot.d.ts +35 -0
- package/cjs/dist/services/time-slot-list/time-slot.js +20 -0
- package/cjs/dist/utils/guid.d.ts +7 -0
- package/cjs/dist/utils/guid.js +12 -0
- package/dist/react/core/payment/Payment.d.ts +36 -104
- package/dist/react/core/payment/Payment.js +29 -111
- package/dist/react/core/time-slot-list/TimeSlot.d.ts +14 -22
- package/dist/react/core/time-slot-list/TimeSlot.js +30 -34
- package/dist/react/index.d.ts +0 -1
- package/dist/react/index.js +0 -1
- package/dist/react/payment/Payment.d.ts +119 -82
- package/dist/react/payment/Payment.js +126 -81
- package/dist/react/time-slot-list/TimeSlot.d.ts +24 -2
- package/dist/react/time-slot-list/TimeSlot.js +18 -2
- package/dist/react/time-slot-list/TimeSlotList.js +3 -5
- package/dist/services/index.d.ts +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/payment/payment.def.d.ts +2 -1
- package/dist/services/payment/payment.js +8 -2
- package/dist/services/time-slot-list/index.d.ts +1 -0
- package/dist/services/time-slot-list/index.js +1 -0
- package/dist/services/time-slot-list/time-slot.d.ts +35 -0
- package/dist/services/time-slot-list/time-slot.js +20 -0
- package/dist/utils/guid.d.ts +7 -0
- package/dist/utils/guid.js +12 -0
- package/package.json +2 -2
- package/cjs/dist/react/payment/PaymentLineItem.d.ts +0 -144
- package/cjs/dist/react/payment/PaymentLineItem.js +0 -141
- package/dist/react/payment/PaymentLineItem.d.ts +0 -144
- package/dist/react/payment/PaymentLineItem.js +0 -141
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Note: Currently supports single service only
|
|
5
5
|
*/
|
|
6
6
|
import React from 'react';
|
|
7
|
-
import { type PaymentServiceConfig, type
|
|
7
|
+
import { type PaymentServiceConfig, type SlotService } from '../../../services/payment/payment.js';
|
|
8
8
|
import type { MoneyData } from '@wix/headless-components/react';
|
|
9
9
|
/**
|
|
10
10
|
* Props for Payment.Root component
|
|
@@ -33,122 +33,89 @@ export interface RootProps {
|
|
|
33
33
|
* ```tsx
|
|
34
34
|
* // SSR mode
|
|
35
35
|
* <Payment.Root paymentServiceConfig={{ paymentDetails }}>
|
|
36
|
-
* <Payment.
|
|
36
|
+
* <Payment.Total />
|
|
37
37
|
* </Payment.Root>
|
|
38
38
|
*
|
|
39
39
|
* // Lazy loading mode
|
|
40
40
|
* <Payment.Root slotServices={[...]} numberOfParticipants={2}>
|
|
41
|
-
* {({ isLoading }) => isLoading ? <div>Loading...</div> : <Payment.
|
|
41
|
+
* {({ isLoading }) => isLoading ? <div>Loading...</div> : <Payment.Total />}
|
|
42
42
|
* </Payment.Root>
|
|
43
43
|
*
|
|
44
44
|
* // Reactive mode
|
|
45
45
|
* <Payment.Root>
|
|
46
|
-
* <Payment.
|
|
46
|
+
* <Payment.Total />
|
|
47
47
|
* </Payment.Root>
|
|
48
48
|
* ```
|
|
49
49
|
*/
|
|
50
50
|
export declare function Root(props: RootProps): React.ReactNode;
|
|
51
51
|
/**
|
|
52
|
-
* Props for
|
|
52
|
+
* Props for Data render prop component
|
|
53
53
|
*/
|
|
54
|
-
export interface
|
|
55
|
-
children: (data: {
|
|
56
|
-
paymentDetails: PaymentDetails | null;
|
|
57
|
-
isLoading: boolean;
|
|
58
|
-
error: string | null;
|
|
59
|
-
}) => React.ReactNode;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Core component that provides access to full payment details via render props.
|
|
63
|
-
*
|
|
64
|
-
* @component
|
|
65
|
-
* @example
|
|
66
|
-
* ```tsx
|
|
67
|
-
* <Payment.Payment>
|
|
68
|
-
* {({ paymentDetails, isLoading, error }) => (
|
|
69
|
-
* isLoading ? <div>Loading...</div> : <div>{JSON.stringify(paymentDetails)}</div>
|
|
70
|
-
* )}
|
|
71
|
-
* </Payment.Payment>
|
|
72
|
-
* ```
|
|
73
|
-
*/
|
|
74
|
-
export declare function Payment(props: PaymentProps): React.ReactNode;
|
|
75
|
-
/**
|
|
76
|
-
* Props for Summary render prop component
|
|
77
|
-
*/
|
|
78
|
-
export interface SummaryProps {
|
|
54
|
+
export interface DataProps {
|
|
79
55
|
children: (data: {
|
|
80
56
|
subtotal: MoneyData | null;
|
|
81
57
|
total: MoneyData | null;
|
|
82
|
-
currency: string;
|
|
83
58
|
tax: MoneyData | null;
|
|
84
|
-
hasTax: boolean;
|
|
85
59
|
discount: MoneyData | null;
|
|
86
|
-
hasDiscount: boolean;
|
|
87
60
|
payNow: MoneyData | null;
|
|
88
61
|
payLater: MoneyData | null;
|
|
89
|
-
|
|
62
|
+
currency: string;
|
|
63
|
+
isLoading: boolean;
|
|
64
|
+
error: string | null;
|
|
90
65
|
}) => React.ReactNode;
|
|
91
66
|
}
|
|
92
67
|
/**
|
|
93
|
-
* Core component that provides access to payment
|
|
94
|
-
* Returns
|
|
95
|
-
* Use data-attributes for conditional visibility via CSS.
|
|
68
|
+
* Core component that provides access to converted payment data.
|
|
69
|
+
* Returns MoneyData for each price field, ready for rendering.
|
|
96
70
|
*
|
|
97
71
|
* @component
|
|
98
|
-
* @example
|
|
99
|
-
* ```tsx
|
|
100
|
-
* <Payment.Summary>
|
|
101
|
-
* {({ subtotal, tax, total, hasTax, hasDiscount, discount, isDeposit, payNow }) => (
|
|
102
|
-
* <div>
|
|
103
|
-
* <div>Subtotal: <Money money={subtotal} /></div>
|
|
104
|
-
* <div data-has-tax={hasTax}>Tax: <Money money={tax} /></div>
|
|
105
|
-
* <div data-has-discount={hasDiscount}>Discount: <Money money={discount} /></div>
|
|
106
|
-
* <div>Total: <Money money={total} /></div>
|
|
107
|
-
* <div data-has-deposit={isDeposit}>Pay Now: <Money money={payNow} /></div>
|
|
108
|
-
* </div>
|
|
109
|
-
* )}
|
|
110
|
-
* </Payment.Summary>
|
|
111
|
-
* ```
|
|
112
72
|
*/
|
|
113
|
-
export declare function
|
|
114
|
-
import type { CalculatedLineItem as ApiCalculatedLineItem } from '@wix/auto_sdk_ecom_totals-calculator';
|
|
115
|
-
import type { LineItemAdditionalInfo } from '../../../services/payment/payment.js';
|
|
73
|
+
export declare function Data(props: DataProps): React.ReactNode;
|
|
116
74
|
/**
|
|
117
|
-
*
|
|
75
|
+
* Line item with pre-converted MoneyData prices
|
|
118
76
|
*/
|
|
119
|
-
export interface
|
|
120
|
-
/**
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
|
|
77
|
+
export interface LineItem {
|
|
78
|
+
/** Unique identifier */
|
|
79
|
+
id: string;
|
|
80
|
+
/** Total price after tax */
|
|
81
|
+
totalPrice: MoneyData | null;
|
|
82
|
+
/** Subtotal (full price before discounts) */
|
|
83
|
+
subtotal: MoneyData | null;
|
|
84
|
+
/** Tax amount */
|
|
85
|
+
tax: MoneyData | null;
|
|
86
|
+
/** Discount amount */
|
|
87
|
+
discount: MoneyData | null;
|
|
88
|
+
/** Deposit amount */
|
|
89
|
+
deposit: MoneyData | null;
|
|
90
|
+
/** Custom price text (for CUSTOM rate type) */
|
|
91
|
+
priceText: string | null;
|
|
124
92
|
}
|
|
125
93
|
/**
|
|
126
94
|
* Props for LineItems render prop component
|
|
127
95
|
*/
|
|
128
96
|
export interface LineItemsProps {
|
|
129
97
|
children: (data: {
|
|
130
|
-
lineItems:
|
|
98
|
+
lineItems: LineItem[];
|
|
131
99
|
hasLineItems: boolean;
|
|
132
100
|
currency: string;
|
|
101
|
+
isLoading: boolean;
|
|
102
|
+
error: string | null;
|
|
133
103
|
}) => React.ReactNode;
|
|
134
104
|
}
|
|
135
105
|
/**
|
|
136
106
|
* Core component that provides access to calculated line items via render props.
|
|
137
|
-
*
|
|
138
|
-
* Note: Currently supports single service only (always 1 line item).
|
|
107
|
+
* Returns line items with pre-converted MoneyData prices.
|
|
139
108
|
*
|
|
140
109
|
* @component
|
|
141
110
|
* @example
|
|
142
111
|
* ```tsx
|
|
143
112
|
* <Payment.LineItems>
|
|
144
|
-
* {({ lineItems, hasLineItems, currency }) => (
|
|
113
|
+
* {({ lineItems, hasLineItems, currency, isLoading, error }) => (
|
|
145
114
|
* <ul data-has-items={hasLineItems}>
|
|
146
115
|
* {lineItems.map((item) => (
|
|
147
|
-
* <
|
|
148
|
-
* {
|
|
149
|
-
*
|
|
150
|
-
* )}
|
|
151
|
-
* </Payment.LineItem>
|
|
116
|
+
* <li key={item.id}>
|
|
117
|
+
* <Money money={item.totalPrice} />
|
|
118
|
+
* </li>
|
|
152
119
|
* ))}
|
|
153
120
|
* </ul>
|
|
154
121
|
* )}
|
|
@@ -156,38 +123,3 @@ export interface LineItemsProps {
|
|
|
156
123
|
* ```
|
|
157
124
|
*/
|
|
158
125
|
export declare function LineItems(props: LineItemsProps): React.ReactNode;
|
|
159
|
-
/**
|
|
160
|
-
* Props for LineItem render prop component
|
|
161
|
-
*/
|
|
162
|
-
export interface LineItemProps {
|
|
163
|
-
lineItem: CombinedLineItem;
|
|
164
|
-
currency: string;
|
|
165
|
-
children: (data: {
|
|
166
|
-
totalPrice: MoneyData | null;
|
|
167
|
-
subtotal: MoneyData | null;
|
|
168
|
-
tax: MoneyData | null;
|
|
169
|
-
discount: MoneyData | null;
|
|
170
|
-
deposit: MoneyData | null;
|
|
171
|
-
priceText: string | null;
|
|
172
|
-
}) => React.ReactNode;
|
|
173
|
-
}
|
|
174
|
-
/**
|
|
175
|
-
* Core component that provides access to a single line item via render props.
|
|
176
|
-
* Use data-attributes for conditional visibility via CSS.
|
|
177
|
-
*
|
|
178
|
-
* @component
|
|
179
|
-
* @example
|
|
180
|
-
* ```tsx
|
|
181
|
-
* <Payment.LineItem lineItem={item} currency="USD">
|
|
182
|
-
* {({ totalPrice, subtotal, tax, discount, deposit, priceText }) => (
|
|
183
|
-
* <div>
|
|
184
|
-
* <span><Money money={totalPrice} /></span>
|
|
185
|
-
* <span data-has-discount={!!discount?.amount}><Money money={discount} /></span>
|
|
186
|
-
* <span data-has-deposit={!!deposit?.amount}><Money money={deposit} /></span>
|
|
187
|
-
* <span data-has-price-text={!!priceText}>{priceText}</span>
|
|
188
|
-
* </div>
|
|
189
|
-
* )}
|
|
190
|
-
* </Payment.LineItem>
|
|
191
|
-
* ```
|
|
192
|
-
*/
|
|
193
|
-
export declare function LineItem(props: LineItemProps): React.ReactNode;
|
|
@@ -28,17 +28,17 @@ function RootContent({ children, }) {
|
|
|
28
28
|
* ```tsx
|
|
29
29
|
* // SSR mode
|
|
30
30
|
* <Payment.Root paymentServiceConfig={{ paymentDetails }}>
|
|
31
|
-
* <Payment.
|
|
31
|
+
* <Payment.Total />
|
|
32
32
|
* </Payment.Root>
|
|
33
33
|
*
|
|
34
34
|
* // Lazy loading mode
|
|
35
35
|
* <Payment.Root slotServices={[...]} numberOfParticipants={2}>
|
|
36
|
-
* {({ isLoading }) => isLoading ? <div>Loading...</div> : <Payment.
|
|
36
|
+
* {({ isLoading }) => isLoading ? <div>Loading...</div> : <Payment.Total />}
|
|
37
37
|
* </Payment.Root>
|
|
38
38
|
*
|
|
39
39
|
* // Reactive mode
|
|
40
40
|
* <Payment.Root>
|
|
41
|
-
* <Payment.
|
|
41
|
+
* <Payment.Total />
|
|
42
42
|
* </Payment.Root>
|
|
43
43
|
* ```
|
|
44
44
|
*/
|
|
@@ -53,93 +53,40 @@ export function Root(props) {
|
|
|
53
53
|
return (_jsx(WixServices, { servicesMap: createServicesMap().addService(PaymentServiceDefinition, PaymentService, internalConfig), children: _jsx(RootContent, { children: children }) }));
|
|
54
54
|
}
|
|
55
55
|
/**
|
|
56
|
-
* Core component that provides access to
|
|
56
|
+
* Core component that provides access to converted payment data.
|
|
57
|
+
* Returns MoneyData for each price field, ready for rendering.
|
|
57
58
|
*
|
|
58
59
|
* @component
|
|
59
|
-
* @example
|
|
60
|
-
* ```tsx
|
|
61
|
-
* <Payment.Payment>
|
|
62
|
-
* {({ paymentDetails, isLoading, error }) => (
|
|
63
|
-
* isLoading ? <div>Loading...</div> : <div>{JSON.stringify(paymentDetails)}</div>
|
|
64
|
-
* )}
|
|
65
|
-
* </Payment.Payment>
|
|
66
|
-
* ```
|
|
67
60
|
*/
|
|
68
|
-
export function
|
|
61
|
+
export function Data(props) {
|
|
69
62
|
const paymentService = useService(PaymentServiceDefinition);
|
|
70
63
|
const paymentDetails = paymentService.paymentDetailsSignal.get();
|
|
71
64
|
const isLoading = paymentService.isLoadingSignal.get();
|
|
72
65
|
const error = paymentService.errorSignal.get();
|
|
73
|
-
return props.children({ paymentDetails, isLoading, error });
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Core component that provides access to payment summary totals via render props.
|
|
77
|
-
* Returns all pricing totals with MoneyData format for the Money component.
|
|
78
|
-
* Use data-attributes for conditional visibility via CSS.
|
|
79
|
-
*
|
|
80
|
-
* @component
|
|
81
|
-
* @example
|
|
82
|
-
* ```tsx
|
|
83
|
-
* <Payment.Summary>
|
|
84
|
-
* {({ subtotal, tax, total, hasTax, hasDiscount, discount, isDeposit, payNow }) => (
|
|
85
|
-
* <div>
|
|
86
|
-
* <div>Subtotal: <Money money={subtotal} /></div>
|
|
87
|
-
* <div data-has-tax={hasTax}>Tax: <Money money={tax} /></div>
|
|
88
|
-
* <div data-has-discount={hasDiscount}>Discount: <Money money={discount} /></div>
|
|
89
|
-
* <div>Total: <Money money={total} /></div>
|
|
90
|
-
* <div data-has-deposit={isDeposit}>Pay Now: <Money money={payNow} /></div>
|
|
91
|
-
* </div>
|
|
92
|
-
* )}
|
|
93
|
-
* </Payment.Summary>
|
|
94
|
-
* ```
|
|
95
|
-
*/
|
|
96
|
-
export function Summary(props) {
|
|
97
|
-
const paymentService = useService(PaymentServiceDefinition);
|
|
98
|
-
const paymentDetails = paymentService.paymentDetailsSignal.get();
|
|
99
66
|
const currency = paymentDetails?.response?.currency || 'USD';
|
|
100
67
|
const priceSummary = paymentDetails?.response?.priceSummary;
|
|
101
|
-
// Always present
|
|
102
68
|
const subtotal = convertMultiCurrencyPriceToMoneyData(priceSummary?.subtotal, currency);
|
|
103
69
|
const total = convertMultiCurrencyPriceToMoneyData(priceSummary?.total, currency);
|
|
104
|
-
// May or may not exist
|
|
105
70
|
const tax = convertMultiCurrencyPriceToMoneyData(priceSummary?.tax, currency);
|
|
106
|
-
const hasTax = tax !== null && tax.amount > 0;
|
|
107
71
|
const discount = convertMultiCurrencyPriceToMoneyData(priceSummary?.discount, currency);
|
|
108
|
-
const hasDiscount = discount !== null && discount.amount > 0;
|
|
109
|
-
// Deposit scenarios only
|
|
110
72
|
const payNow = convertMultiCurrencyPriceToMoneyData(paymentDetails?.response?.payNow?.total, currency);
|
|
111
73
|
const payLater = convertMultiCurrencyPriceToMoneyData(paymentDetails?.response?.payLater?.total, currency);
|
|
112
|
-
|
|
113
|
-
return props.children({
|
|
114
|
-
subtotal,
|
|
115
|
-
total,
|
|
116
|
-
currency,
|
|
117
|
-
tax,
|
|
118
|
-
hasTax,
|
|
119
|
-
discount,
|
|
120
|
-
hasDiscount,
|
|
121
|
-
payNow,
|
|
122
|
-
payLater,
|
|
123
|
-
isDeposit,
|
|
124
|
-
});
|
|
74
|
+
return props.children({ subtotal, total, tax, discount, payNow, payLater, currency, isLoading, error });
|
|
125
75
|
}
|
|
126
76
|
/**
|
|
127
77
|
* Core component that provides access to calculated line items via render props.
|
|
128
|
-
*
|
|
129
|
-
* Note: Currently supports single service only (always 1 line item).
|
|
78
|
+
* Returns line items with pre-converted MoneyData prices.
|
|
130
79
|
*
|
|
131
80
|
* @component
|
|
132
81
|
* @example
|
|
133
82
|
* ```tsx
|
|
134
83
|
* <Payment.LineItems>
|
|
135
|
-
* {({ lineItems, hasLineItems, currency }) => (
|
|
84
|
+
* {({ lineItems, hasLineItems, currency, isLoading, error }) => (
|
|
136
85
|
* <ul data-has-items={hasLineItems}>
|
|
137
86
|
* {lineItems.map((item) => (
|
|
138
|
-
* <
|
|
139
|
-
* {
|
|
140
|
-
*
|
|
141
|
-
* )}
|
|
142
|
-
* </Payment.LineItem>
|
|
87
|
+
* <li key={item.id}>
|
|
88
|
+
* <Money money={item.totalPrice} />
|
|
89
|
+
* </li>
|
|
143
90
|
* ))}
|
|
144
91
|
* </ul>
|
|
145
92
|
* )}
|
|
@@ -149,54 +96,25 @@ export function Summary(props) {
|
|
|
149
96
|
export function LineItems(props) {
|
|
150
97
|
const paymentService = useService(PaymentServiceDefinition);
|
|
151
98
|
const paymentDetails = paymentService.paymentDetailsSignal.get();
|
|
99
|
+
const isLoading = paymentService.isLoadingSignal.get();
|
|
100
|
+
const error = paymentService.errorSignal.get();
|
|
152
101
|
const sdkLineItems = paymentDetails?.response?.calculatedLineItems || [];
|
|
153
102
|
const additionalInfoList = paymentDetails?.additionalInfo?.lineItems || [];
|
|
154
103
|
const currency = paymentDetails?.response?.currency || 'USD';
|
|
155
|
-
//
|
|
156
|
-
const lineItems = sdkLineItems.map((sdkLineItem) =>
|
|
157
|
-
sdkLineItem
|
|
158
|
-
additionalInfo
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
* @example
|
|
169
|
-
* ```tsx
|
|
170
|
-
* <Payment.LineItem lineItem={item} currency="USD">
|
|
171
|
-
* {({ totalPrice, subtotal, tax, discount, deposit, priceText }) => (
|
|
172
|
-
* <div>
|
|
173
|
-
* <span><Money money={totalPrice} /></span>
|
|
174
|
-
* <span data-has-discount={!!discount?.amount}><Money money={discount} /></span>
|
|
175
|
-
* <span data-has-deposit={!!deposit?.amount}><Money money={deposit} /></span>
|
|
176
|
-
* <span data-has-price-text={!!priceText}>{priceText}</span>
|
|
177
|
-
* </div>
|
|
178
|
-
* )}
|
|
179
|
-
* </Payment.LineItem>
|
|
180
|
-
* ```
|
|
181
|
-
*/
|
|
182
|
-
export function LineItem(props) {
|
|
183
|
-
const { lineItem, currency, children } = props;
|
|
184
|
-
const { sdkLineItem, additionalInfo } = lineItem;
|
|
185
|
-
const pricesBreakdown = sdkLineItem?.pricesBreakdown;
|
|
186
|
-
// Prices (from SDK)
|
|
187
|
-
const totalPrice = convertMultiCurrencyPriceToMoneyData(pricesBreakdown?.totalPriceAfterTax, currency);
|
|
188
|
-
const subtotal = convertMultiCurrencyPriceToMoneyData(pricesBreakdown?.fullPrice, currency);
|
|
189
|
-
const tax = convertMultiCurrencyPriceToMoneyData(pricesBreakdown?.taxDetails?.totalTax, currency);
|
|
190
|
-
const discount = convertMultiCurrencyPriceToMoneyData(pricesBreakdown?.totalDiscount, currency);
|
|
191
|
-
const deposit = convertMultiCurrencyPriceToMoneyData(pricesBreakdown?.depositAmount, currency);
|
|
192
|
-
// Custom price text (for CUSTOM rate type)
|
|
193
|
-
const priceText = additionalInfo?.priceText || null;
|
|
194
|
-
return children({
|
|
195
|
-
totalPrice,
|
|
196
|
-
subtotal,
|
|
197
|
-
tax,
|
|
198
|
-
discount,
|
|
199
|
-
deposit,
|
|
200
|
-
priceText,
|
|
104
|
+
// Convert SDK line items to LineItem with MoneyData prices
|
|
105
|
+
const lineItems = sdkLineItems.map((sdkLineItem) => {
|
|
106
|
+
const pricesBreakdown = sdkLineItem?.pricesBreakdown;
|
|
107
|
+
const additionalInfo = additionalInfoList.find((info) => info.lineItemId === sdkLineItem.lineItemId);
|
|
108
|
+
return {
|
|
109
|
+
id: sdkLineItem.lineItemId || '',
|
|
110
|
+
totalPrice: convertMultiCurrencyPriceToMoneyData(pricesBreakdown?.totalPriceAfterTax, currency),
|
|
111
|
+
subtotal: convertMultiCurrencyPriceToMoneyData(pricesBreakdown?.fullPrice, currency),
|
|
112
|
+
tax: convertMultiCurrencyPriceToMoneyData(pricesBreakdown?.taxDetails?.totalTax, currency),
|
|
113
|
+
discount: convertMultiCurrencyPriceToMoneyData(pricesBreakdown?.totalDiscount, currency),
|
|
114
|
+
deposit: convertMultiCurrencyPriceToMoneyData(pricesBreakdown?.depositAmount, currency),
|
|
115
|
+
priceText: additionalInfo?.priceText || null,
|
|
116
|
+
};
|
|
201
117
|
});
|
|
118
|
+
const hasLineItems = lineItems.length > 0;
|
|
119
|
+
return props.children({ lineItems, hasLineItems, currency, isLoading, error });
|
|
202
120
|
}
|
|
@@ -7,34 +7,26 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import React from 'react';
|
|
9
9
|
import type { TimeSlot as TimeSlotType } from '@wix/auto_sdk_bookings_availability-time-slots';
|
|
10
|
+
import { type TimeSlotServiceConfig } from '../../../services/time-slot-list/time-slot.js';
|
|
10
11
|
/**
|
|
11
|
-
*
|
|
12
|
+
* Props for TimeSlot.Root component
|
|
12
13
|
*/
|
|
13
|
-
export interface
|
|
14
|
-
/** The current time slot data */
|
|
15
|
-
timeSlot: TimeSlotType;
|
|
16
|
-
/** Whether this time slot is currently selected */
|
|
17
|
-
isSelected: boolean;
|
|
18
|
-
/** Action to select this time slot */
|
|
19
|
-
selectTimeSlot: () => void;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Hook to access TimeSlot context
|
|
23
|
-
* @throws Error if used outside of TimeSlotProvider
|
|
24
|
-
*/
|
|
25
|
-
export declare function useTimeSlotContext(): TimeSlotContextValue;
|
|
26
|
-
/**
|
|
27
|
-
* Props for TimeSlotProvider
|
|
28
|
-
*/
|
|
29
|
-
export interface TimeSlotProviderProps {
|
|
14
|
+
export interface RootProps {
|
|
30
15
|
children: React.ReactNode;
|
|
31
|
-
|
|
16
|
+
config: TimeSlotServiceConfig;
|
|
32
17
|
}
|
|
33
18
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
19
|
+
* Root component that provides TimeSlot context.
|
|
20
|
+
*
|
|
21
|
+
* @component
|
|
22
|
+
* @example
|
|
23
|
+
* ```tsx
|
|
24
|
+
* <TimeSlot.Root config={{ timeSlot }}>
|
|
25
|
+
* {children}
|
|
26
|
+
* </TimeSlot.Root>
|
|
27
|
+
* ```
|
|
36
28
|
*/
|
|
37
|
-
export declare function
|
|
29
|
+
export declare function Root(props: RootProps): React.ReactNode;
|
|
38
30
|
/**
|
|
39
31
|
* Context value for StaffMember components
|
|
40
32
|
*/
|
|
@@ -7,41 +7,24 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
7
7
|
* which provides the TimeSlotProvider context.
|
|
8
8
|
*/
|
|
9
9
|
import React from 'react';
|
|
10
|
-
import { useService } from '@wix/services-manager-react';
|
|
10
|
+
import { useService, WixServices } from '@wix/services-manager-react';
|
|
11
|
+
import { createServicesMap } from '@wix/services-manager';
|
|
11
12
|
import { TimeSlotListServiceDefinition } from '../../../services/time-slot-list/time-slot-list.def.js';
|
|
12
13
|
import { ANY_STAFF_MEMBER_ID, BookingServiceDefinition, } from '../../../services/booking/booking.js';
|
|
13
|
-
|
|
14
|
+
import { TimeSlotServiceDefinition, TimeSlotService, } from '../../../services/time-slot-list/time-slot.js';
|
|
14
15
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Provider component used by TimeSlotRepeater to provide context.
|
|
27
|
-
* Not used directly by consumers - only by TimeSlotList.TimeSlotRepeater.
|
|
16
|
+
* Root component that provides TimeSlot context.
|
|
17
|
+
*
|
|
18
|
+
* @component
|
|
19
|
+
* @example
|
|
20
|
+
* ```tsx
|
|
21
|
+
* <TimeSlot.Root config={{ timeSlot }}>
|
|
22
|
+
* {children}
|
|
23
|
+
* </TimeSlot.Root>
|
|
24
|
+
* ```
|
|
28
25
|
*/
|
|
29
|
-
export function
|
|
30
|
-
|
|
31
|
-
const service = useService(TimeSlotListServiceDefinition);
|
|
32
|
-
const bookingService = useService(BookingServiceDefinition);
|
|
33
|
-
const selectedTimeSlot = bookingService.serviceSelections.get()[0]?.timeSlot;
|
|
34
|
-
const isSelected = selectedTimeSlot?.startDate === timeSlot.localStartDate &&
|
|
35
|
-
selectedTimeSlot?.location?._id === timeSlot.location?._id;
|
|
36
|
-
const selectTimeSlot = () => {
|
|
37
|
-
service.actions.selectSlot(timeSlot);
|
|
38
|
-
};
|
|
39
|
-
const contextValue = {
|
|
40
|
-
timeSlot,
|
|
41
|
-
isSelected,
|
|
42
|
-
selectTimeSlot,
|
|
43
|
-
};
|
|
44
|
-
return (_jsx(TimeSlotContext.Provider, { value: contextValue, children: children }));
|
|
26
|
+
export function Root(props) {
|
|
27
|
+
return (_jsx(WixServices, { servicesMap: createServicesMap().addService(TimeSlotServiceDefinition, TimeSlotService, props.config), children: props.children }));
|
|
45
28
|
}
|
|
46
29
|
const StaffMemberContext = React.createContext(null);
|
|
47
30
|
/**
|
|
@@ -89,7 +72,12 @@ export function StaffMemberProvider(props) {
|
|
|
89
72
|
* ```
|
|
90
73
|
*/
|
|
91
74
|
export function Info(props) {
|
|
92
|
-
const
|
|
75
|
+
const timeSlotService = useService(TimeSlotServiceDefinition);
|
|
76
|
+
const timeSlot = timeSlotService.timeSlotSignal.get();
|
|
77
|
+
const bookingService = useService(BookingServiceDefinition);
|
|
78
|
+
const selectedTimeSlot = bookingService.serviceSelections.get()[0]?.timeSlot;
|
|
79
|
+
const isSelected = selectedTimeSlot?.startDate === timeSlot.localStartDate &&
|
|
80
|
+
selectedTimeSlot?.location?._id === timeSlot.location?._id;
|
|
93
81
|
const startDate = new Date(timeSlot.localStartDate);
|
|
94
82
|
const endDate = new Date(timeSlot.localEndDate);
|
|
95
83
|
const locationName = timeSlot.location?.name ?? '';
|
|
@@ -127,9 +115,16 @@ export function Info(props) {
|
|
|
127
115
|
* ```
|
|
128
116
|
*/
|
|
129
117
|
export function Actions(props) {
|
|
130
|
-
const
|
|
118
|
+
const timeSlotService = useService(TimeSlotServiceDefinition);
|
|
119
|
+
const timeSlot = timeSlotService.timeSlotSignal.get();
|
|
131
120
|
const service = useService(TimeSlotListServiceDefinition);
|
|
132
121
|
const bookingService = useService(BookingServiceDefinition);
|
|
122
|
+
const selectedTimeSlot = bookingService.serviceSelections.get()[0]?.timeSlot;
|
|
123
|
+
const isSelected = selectedTimeSlot?.startDate === timeSlot.localStartDate &&
|
|
124
|
+
selectedTimeSlot?.location?._id === timeSlot.location?._id;
|
|
125
|
+
const selectTimeSlot = () => {
|
|
126
|
+
service.actions.selectSlot(timeSlot);
|
|
127
|
+
};
|
|
133
128
|
const bookable = timeSlot.bookable ?? false;
|
|
134
129
|
const selectedStaffMemberId = bookingService.serviceSelections.get()[0]?.timeSlot?.resources?.[0]?._id;
|
|
135
130
|
const staffFromSlot = timeSlot.availableResources[0].resources.map((r) => r._id);
|
|
@@ -165,7 +160,8 @@ export function Actions(props) {
|
|
|
165
160
|
* ```
|
|
166
161
|
*/
|
|
167
162
|
export function StaffMembers(props) {
|
|
168
|
-
const
|
|
163
|
+
const timeSlotService = useService(TimeSlotServiceDefinition);
|
|
164
|
+
const timeSlot = timeSlotService.timeSlotSignal.get();
|
|
169
165
|
const service = useService(TimeSlotListServiceDefinition);
|
|
170
166
|
const bookingService = useService(BookingServiceDefinition);
|
|
171
167
|
const selectedStaffMemberId = bookingService.serviceSelections.get()[0]?.timeSlot?.resources?.[0]?._id;
|
|
@@ -6,4 +6,3 @@ export * as TimeSlotList from './time-slot-list/TimeSlotList.js';
|
|
|
6
6
|
export * as ServiceList from './service-list/ServiceList.js';
|
|
7
7
|
export * as Location from './location/Location.js';
|
|
8
8
|
export * as Payment from './payment/Payment.js';
|
|
9
|
-
export * as PaymentLineItem from './payment/PaymentLineItem.js';
|
package/cjs/dist/react/index.js
CHANGED
|
@@ -6,4 +6,3 @@ export * as TimeSlotList from './time-slot-list/TimeSlotList.js';
|
|
|
6
6
|
export * as ServiceList from './service-list/ServiceList.js';
|
|
7
7
|
export * as Location from './location/Location.js';
|
|
8
8
|
export * as Payment from './payment/Payment.js';
|
|
9
|
-
export * as PaymentLineItem from './payment/PaymentLineItem.js';
|