tf-checkout-react 1.0.71 → 1.0.75
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/dist/api/index.d.ts +1 -0
- package/dist/components/billing-info-container/index.d.ts +4 -2
- package/dist/components/common/CheckboxField.d.ts +1 -1
- package/dist/components/common/FormikPhoneNumberField.d.ts +1 -1
- package/dist/components/confirmationContainer/index.d.ts +2 -1
- package/dist/components/paymentContainer/index.d.ts +2 -1
- package/dist/components/stripePayment/index.d.ts +2 -1
- package/dist/components/ticketsContainer/PromoCodeSection.d.ts +12 -0
- package/dist/components/ticketsContainer/index.d.ts +2 -1
- package/dist/components/waitingList/index.d.ts +2 -1
- package/dist/env.d.ts +2 -2
- package/dist/images/done.svg +3 -0
- package/dist/tf-checkout-react.cjs.development.js +192 -122
- package/dist/tf-checkout-react.cjs.development.js.map +1 -1
- package/dist/tf-checkout-react.cjs.production.min.js +1 -1
- package/dist/tf-checkout-react.cjs.production.min.js.map +1 -1
- package/dist/tf-checkout-react.esm.js +197 -127
- package/dist/tf-checkout-react.esm.js.map +1 -1
- package/dist/tf-checkout-styles.css +1 -1
- package/dist/utils/setConfigs.d.ts +2 -1
- package/package.json +2 -2
- package/src/api/index.ts +6 -18
- package/src/assets/images/done.svg +3 -0
- package/src/components/billing-info-container/index.tsx +36 -21
- package/src/components/common/CheckboxField.tsx +1 -0
- package/src/components/common/FormikPhoneNumberField.tsx +1 -0
- package/src/components/confirmationContainer/index.tsx +59 -43
- package/src/components/paymentContainer/index.tsx +86 -45
- package/src/components/stripePayment/index.tsx +23 -15
- package/src/components/ticketsContainer/PromoCodeSection.tsx +82 -0
- package/src/components/ticketsContainer/index.tsx +51 -79
- package/src/components/ticketsContainer/style.css +6 -4
- package/src/components/waitingList/index.tsx +7 -4
- package/src/env.ts +4 -4
- package/src/utils/setConfigs.ts +7 -2
|
@@ -46,13 +46,14 @@ export interface ICheckoutForm {
|
|
|
46
46
|
isLoading: any;
|
|
47
47
|
handleSetLoading: (loading: any) => void;
|
|
48
48
|
conditions: any;
|
|
49
|
+
disableZipSection: boolean;
|
|
49
50
|
}
|
|
50
51
|
|
|
51
52
|
interface AddressTypes {
|
|
52
53
|
city: string;
|
|
53
54
|
line1: string;
|
|
54
55
|
state: string;
|
|
55
|
-
postal_code
|
|
56
|
+
postal_code?: string;
|
|
56
57
|
}
|
|
57
58
|
|
|
58
59
|
const CheckoutForm = ({
|
|
@@ -66,6 +67,7 @@ const CheckoutForm = ({
|
|
|
66
67
|
isLoading = false,
|
|
67
68
|
handleSetLoading = () => {},
|
|
68
69
|
conditions = [],
|
|
70
|
+
disableZipSection,
|
|
69
71
|
}: ICheckoutForm) => {
|
|
70
72
|
const stripe = useStripe()
|
|
71
73
|
const elements = useElements()
|
|
@@ -79,7 +81,7 @@ const CheckoutForm = ({
|
|
|
79
81
|
try {
|
|
80
82
|
event.preventDefault()
|
|
81
83
|
|
|
82
|
-
if (!postalCode) {
|
|
84
|
+
if (!postalCode && !disableZipSection) {
|
|
83
85
|
setStripeError('Please enter your zip code.')
|
|
84
86
|
handleSetLoading(false)
|
|
85
87
|
return
|
|
@@ -93,11 +95,15 @@ const CheckoutForm = ({
|
|
|
93
95
|
}
|
|
94
96
|
|
|
95
97
|
const card = elements.getElement(CardNumberElement)
|
|
98
|
+
|
|
96
99
|
const address: AddressTypes = {
|
|
97
100
|
city: billing_info.city,
|
|
98
101
|
line1: billing_info.street_address,
|
|
99
102
|
state: billing_info.state,
|
|
100
|
-
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (!disableZipSection) {
|
|
106
|
+
address.postal_code = postalCode
|
|
101
107
|
}
|
|
102
108
|
|
|
103
109
|
const paymentMethodReq = await stripe.createPaymentMethod({
|
|
@@ -185,7 +191,7 @@ const CheckoutForm = ({
|
|
|
185
191
|
<label className="card_number_element">
|
|
186
192
|
<span className="card_label_text">Card number</span>
|
|
187
193
|
<CardNumberElement
|
|
188
|
-
options={{ ...options, ...stripeCardOptions }}
|
|
194
|
+
options={{ ...options.style, ...stripeCardOptions }}
|
|
189
195
|
onReady={_identity}
|
|
190
196
|
onChange={_identity}
|
|
191
197
|
onBlur={_identity}
|
|
@@ -194,21 +200,23 @@ const CheckoutForm = ({
|
|
|
194
200
|
</label>
|
|
195
201
|
<label className="expiration_element">
|
|
196
202
|
<span className="card_label_text">Expiration date</span>
|
|
197
|
-
<CardExpiryElement options={{ ...options, ...stripeCardOptions }} />
|
|
203
|
+
<CardExpiryElement options={{ ...options.style, ...stripeCardOptions }} />
|
|
198
204
|
</label>
|
|
199
205
|
<label className="cvc_element">
|
|
200
206
|
<span className="card_label_text">CVC</span>
|
|
201
|
-
<CardCvcElement options={{ ...options, ...stripeCardOptions }} />
|
|
202
|
-
</label>
|
|
203
|
-
<label className="zip_element">
|
|
204
|
-
<p className="card_label_text">ZIP</p>
|
|
205
|
-
<input
|
|
206
|
-
type="text"
|
|
207
|
-
value={postalCode}
|
|
208
|
-
onChange={onChangePostalCode}
|
|
209
|
-
placeholder="ZIP"
|
|
210
|
-
/>
|
|
207
|
+
<CardCvcElement options={{ ...options.style, ...stripeCardOptions }} />
|
|
211
208
|
</label>
|
|
209
|
+
{!disableZipSection && (
|
|
210
|
+
<label className="zip_element">
|
|
211
|
+
<p className="card_label_text">ZIP</p>
|
|
212
|
+
<input
|
|
213
|
+
type="text"
|
|
214
|
+
value={postalCode}
|
|
215
|
+
onChange={onChangePostalCode}
|
|
216
|
+
placeholder="ZIP"
|
|
217
|
+
/>
|
|
218
|
+
</label>
|
|
219
|
+
)}
|
|
212
220
|
</div>
|
|
213
221
|
{checkboxes?.map((checkbox: any) => (
|
|
214
222
|
<div
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import Button from 'react-bootstrap/Button'
|
|
3
|
+
import SVG from 'react-inlinesvg'
|
|
4
|
+
import { getImage } from '../../utils/getImage'
|
|
5
|
+
|
|
6
|
+
export interface IPromoCodeSectionProps {
|
|
7
|
+
promoCode: string;
|
|
8
|
+
promoCodeIsApplied: boolean;
|
|
9
|
+
showPromoInput: boolean;
|
|
10
|
+
isPromotionsEnabled: boolean;
|
|
11
|
+
isAllTicketsSoldOut: boolean;
|
|
12
|
+
|
|
13
|
+
setPromoCode: (value: string) => void;
|
|
14
|
+
setPromoCodeUpdated: (value: string) => void;
|
|
15
|
+
setShowPromoInput: (value: boolean) => void;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const PromoCodeSection = ({
|
|
19
|
+
promoCode,
|
|
20
|
+
promoCodeIsApplied,
|
|
21
|
+
showPromoInput,
|
|
22
|
+
isPromotionsEnabled,
|
|
23
|
+
isAllTicketsSoldOut,
|
|
24
|
+
setPromoCode,
|
|
25
|
+
setPromoCodeUpdated,
|
|
26
|
+
setShowPromoInput,
|
|
27
|
+
}: IPromoCodeSectionProps) => {
|
|
28
|
+
|
|
29
|
+
return (
|
|
30
|
+
<div >
|
|
31
|
+
{promoCodeIsApplied ? (
|
|
32
|
+
<div className="alert-info">
|
|
33
|
+
<SVG
|
|
34
|
+
src={getImage('done.svg')}
|
|
35
|
+
preProcessor={(code) => code.replace(/fill=".*?"/g, 'fill="currentColor"')}
|
|
36
|
+
/>
|
|
37
|
+
<p>PROMO CODE APPLIED SUCCESSFULLY</p>
|
|
38
|
+
</div>
|
|
39
|
+
) : null}
|
|
40
|
+
{showPromoInput && (
|
|
41
|
+
<div className="promo-code-block">
|
|
42
|
+
<input
|
|
43
|
+
placeholder="Promo Code"
|
|
44
|
+
onChange={e => {
|
|
45
|
+
setPromoCode(e.target.value)
|
|
46
|
+
}}
|
|
47
|
+
onKeyPress={event => {
|
|
48
|
+
if (event.key === 'Enter') {
|
|
49
|
+
setPromoCodeUpdated(promoCode)
|
|
50
|
+
}
|
|
51
|
+
}}
|
|
52
|
+
/>
|
|
53
|
+
<Button
|
|
54
|
+
className="promo-apply-button"
|
|
55
|
+
placeholder="Promo Code"
|
|
56
|
+
onClick={() => {
|
|
57
|
+
setPromoCodeUpdated(promoCode)
|
|
58
|
+
}}
|
|
59
|
+
>
|
|
60
|
+
Apply
|
|
61
|
+
</Button>
|
|
62
|
+
</div>
|
|
63
|
+
)}
|
|
64
|
+
{isPromotionsEnabled && !showPromoInput && isAllTicketsSoldOut && (
|
|
65
|
+
<p className="promo-code-text">
|
|
66
|
+
Access code needed
|
|
67
|
+
</p>
|
|
68
|
+
)}
|
|
69
|
+
{isPromotionsEnabled && !showPromoInput ? (
|
|
70
|
+
<Button
|
|
71
|
+
className="promo-code-button"
|
|
72
|
+
placeholder="Promo Codes"
|
|
73
|
+
onClick={() => {
|
|
74
|
+
setShowPromoInput(true)
|
|
75
|
+
}}
|
|
76
|
+
>
|
|
77
|
+
Got a promo code? Click here
|
|
78
|
+
</Button>
|
|
79
|
+
) : null}
|
|
80
|
+
</div>
|
|
81
|
+
)
|
|
82
|
+
}
|
|
@@ -12,6 +12,7 @@ import Button from 'react-bootstrap/Button'
|
|
|
12
12
|
import jwt_decode from 'jwt-decode'
|
|
13
13
|
import { TicketsSection } from './TicketsSection'
|
|
14
14
|
import WaitingList from '../waitingList'
|
|
15
|
+
import { PromoCodeSection } from './PromoCodeSection'
|
|
15
16
|
|
|
16
17
|
function Loader() {
|
|
17
18
|
return (
|
|
@@ -39,6 +40,7 @@ export interface IGetTickets {
|
|
|
39
40
|
|
|
40
41
|
theme?: 'light' | 'dark';
|
|
41
42
|
queryPromoCode?: string;
|
|
43
|
+
isPromotionsEnabled?: boolean;
|
|
42
44
|
}
|
|
43
45
|
|
|
44
46
|
export interface ITicket {
|
|
@@ -55,11 +57,12 @@ export const TicketsContainer = ({
|
|
|
55
57
|
eventId,
|
|
56
58
|
onAddToCartSuccess,
|
|
57
59
|
contentStyle = {},
|
|
58
|
-
onAddToCartError = () => {},
|
|
59
|
-
onGetTicketsSuccess = () => {},
|
|
60
|
-
onGetTicketsError = () => {},
|
|
60
|
+
onAddToCartError = () => { },
|
|
61
|
+
onGetTicketsSuccess = () => { },
|
|
62
|
+
onGetTicketsError = () => { },
|
|
61
63
|
theme = 'light',
|
|
62
|
-
queryPromoCode = ''
|
|
64
|
+
queryPromoCode = '',
|
|
65
|
+
isPromotionsEnabled = true,
|
|
63
66
|
}: IGetTickets) => {
|
|
64
67
|
const [selectedTickets, setSelectedTickets] = useState(
|
|
65
68
|
{} as ISelectedTickets
|
|
@@ -181,82 +184,51 @@ export const TicketsContainer = ({
|
|
|
181
184
|
{isLoading ? (
|
|
182
185
|
<Loader />
|
|
183
186
|
) : (
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
{
|
|
196
|
-
|
|
197
|
-
Your promo code was applied successfully.
|
|
198
|
-
</div>
|
|
199
|
-
) : null}
|
|
200
|
-
{showPromoInput && (
|
|
201
|
-
<div className="promo-code-block">
|
|
202
|
-
<input
|
|
203
|
-
placeholder="Promo Code"
|
|
204
|
-
onChange={e => {
|
|
205
|
-
setPromoCode(e.target.value)
|
|
206
|
-
}}
|
|
207
|
-
onKeyPress={event => {
|
|
208
|
-
if (event.key === 'Enter') {
|
|
209
|
-
setPromoCodeUpdated(promoCode)
|
|
210
|
-
}
|
|
211
|
-
}}
|
|
212
|
-
/>
|
|
213
|
-
<Button
|
|
214
|
-
className="promo-apply-button"
|
|
215
|
-
placeholder="Promo Code"
|
|
216
|
-
onClick={() => {
|
|
217
|
-
setPromoCodeUpdated(promoCode)
|
|
218
|
-
}}
|
|
219
|
-
>
|
|
220
|
-
Apply
|
|
221
|
-
</Button>
|
|
222
|
-
</div>
|
|
223
|
-
)}
|
|
224
|
-
{!showPromoInput && !isAllTicketsSoldOut ? (
|
|
225
|
-
<Button
|
|
226
|
-
className="promo-code-button"
|
|
227
|
-
placeholder="Promo Codes"
|
|
228
|
-
onClick={() => {
|
|
229
|
-
setShowPromoInput(true)
|
|
230
|
-
}}
|
|
231
|
-
>
|
|
232
|
-
Got a promo code? Click here
|
|
233
|
-
</Button>
|
|
234
|
-
) : null}
|
|
235
|
-
<div className="test v1.0.19" style={{ display: 'none' }} />
|
|
236
|
-
{!isAllTicketsSoldOut && (
|
|
237
|
-
<Button
|
|
238
|
-
aria-hidden={true}
|
|
239
|
-
className={`book-button ${
|
|
240
|
-
handleBookIsLoading ||
|
|
241
|
-
_isEmpty(selectedTickets) ||
|
|
242
|
-
Object.values(selectedTickets)[0] === 0
|
|
243
|
-
? 'disabled'
|
|
244
|
-
: ''
|
|
245
|
-
}`}
|
|
246
|
-
onClick={
|
|
247
|
-
!handleBookIsLoading &&
|
|
248
|
-
!_isEmpty(selectedTickets) &&
|
|
249
|
-
Object.values(selectedTickets)[0] > 0
|
|
250
|
-
? handleBook
|
|
251
|
-
: () => {}
|
|
252
|
-
}
|
|
253
|
-
>
|
|
254
|
-
{getTicketsLabel || 'GET TICKETS'}
|
|
255
|
-
</Button>
|
|
256
|
-
)}
|
|
257
|
-
</div>
|
|
187
|
+
<div>
|
|
188
|
+
<TicketsSection
|
|
189
|
+
ticketsList={tickets}
|
|
190
|
+
selectedTickets={selectedTickets}
|
|
191
|
+
handleTicketSelect={handleTicketSelect}
|
|
192
|
+
promoCodeIsApplied={promoCodeIsApplied}
|
|
193
|
+
/>
|
|
194
|
+
{showWaitingList && (
|
|
195
|
+
<WaitingList
|
|
196
|
+
tickets={tickets}
|
|
197
|
+
eventId={eventId}
|
|
198
|
+
isPromotionsEnabled={isPromotionsEnabled}
|
|
199
|
+
/>
|
|
258
200
|
)}
|
|
259
|
-
|
|
201
|
+
<PromoCodeSection
|
|
202
|
+
promoCode={promoCode}
|
|
203
|
+
promoCodeIsApplied={promoCodeIsApplied}
|
|
204
|
+
showPromoInput={showPromoInput}
|
|
205
|
+
setPromoCode={setPromoCode}
|
|
206
|
+
setPromoCodeUpdated={setPromoCodeUpdated}
|
|
207
|
+
setShowPromoInput={setShowPromoInput}
|
|
208
|
+
isPromotionsEnabled={isPromotionsEnabled}
|
|
209
|
+
isAllTicketsSoldOut={isAllTicketsSoldOut}
|
|
210
|
+
/>
|
|
211
|
+
{!isAllTicketsSoldOut && (
|
|
212
|
+
<Button
|
|
213
|
+
aria-hidden={true}
|
|
214
|
+
className={`book-button ${handleBookIsLoading ||
|
|
215
|
+
_isEmpty(selectedTickets) ||
|
|
216
|
+
Object.values(selectedTickets)[0] === 0
|
|
217
|
+
? 'disabled'
|
|
218
|
+
: ''
|
|
219
|
+
}`}
|
|
220
|
+
onClick={
|
|
221
|
+
!handleBookIsLoading &&
|
|
222
|
+
!_isEmpty(selectedTickets) &&
|
|
223
|
+
Object.values(selectedTickets)[0] > 0
|
|
224
|
+
? handleBook
|
|
225
|
+
: () => { }
|
|
226
|
+
}
|
|
227
|
+
>
|
|
228
|
+
{getTicketsLabel || 'GET TICKETS'}
|
|
229
|
+
</Button>
|
|
230
|
+
)}
|
|
231
|
+
</div>
|
|
260
232
|
)}
|
|
261
233
|
</div>
|
|
262
234
|
)
|
|
@@ -57,7 +57,6 @@ body {
|
|
|
57
57
|
}
|
|
58
58
|
.event-detail__tier-price {
|
|
59
59
|
font-family: Inter-Bold;
|
|
60
|
-
font-weight: 700;
|
|
61
60
|
font-size: 1.5rem;
|
|
62
61
|
line-height: 1;
|
|
63
62
|
color: #000;
|
|
@@ -70,7 +69,6 @@ body {
|
|
|
70
69
|
|
|
71
70
|
.event-detail__tier-price .fees {
|
|
72
71
|
font-size: 14px;
|
|
73
|
-
font-weight: normal;
|
|
74
72
|
text-align: left;
|
|
75
73
|
margin-top: 4px;
|
|
76
74
|
}
|
|
@@ -84,16 +82,20 @@ body {
|
|
|
84
82
|
|
|
85
83
|
.alert-info {
|
|
86
84
|
border: 1px solid #fbeed5;
|
|
87
|
-
text-align: center;
|
|
88
85
|
padding: 8px 15px;
|
|
89
86
|
background-color: #d9edf7;
|
|
90
87
|
border-color: #bce8f1;
|
|
91
88
|
color: #3a87ad;
|
|
92
89
|
font-size: 1em;
|
|
93
|
-
margin-bottom: 20px;
|
|
94
90
|
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
|
|
95
91
|
border-radius: 4px;
|
|
96
92
|
margin: 0px 35px;
|
|
93
|
+
display: flex;
|
|
94
|
+
justify-content: center;
|
|
95
|
+
align-items: center;
|
|
96
|
+
}
|
|
97
|
+
.alert-info svg {
|
|
98
|
+
margin-right: 4px;
|
|
97
99
|
}
|
|
98
100
|
|
|
99
101
|
.event-detail__tier-state {
|
|
@@ -16,6 +16,7 @@ import './style.css'
|
|
|
16
16
|
interface WaitingListProps {
|
|
17
17
|
tickets: any;
|
|
18
18
|
eventId: number;
|
|
19
|
+
isPromotionsEnabled: boolean;
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
interface WaitingListFields {
|
|
@@ -34,7 +35,7 @@ const generateQuantity = (n: number) => {
|
|
|
34
35
|
return quantityList
|
|
35
36
|
}
|
|
36
37
|
|
|
37
|
-
const WaitingList = ({ tickets = {}, eventId }: WaitingListProps) => {
|
|
38
|
+
const WaitingList = ({ tickets = {}, eventId, isPromotionsEnabled }: WaitingListProps) => {
|
|
38
39
|
const [showSuccessMessage, setShowSuccessMessage] = useState(false)
|
|
39
40
|
const [loading, setLoading] = useState(false)
|
|
40
41
|
const ticketTypesList = Object.values(tickets).map((d: any) => ({
|
|
@@ -72,9 +73,11 @@ const WaitingList = ({ tickets = {}, eventId }: WaitingListProps) => {
|
|
|
72
73
|
</div>
|
|
73
74
|
) : (
|
|
74
75
|
<>
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
76
|
+
{!isPromotionsEnabled && (
|
|
77
|
+
<p className="no-tickets-text">
|
|
78
|
+
No tickets are currently available for this event.
|
|
79
|
+
</p>
|
|
80
|
+
)}
|
|
78
81
|
<h2>WAITING LIST</h2>
|
|
79
82
|
<Formik
|
|
80
83
|
initialValues={{
|
package/src/env.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// preview
|
|
2
|
-
export const
|
|
2
|
+
export const ENV = {
|
|
3
3
|
EVENT_ID: 162,
|
|
4
|
-
BASE_URL: 'https://preview.ttf.fluxtech.me
|
|
4
|
+
BASE_URL: 'https://preview.ttf.fluxtech.me',
|
|
5
5
|
CLIENT_ID: '4792a61f2fcb49197ab4c2d2f44df570',
|
|
6
6
|
CLIENT_SECRET: 'b89c191eff22fdcf84ac9bfd88d005355a151ec2c83b26b9',
|
|
7
7
|
STRIPE_PUBLISHABLE_KEY:
|
|
@@ -9,9 +9,9 @@ export const ENV_TEST = {
|
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
// prod
|
|
12
|
-
export const
|
|
12
|
+
export const ENV_PROD = {
|
|
13
13
|
EVENT_ID: 9766,
|
|
14
|
-
BASE_URL: 'https://www.ticketfairy.com
|
|
14
|
+
BASE_URL: 'https://www.ticketfairy.com',
|
|
15
15
|
CLIENT_ID: 'e9d8f8922797b4621e562255afe90dbf',
|
|
16
16
|
CLIENT_SECRET: 'b89c191eff22fdcf84ac9bfd88d005355a151ec2c83b26b9',
|
|
17
17
|
STRIPE_PUBLISHABLE_KEY:
|
package/src/utils/setConfigs.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import _forEach from 'lodash/forEach'
|
|
2
|
-
import { publicRequest } from '../api'
|
|
2
|
+
import { publicRequest, setXSourceOrigin } from '../api'
|
|
3
3
|
|
|
4
4
|
interface IConfigs {
|
|
5
5
|
BASE_URL: string;
|
|
6
6
|
CLIENT_ID: string;
|
|
7
7
|
CLIENT_SECRET: string;
|
|
8
8
|
STRIPE_PUBLISHABLE_KEY: string;
|
|
9
|
+
X_SOURCE_ORIGIN: string;
|
|
9
10
|
|
|
10
|
-
[key: string]: string;
|
|
11
|
+
[key: string]: string | number;
|
|
11
12
|
}
|
|
12
13
|
|
|
13
14
|
export const CONFIGS: IConfigs = {} as IConfigs
|
|
@@ -18,4 +19,8 @@ export const setConfigs = (configs: IConfigs) => {
|
|
|
18
19
|
})
|
|
19
20
|
|
|
20
21
|
publicRequest.setBaseUrl(CONFIGS.BASE_URL)
|
|
22
|
+
|
|
23
|
+
if (CONFIGS.X_SOURCE_ORIGIN) {
|
|
24
|
+
setXSourceOrigin(CONFIGS.X_SOURCE_ORIGIN)
|
|
25
|
+
}
|
|
21
26
|
}
|