tf-checkout-react 1.0.42 → 1.0.46
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 +22 -3
- package/dist/components/billing-info-container/utils.d.ts +2 -2
- package/dist/components/common/CheckboxField.d.ts +2 -2
- package/dist/components/confirmationContainer/index.d.ts +4 -1
- package/dist/components/loginModal/index.d.ts +8 -4
- package/dist/components/paymentContainer/index.d.ts +5 -1
- package/dist/components/registerModal/index.d.ts +3 -0
- package/dist/components/ticketsContainer/TicketRow.d.ts +10 -0
- package/dist/components/ticketsContainer/TicketsSection.d.ts +10 -0
- package/dist/components/ticketsContainer/index.d.ts +6 -1
- package/dist/components/ticketsContainer/utils.d.ts +4 -0
- package/dist/components/waitingList/index.d.ts +7 -0
- package/dist/index.d.ts +1 -0
- package/dist/tf-checkout-react.cjs.development.css +3 -2
- package/dist/tf-checkout-react.cjs.development.js +688 -203
- 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 +693 -206
- package/dist/tf-checkout-react.esm.js.map +1 -1
- package/dist/types/billing-info-data.d.ts +2 -1
- package/dist/validators/index.d.ts +2 -1
- package/package.json +3 -1
- package/src/.DS_Store +0 -0
- package/src/api/index.ts +5 -3
- package/src/components/.DS_Store +0 -0
- package/src/components/billing-info-container/index.tsx +239 -63
- package/src/components/billing-info-container/style.css +15 -0
- package/src/components/billing-info-container/utils.ts +41 -13
- package/src/components/common/CheckboxField.tsx +3 -2
- package/src/components/common/CustomField.tsx +16 -1
- package/src/components/confirmationContainer/index.tsx +8 -3
- package/src/components/loginModal/index.tsx +46 -13
- package/src/components/paymentContainer/index.tsx +10 -0
- package/src/components/registerModal/index.tsx +20 -3
- package/src/components/ticketsContainer/TicketRow.tsx +86 -0
- package/src/components/ticketsContainer/TicketsSection.tsx +82 -0
- package/src/components/ticketsContainer/index.tsx +96 -210
- package/src/components/ticketsContainer/utils.ts +11 -0
- package/src/components/waitingList/index.tsx +162 -0
- package/src/components/waitingList/style.css +18 -0
- package/src/index.ts +2 -1
- package/src/types/billing-info-data.ts +2 -1
- package/src/validators/index.ts +9 -3
|
@@ -6,7 +6,7 @@ export interface IGroupItem {
|
|
|
6
6
|
className?: string;
|
|
7
7
|
required?: boolean;
|
|
8
8
|
component?: ReactNode | JSX.Element | HTMLElement;
|
|
9
|
-
onValidate
|
|
9
|
+
onValidate?: (value: any) => void;
|
|
10
10
|
[key: string]: any;
|
|
11
11
|
}
|
|
12
12
|
export interface IFieldData {
|
|
@@ -14,6 +14,7 @@ export interface IFieldData {
|
|
|
14
14
|
groupClassname?: string;
|
|
15
15
|
groupLabel?: string | JSX.Element | HTMLElement;
|
|
16
16
|
groupLabelClassName?: string;
|
|
17
|
+
id: number;
|
|
17
18
|
}
|
|
18
19
|
export interface IBillingInfoData {
|
|
19
20
|
id: number | string;
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
export declare const combineValidators: (...validators: any) => (...value: any) => any;
|
|
2
|
-
export declare const requiredValidator: (value?: string | number | undefined) => string;
|
|
2
|
+
export declare const requiredValidator: (value?: string | number | undefined, message?: string | undefined) => string;
|
|
3
|
+
export declare const emailValidator: (email: string) => "" | "Please enter a valid email address";
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.0.
|
|
2
|
+
"version": "1.0.46",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"typings": "dist/index.d.ts",
|
|
@@ -66,7 +66,9 @@
|
|
|
66
66
|
"dependencies": {
|
|
67
67
|
"@emotion/react": "^11.5.0",
|
|
68
68
|
"@emotion/styled": "^11.3.0",
|
|
69
|
+
"@mui/lab": "^5.0.0-alpha.55",
|
|
69
70
|
"@mui/material": "5.1.0",
|
|
71
|
+
"@mui/styles": "^5.1.1",
|
|
70
72
|
"@stripe/react-stripe-js": "^1.6.0",
|
|
71
73
|
"@stripe/stripe-js": "^1.21.1",
|
|
72
74
|
"autoprefixer": "^10.4.0",
|
package/src/.DS_Store
ADDED
|
Binary file
|
package/src/api/index.ts
CHANGED
|
@@ -19,7 +19,7 @@ if (
|
|
|
19
19
|
window.location.origin !== 'https://www.houseofx.nyc' &&
|
|
20
20
|
window.location.origin !== 'https://tickets-staging.houseofx.nyc'
|
|
21
21
|
) {
|
|
22
|
-
|
|
22
|
+
ttfHeaders['X-Source-Origin'] = 'houseofx.nyc'
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
interface IPublicRequest extends AxiosInstance {
|
|
@@ -78,7 +78,7 @@ publicRequest.interceptors.request.use((config: AxiosRequestConfig) => {
|
|
|
78
78
|
) {
|
|
79
79
|
const updatedHeaders = {
|
|
80
80
|
...config.headers,
|
|
81
|
-
|
|
81
|
+
'X-Source-Origin': 'houseofx.nyc',
|
|
82
82
|
}
|
|
83
83
|
config.headers = updatedHeaders
|
|
84
84
|
}
|
|
@@ -215,4 +215,6 @@ export const getCountries = () => publicRequest.get('/countries/')
|
|
|
215
215
|
|
|
216
216
|
export const getConfirmationData = (orderHash: string) => publicRequest.get(`/v1/order/${orderHash}/payment/complete`)
|
|
217
217
|
|
|
218
|
-
export const getStates = (countryId: string) => publicRequest.get(`/countries/${countryId}/states/`)
|
|
218
|
+
export const getStates = (countryId: string) => publicRequest.get(`/countries/${countryId}/states/`)
|
|
219
|
+
|
|
220
|
+
export const addToWaitingList = (id: number, data: any) => publicRequest.post(`/v1/event/${id}/add_to_waiting_list`, data)
|
|
Binary file
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React, { FC, useEffect, useState } from 'react'
|
|
2
|
+
import { AxiosError } from 'axios'
|
|
2
3
|
import {
|
|
3
4
|
Field,
|
|
4
5
|
Form,
|
|
@@ -7,7 +8,7 @@ import {
|
|
|
7
8
|
FormikProps,
|
|
8
9
|
FormikValues,
|
|
9
10
|
} from 'formik'
|
|
10
|
-
import
|
|
11
|
+
import LoadingButton from '@mui/lab/LoadingButton'
|
|
11
12
|
import _identity from 'lodash/identity'
|
|
12
13
|
import _map from 'lodash/map'
|
|
13
14
|
import _get from 'lodash/get'
|
|
@@ -37,6 +38,7 @@ import {
|
|
|
37
38
|
import { CustomField } from '../common/CustomField'
|
|
38
39
|
import axios from 'axios'
|
|
39
40
|
import { CheckboxField } from '../common/CheckboxField'
|
|
41
|
+
import { CircularProgress } from '@mui/material'
|
|
40
42
|
|
|
41
43
|
// const TTFLOGO = require('./logo-ttf.png')
|
|
42
44
|
|
|
@@ -55,13 +57,45 @@ const getQueryVariable = (variable: string) => {
|
|
|
55
57
|
}
|
|
56
58
|
|
|
57
59
|
export interface IBillingInfoPage {
|
|
58
|
-
data
|
|
59
|
-
|
|
60
|
+
data?: IBillingInfoData[];
|
|
61
|
+
ticketHoldersFields?: IBillingInfoData;
|
|
62
|
+
handleSubmit?: (
|
|
60
63
|
values: FormikValues,
|
|
61
64
|
formikHelpers: FormikHelpers<FormikValues>,
|
|
62
65
|
res?: any
|
|
63
66
|
) => void;
|
|
64
67
|
|
|
68
|
+
onRegisterSuccess?: (value: {
|
|
69
|
+
accessToken: string;
|
|
70
|
+
refreshToken: string;
|
|
71
|
+
}) => void;
|
|
72
|
+
|
|
73
|
+
onRegisterError?: (e: AxiosError) => void;
|
|
74
|
+
|
|
75
|
+
onSubmitError?: (e: AxiosError) => void;
|
|
76
|
+
|
|
77
|
+
onGetCartSuccess?: (res: any) => void;
|
|
78
|
+
|
|
79
|
+
onGetCartError?: (e: AxiosError) => void;
|
|
80
|
+
|
|
81
|
+
onGetCountriesSuccess?: (res: any) => void;
|
|
82
|
+
|
|
83
|
+
onGetCountriesError?: (e: AxiosError) => void;
|
|
84
|
+
|
|
85
|
+
onGetStatesSuccess?: (res: any) => void;
|
|
86
|
+
|
|
87
|
+
onGetStatesError?: (e: AxiosError) => void;
|
|
88
|
+
|
|
89
|
+
onGetProfileDataSuccess?: (res: any) => void;
|
|
90
|
+
|
|
91
|
+
onGetProfileDataError?: (e: AxiosError) => void;
|
|
92
|
+
|
|
93
|
+
onAuthorizeSuccess?: () => void;
|
|
94
|
+
|
|
95
|
+
onAuthorizeError?: (e: AxiosError) => void;
|
|
96
|
+
|
|
97
|
+
onLogin?: () => void;
|
|
98
|
+
|
|
65
99
|
initialValues?: FormikValues;
|
|
66
100
|
buttonName?: string;
|
|
67
101
|
theme?: 'light' | 'dark';
|
|
@@ -73,7 +107,17 @@ const LogicRunner: FC<{
|
|
|
73
107
|
setFieldValue: any;
|
|
74
108
|
setValues: any;
|
|
75
109
|
setUserValues: any;
|
|
76
|
-
|
|
110
|
+
onGetStatesSuccess: any;
|
|
111
|
+
onGetStatesError: any;
|
|
112
|
+
}> = ({
|
|
113
|
+
values,
|
|
114
|
+
setStates,
|
|
115
|
+
setFieldValue,
|
|
116
|
+
setValues,
|
|
117
|
+
setUserValues,
|
|
118
|
+
onGetStatesSuccess,
|
|
119
|
+
onGetStatesError,
|
|
120
|
+
}) => {
|
|
77
121
|
useEffect(() => {
|
|
78
122
|
const fetchStates = async () => {
|
|
79
123
|
try {
|
|
@@ -84,7 +128,12 @@ const LogicRunner: FC<{
|
|
|
84
128
|
}))
|
|
85
129
|
setStates(mappedStates)
|
|
86
130
|
setFieldValue('state', mappedStates[0]?.label ?? '')
|
|
87
|
-
|
|
131
|
+
onGetStatesSuccess(res.data)
|
|
132
|
+
} catch (e) {
|
|
133
|
+
if (axios.isAxiosError(e)) {
|
|
134
|
+
onGetStatesError(e)
|
|
135
|
+
}
|
|
136
|
+
}
|
|
88
137
|
}
|
|
89
138
|
fetchStates()
|
|
90
139
|
}, [values.country, setStates, setFieldValue])
|
|
@@ -105,9 +154,6 @@ const LogicRunner: FC<{
|
|
|
105
154
|
email: parsedData?.email || '',
|
|
106
155
|
phone: parsedData?.phone || '',
|
|
107
156
|
confirmEmail: '',
|
|
108
|
-
holderFirstName: '',
|
|
109
|
-
holderLastName: '',
|
|
110
|
-
holderAge: '',
|
|
111
157
|
state: parsedData?.state || '',
|
|
112
158
|
street_address: parsedData?.street_address || '',
|
|
113
159
|
country: parsedData?.country || 1,
|
|
@@ -119,9 +165,7 @@ const LogicRunner: FC<{
|
|
|
119
165
|
}
|
|
120
166
|
setValues(mappedValues)
|
|
121
167
|
setUserValues(mappedValues)
|
|
122
|
-
} catch (e) {
|
|
123
|
-
console.log(e)
|
|
124
|
-
}
|
|
168
|
+
} catch (e) {}
|
|
125
169
|
}
|
|
126
170
|
}
|
|
127
171
|
}
|
|
@@ -135,10 +179,28 @@ const SectionContainer: FC = ({ children }) => <>{children}</>
|
|
|
135
179
|
|
|
136
180
|
export const BillingInfoContainer = ({
|
|
137
181
|
data = [],
|
|
182
|
+
ticketHoldersFields = {
|
|
183
|
+
id: 1,
|
|
184
|
+
fields: [],
|
|
185
|
+
},
|
|
138
186
|
initialValues = {},
|
|
139
187
|
buttonName = 'Submit',
|
|
140
188
|
handleSubmit = _identity,
|
|
141
189
|
theme = 'light',
|
|
190
|
+
onRegisterSuccess = () => {},
|
|
191
|
+
onRegisterError = () => {},
|
|
192
|
+
onSubmitError = () => {},
|
|
193
|
+
onGetCartSuccess = () => {},
|
|
194
|
+
onGetCartError = () => {},
|
|
195
|
+
onGetCountriesSuccess = () => {},
|
|
196
|
+
onGetCountriesError = () => {},
|
|
197
|
+
onGetStatesSuccess = () => {},
|
|
198
|
+
onGetStatesError = () => {},
|
|
199
|
+
onGetProfileDataSuccess = () => {},
|
|
200
|
+
onGetProfileDataError = () => {},
|
|
201
|
+
onAuthorizeSuccess = () => {},
|
|
202
|
+
onAuthorizeError = () => {},
|
|
203
|
+
onLogin = () => {},
|
|
142
204
|
}: IBillingInfoPage) => {
|
|
143
205
|
const userData =
|
|
144
206
|
typeof window !== 'undefined' && window.localStorage.getItem('user_data')
|
|
@@ -156,6 +218,7 @@ export const BillingInfoContainer = ({
|
|
|
156
218
|
const [alreadyHasUser, setAlreadyHasUser] = useState(false)
|
|
157
219
|
const [userExpired, setUserExpired] = useState(false)
|
|
158
220
|
const [showModalRegister, setShowModalRegister] = useState(false)
|
|
221
|
+
const [ticketsQuantity, setTicketsQuantity] = useState(1)
|
|
159
222
|
const [userValues, setUserValues] = useState<any>({
|
|
160
223
|
firstName: '',
|
|
161
224
|
lastName: '',
|
|
@@ -183,13 +246,28 @@ export const BillingInfoContainer = ({
|
|
|
183
246
|
const showTicketHolderName = getQueryVariable('names_required') === 'true'
|
|
184
247
|
const optedInFieldValue: boolean = _get(cartInfoData, 'optedIn', false)
|
|
185
248
|
|
|
249
|
+
const getQuantity = (cart: any = []) => {
|
|
250
|
+
let qty: any = 0
|
|
251
|
+
cart.forEach((item: any) => {
|
|
252
|
+
qty += +item.quantity
|
|
253
|
+
})
|
|
254
|
+
return qty
|
|
255
|
+
}
|
|
186
256
|
// fetch cart data
|
|
187
257
|
const fetchCart = async () => {
|
|
188
258
|
try {
|
|
189
259
|
const res = await getCart()
|
|
190
260
|
setCustomHeader(res)
|
|
191
|
-
|
|
192
|
-
|
|
261
|
+
const cartInfo = _get(res, 'data.data.attributes')
|
|
262
|
+
setCartInfo(cartInfo)
|
|
263
|
+
const { cart = [] } = cartInfo
|
|
264
|
+
setTicketsQuantity(getQuantity(cart))
|
|
265
|
+
onGetCartSuccess(res.data)
|
|
266
|
+
} catch (e) {
|
|
267
|
+
if (axios.isAxiosError(e)) {
|
|
268
|
+
onGetCartError(e)
|
|
269
|
+
}
|
|
270
|
+
}
|
|
193
271
|
}
|
|
194
272
|
|
|
195
273
|
// fetch user data
|
|
@@ -204,8 +282,13 @@ export const BillingInfoContainer = ({
|
|
|
204
282
|
'user_data',
|
|
205
283
|
JSON.stringify(profileDataObj)
|
|
206
284
|
)
|
|
285
|
+
onGetProfileDataSuccess(userDataResponse.data)
|
|
207
286
|
}
|
|
208
|
-
} catch (e) {
|
|
287
|
+
} catch (e) {
|
|
288
|
+
if (axios.isAxiosError(e)) {
|
|
289
|
+
onGetProfileDataError(e)
|
|
290
|
+
}
|
|
291
|
+
}
|
|
209
292
|
}
|
|
210
293
|
|
|
211
294
|
useEffect(() => {
|
|
@@ -214,14 +297,21 @@ export const BillingInfoContainer = ({
|
|
|
214
297
|
|
|
215
298
|
// fetch countries data
|
|
216
299
|
const fetchCountries = async () => {
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
300
|
+
try {
|
|
301
|
+
const res = await getCountries()
|
|
302
|
+
setCustomHeader(res)
|
|
303
|
+
setCountries(
|
|
304
|
+
_map(_get(res, 'data.data'), (item, key) => ({
|
|
305
|
+
label: item,
|
|
306
|
+
value: Number(key),
|
|
307
|
+
}))
|
|
308
|
+
)
|
|
309
|
+
onGetCountriesSuccess(res.data)
|
|
310
|
+
} catch (e) {
|
|
311
|
+
if (axios.isAxiosError(e)) {
|
|
312
|
+
onGetCountriesError(e)
|
|
313
|
+
}
|
|
314
|
+
}
|
|
225
315
|
}
|
|
226
316
|
|
|
227
317
|
if (!(countries && countries.length)) {
|
|
@@ -232,14 +322,18 @@ export const BillingInfoContainer = ({
|
|
|
232
322
|
return (
|
|
233
323
|
<>
|
|
234
324
|
<Formik
|
|
235
|
-
initialValues={getInitialValues(
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
325
|
+
initialValues={getInitialValues(
|
|
326
|
+
data,
|
|
327
|
+
{
|
|
328
|
+
...initialValues,
|
|
329
|
+
email: emailLogged,
|
|
330
|
+
firstName: firstNameLogged,
|
|
331
|
+
lastName: lastNameLogged,
|
|
332
|
+
country: 1,
|
|
333
|
+
brand_opt_in: optedInFieldValue,
|
|
334
|
+
},
|
|
335
|
+
userValues
|
|
336
|
+
)}
|
|
243
337
|
enableReinitialize={true}
|
|
244
338
|
onSubmit={async (values, formikHelpers) => {
|
|
245
339
|
try {
|
|
@@ -256,6 +350,7 @@ export const BillingInfoContainer = ({
|
|
|
256
350
|
}
|
|
257
351
|
}
|
|
258
352
|
const checkoutBody = createCheckoutDataBody(
|
|
353
|
+
ticketsQuantity,
|
|
259
354
|
values,
|
|
260
355
|
{ emailLogged, firstNameLogged, lastNameLogged },
|
|
261
356
|
showDOB
|
|
@@ -266,12 +361,50 @@ export const BillingInfoContainer = ({
|
|
|
266
361
|
}
|
|
267
362
|
|
|
268
363
|
const bodyFormData = createRegisterFormData(values)
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
364
|
+
|
|
365
|
+
let access_token_register = null
|
|
366
|
+
try {
|
|
367
|
+
const resRegister = await register(bodyFormData)
|
|
368
|
+
access_token_register = _get(
|
|
369
|
+
resRegister,
|
|
370
|
+
'data.data.attributes.access_token'
|
|
371
|
+
)
|
|
372
|
+
const refreshToken = _get(
|
|
373
|
+
resRegister,
|
|
374
|
+
'data.data.attributes.refresh_token'
|
|
375
|
+
)
|
|
376
|
+
handleSetAccessToken(access_token_register)
|
|
377
|
+
|
|
378
|
+
const tokens = {
|
|
379
|
+
accessToken: access_token_register,
|
|
380
|
+
refreshToken,
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
onRegisterSuccess(tokens)
|
|
384
|
+
} catch (e) {
|
|
385
|
+
if (axios.isAxiosError(e)) {
|
|
386
|
+
const error = e?.response?.data?.message
|
|
387
|
+
if (_includes(error, 'You must be aged')) {
|
|
388
|
+
formikHelpers.setFieldError('holderAge', error)
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
if (error?.password) {
|
|
392
|
+
formikHelpers.setFieldError('password', error.password)
|
|
393
|
+
formikHelpers.setFieldError(
|
|
394
|
+
'confirmPassword',
|
|
395
|
+
error.password
|
|
396
|
+
)
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
if (error?.email) {
|
|
400
|
+
setAlreadyHasUser(true)
|
|
401
|
+
setShowModalLogin(true)
|
|
402
|
+
}
|
|
403
|
+
onRegisterError(e)
|
|
404
|
+
}
|
|
405
|
+
return
|
|
406
|
+
}
|
|
407
|
+
|
|
275
408
|
const profileData = await getProfileData(access_token_register)
|
|
276
409
|
const profileSpecifiedData = _get(profileData, 'data.data')
|
|
277
410
|
const profileDataObj = setLoggedUserData(profileSpecifiedData)
|
|
@@ -283,6 +416,7 @@ export const BillingInfoContainer = ({
|
|
|
283
416
|
}
|
|
284
417
|
|
|
285
418
|
const checkoutBody = createCheckoutDataBody(
|
|
419
|
+
ticketsQuantity,
|
|
286
420
|
values,
|
|
287
421
|
{ emailLogged, firstNameLogged, lastNameLogged },
|
|
288
422
|
showDOB
|
|
@@ -294,20 +428,6 @@ export const BillingInfoContainer = ({
|
|
|
294
428
|
handleSubmit(values, formikHelpers as FormikHelpers<any>, res)
|
|
295
429
|
} catch (e) {
|
|
296
430
|
if (axios.isAxiosError(e)) {
|
|
297
|
-
const error = e?.response?.data?.message
|
|
298
|
-
if (_includes(error, 'You must be aged')) {
|
|
299
|
-
formikHelpers.setFieldError('holderAge', error)
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
if (error?.password) {
|
|
303
|
-
formikHelpers.setFieldError('password', error.password)
|
|
304
|
-
formikHelpers.setFieldError('confirmPassword', error.password)
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
if (error?.email) {
|
|
308
|
-
setAlreadyHasUser(true)
|
|
309
|
-
setShowModalLogin(true)
|
|
310
|
-
}
|
|
311
431
|
if (e.response?.data.error === 'invalid_token') {
|
|
312
432
|
if (typeof window !== 'undefined') {
|
|
313
433
|
window.localStorage.removeItem('user_data')
|
|
@@ -316,6 +436,7 @@ export const BillingInfoContainer = ({
|
|
|
316
436
|
setShowModalLogin(true)
|
|
317
437
|
}
|
|
318
438
|
}
|
|
439
|
+
onSubmitError(e)
|
|
319
440
|
}
|
|
320
441
|
}
|
|
321
442
|
}}
|
|
@@ -328,6 +449,8 @@ export const BillingInfoContainer = ({
|
|
|
328
449
|
setFieldValue={props.setFieldValue}
|
|
329
450
|
setValues={props.setValues}
|
|
330
451
|
setUserValues={setUserValues}
|
|
452
|
+
onGetStatesSuccess={onGetStatesSuccess}
|
|
453
|
+
onGetStatesError={onGetStatesError}
|
|
331
454
|
/>
|
|
332
455
|
<div className={`billing-info-container ${theme}`}>
|
|
333
456
|
{!isLoggedIn && (
|
|
@@ -341,6 +464,7 @@ export const BillingInfoContainer = ({
|
|
|
341
464
|
className="login-register-button"
|
|
342
465
|
type="button"
|
|
343
466
|
onClick={() => {
|
|
467
|
+
onLogin()
|
|
344
468
|
setShowModalLogin(true)
|
|
345
469
|
}}
|
|
346
470
|
>
|
|
@@ -364,7 +488,7 @@ export const BillingInfoContainer = ({
|
|
|
364
488
|
return (
|
|
365
489
|
<SectionContainer key={id}>
|
|
366
490
|
<p className={labelClassName}>{label}</p>
|
|
367
|
-
{_map(fields,
|
|
491
|
+
{_map(fields, group => {
|
|
368
492
|
const {
|
|
369
493
|
groupClassname,
|
|
370
494
|
groupItems,
|
|
@@ -372,7 +496,7 @@ export const BillingInfoContainer = ({
|
|
|
372
496
|
groupLabelClassName,
|
|
373
497
|
} = group
|
|
374
498
|
return (
|
|
375
|
-
<
|
|
499
|
+
<SectionContainer key={group.id}>
|
|
376
500
|
{!isLoggedIn && (
|
|
377
501
|
<div className={groupLabelClassName}>
|
|
378
502
|
{groupLabel}
|
|
@@ -439,26 +563,72 @@ export const BillingInfoContainer = ({
|
|
|
439
563
|
)
|
|
440
564
|
)}
|
|
441
565
|
</div>
|
|
442
|
-
</
|
|
566
|
+
</SectionContainer>
|
|
443
567
|
)
|
|
444
568
|
})}
|
|
445
569
|
</SectionContainer>
|
|
446
570
|
)
|
|
447
571
|
})}
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
572
|
+
|
|
573
|
+
{showTicketHolderName && (
|
|
574
|
+
<div>
|
|
575
|
+
<p>{ticketHoldersFields.label}</p>
|
|
576
|
+
{_map(new Array(ticketsQuantity), (_item, index) => (
|
|
577
|
+
<div key={index}>
|
|
578
|
+
<h5>Ticket {index + 1}</h5>
|
|
579
|
+
{_map(ticketHoldersFields.fields, group => {
|
|
580
|
+
const { groupClassname, groupItems } = group
|
|
581
|
+
return (
|
|
582
|
+
<div key={group.id}>
|
|
583
|
+
<div className={groupClassname}>
|
|
584
|
+
{_map(groupItems, element => (
|
|
585
|
+
<div
|
|
586
|
+
className={element.className}
|
|
587
|
+
key={`${element.name}-${index}`}
|
|
588
|
+
>
|
|
589
|
+
<Field
|
|
590
|
+
name={`${element.name}-${index}`}
|
|
591
|
+
key={`${element.name}-${index}`}
|
|
592
|
+
label={element.label}
|
|
593
|
+
type={element.type}
|
|
594
|
+
required={true}
|
|
595
|
+
component={
|
|
596
|
+
element.type === 'checkbox'
|
|
597
|
+
? CheckboxField
|
|
598
|
+
: CustomField
|
|
599
|
+
}
|
|
600
|
+
validate={combineValidators(
|
|
601
|
+
element.required
|
|
602
|
+
? requiredValidator
|
|
603
|
+
: () => {},
|
|
604
|
+
element.onValidate
|
|
605
|
+
? element.onValidate
|
|
606
|
+
: () => {}
|
|
607
|
+
)}
|
|
608
|
+
/>
|
|
609
|
+
</div>
|
|
610
|
+
))}
|
|
611
|
+
</div>
|
|
612
|
+
</div>
|
|
613
|
+
)
|
|
614
|
+
})}
|
|
615
|
+
</div>
|
|
616
|
+
))}
|
|
617
|
+
</div>
|
|
618
|
+
)}
|
|
619
|
+
<div className="button-container">
|
|
620
|
+
<LoadingButton
|
|
456
621
|
type="submit"
|
|
457
622
|
variant="contained"
|
|
458
623
|
className="login-register-button"
|
|
624
|
+
loadingIndicator={
|
|
625
|
+
<CircularProgress color="inherit" size={26} />
|
|
626
|
+
}
|
|
627
|
+
loading={props.isSubmitting}
|
|
628
|
+
disabled={props.isSubmitting}
|
|
459
629
|
>
|
|
460
630
|
{buttonName}
|
|
461
|
-
</
|
|
631
|
+
</LoadingButton>
|
|
462
632
|
</div>
|
|
463
633
|
</div>
|
|
464
634
|
</Form>
|
|
@@ -471,10 +641,14 @@ export const BillingInfoContainer = ({
|
|
|
471
641
|
}}
|
|
472
642
|
onLogin={() => {
|
|
473
643
|
setShowModalLogin(false)
|
|
644
|
+
setUserExpired(false)
|
|
474
645
|
}}
|
|
475
646
|
alreadyHasUser={alreadyHasUser}
|
|
476
647
|
userExpired={userExpired}
|
|
477
|
-
|
|
648
|
+
onAuthorizeSuccess={onAuthorizeSuccess}
|
|
649
|
+
onAuthorizeError={onAuthorizeError}
|
|
650
|
+
onGetProfileDataSuccess={onGetProfileDataSuccess}
|
|
651
|
+
onGetProfileDataError={onGetProfileDataError}
|
|
478
652
|
/>
|
|
479
653
|
)}
|
|
480
654
|
{showModalRegister && (
|
|
@@ -485,6 +659,8 @@ export const BillingInfoContainer = ({
|
|
|
485
659
|
onRegister={() => {
|
|
486
660
|
setShowModalRegister(false)
|
|
487
661
|
}}
|
|
662
|
+
onGetProfileDataSuccess={onGetProfileDataSuccess}
|
|
663
|
+
onGetProfileDataError={onGetProfileDataError}
|
|
488
664
|
/>
|
|
489
665
|
)}
|
|
490
666
|
</>
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
.button-container {
|
|
2
|
+
display: flex;
|
|
3
|
+
padding: 20px;
|
|
4
|
+
justify-content: center;
|
|
5
|
+
}
|
|
6
|
+
|
|
1
7
|
.billing-info-container {
|
|
2
8
|
max-width: 800px;
|
|
3
9
|
margin: 0 auto;
|
|
@@ -84,4 +90,13 @@ button {
|
|
|
84
90
|
.login-register-block {
|
|
85
91
|
display: flex;
|
|
86
92
|
justify-content: space-between;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
@media only screen and (max-width: 820px) {
|
|
96
|
+
.billing-info-container {
|
|
97
|
+
width: 90%;
|
|
98
|
+
}
|
|
99
|
+
.billing-info-container .main-header {
|
|
100
|
+
font-size: 1.5rem;
|
|
101
|
+
}
|
|
87
102
|
}
|