tf-checkout-react 1.7.7 → 1.7.8
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/constants/index.d.ts +1 -0
- package/dist/tf-checkout-react.cjs.development.js +41 -16
- 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 +41 -16
- package/dist/tf-checkout-react.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/components/paymentContainer/OrderDetails.tsx +20 -0
- package/src/components/paymentContainer/index.tsx +12 -0
- package/src/components/ticketsContainer/TicketsSection.tsx +52 -10
- package/src/components/ticketsContainer/TimeSlotTicketRow.tsx +24 -5
- package/src/constants/index.ts +1 -1
- package/src/types/api/common.d.ts +3 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tf-checkout-react.cjs.production.min.js","sources":["../src/api/publicRequest.ts","../src/constants/index.ts","../src/utils/cookies.ts","../src/utils/setConfigs.ts","../src/utils/getQueryVariable.ts","../src/utils/formikErrorFocus.ts","../src/utils/getDomain.ts","../src/utils/downloadPDF.tsx","../src/utils/createCheckoutDataBodyWithDefaultHolder.ts","../src/utils/createMarkup.ts","../src/utils/replaceVarInString.ts","../src/utils/isBrowser.ts","../src/utils/form.ts","../src/utils/auth.ts","../src/utils/customFields.ts","../src/utils/jsonUtils.ts","../src/api/interceptors.ts","../src/adapters/customFields.ts","../src/api/auth.ts","../src/api/orders.ts","../src/api/cart.ts","../src/api/checkout.ts","../src/api/common.ts","../src/api/payment.ts","../src/api/resale.ts","../src/api/guestTicketDelegation.ts","../src/api/index.ts","../src/hoc/CustomFields/index.tsx","../src/hooks/usePixel.ts","../src/validators/index.ts","../src/normalizers/index.ts","../src/components/common/ModalComponent/index.tsx","../src/components/idVerificationContainer/VerificationPendingModal.tsx","../src/components/ticketsContainer/InfoIcon.tsx","../src/utils/showZero.tsx","../src/components/timerWidget/index.tsx","../src/components/addonsContainer/adapters/index.tsx","../src/components/common/CheckboxField/index.tsx","../src/components/common/Checkbox.tsx","../src/components/common/CustomField.tsx","../src/components/common/PhoneNumberField.tsx","../src/components/common/Loader.tsx","../src/components/common/SelectField/index.tsx","../src/components/common/CopyMessageModal.tsx","../src/components/common/DatePickerField.tsx","../src/components/common/NativeSelectFeild/index.tsx","../src/components/common/RadioGroupField/index.tsx","../src/components/billing-info-container/utils.tsx","../src/components/addonsContainer/AddonComponent.tsx","../src/components/addonsContainer/normalizers/index.ts","../src/components/addonsContainer/utils/index.tsx","../src/components/addonsContainer/index.tsx","../src/components/addonsContainer/SimpleAddonsContainer.tsx","../src/components/common/SnackbarAlert.tsx","../src/components/common/PoweredBy.tsx","../src/components/forgotPasswordModal/index.tsx","../src/components/loginModal/SignUpForm.tsx","../src/components/loginModal/index.tsx","../src/components/loginModal/constants.ts","../src/components/paymentContainer/handlePayment.ts","../src/components/paymentContainer/PaymentPlanSection.tsx","../src/components/paymentContainer/index.tsx","../src/components/signupModal/index.tsx","../src/components/billing-info-container/index.tsx","../src/components/billing-info-container/hooks/usePaymentRedirect.ts","../src/components/billing-info-container/hooks/useStripePayment.ts","../src/utils/getImage.ts","../src/components/common/socials.tsx","../src/components/confirmationContainer/config.ts","../src/components/confirmationContainer/social-buttons.tsx","../src/utils/isValidNumber.ts","../src/api/preRegistrationComplete.ts","../src/hooks/useCookieListener.ts","../src/components/confirmModal/index.tsx","../src/components/countdown/index.tsx","../src/components/preRegistration/constants.tsx","../src/components/preRegistration/utils.ts","../src/components/preRegistration/FieldsSection.tsx","../src/components/preRegistration/Prewards.tsx","../src/components/common/CopyField.tsx","../src/components/preRegistration/ShareOptions.tsx","../src/components/preRegistration/PreRegistrationComplete.tsx","../src/components/preRegistration/index.tsx","../src/components/waitingList/index.tsx","../src/components/ticketsContainer/AccessCodeSection.tsx","../src/components/ticketsContainer/PromoCodeSection.tsx","../src/components/ticketsContainer/ReferralLogic.tsx","../src/components/ticketsContainer/utils.ts","../src/components/ticketsContainer/TicketRow.tsx","../src/components/ticketsContainer/TicketsSection.tsx","../src/components/ticketsContainer/TimeSlotTicketRow.tsx","../src/components/ticketsContainer/TimeSlotsSection.tsx","../src/components/ticketsContainer/index.tsx","../src/components/myTicketsContainer/tableConfig.tsx","../src/components/myTicketsContainer/row.tsx","../src/components/common/RadioField.tsx","../src/components/ticketResaleModal/index.tsx","../src/components/orderDetailsContainer/CustomFieldsForm.tsx","../src/components/orderDetailsContainer/utils/index.tsx","../src/components/orderDetailsContainer/TicketHolderCustomFields.tsx","../src/components/orderDetailsContainer/ticketsTable.tsx","../src/components/resetPasswordContainer/index.tsx","../src/components/loginForm/index.tsx","../src/components/common/FieldSection/utils/index.tsx","../src/components/common/FieldSection/index.tsx","../src/components/registerForm/adapters/index.tsx","../src/components/registerForm/constants.tsx","../src/components/registerForm/index.tsx","../src/components/idVerificationContainer/constants.ts","../src/components/delegationsContainer/IssueTicketForm.tsx","../src/components/delegationsContainer/TicketsAssignedTable.tsx","../src/components/delegationsContainer/TicketsAvailableTable.tsx","../src/components/delegationsContainer/IssueComponent.tsx","../src/components/seatMapContainer/addToCart.ts","../src/components/seatMapContainer/utils.ts","../src/components/seatMapContainer/SeatMapComponent.tsx","../src/components/seatMapContainer/TicketsSection.tsx","../src/components/common/RedirectModal.tsx","../src/components/rsvpContainer/index.tsx","../src/components/preRegistration/Influancers.tsx","../src/components/paymentContainer/OrderDetails.tsx","../src/components/confirmationContainer/index.tsx","../src/components/delegationsContainer/index.tsx","../src/components/idVerificationContainer/index.tsx","../src/components/myTicketsContainer/index.tsx","../src/components/orderDetailsContainer/index.tsx","../src/components/preRegistration/PreRegistrationInformations.tsx","../src/components/seatMapContainer/index.tsx","../src/hooks/useOnline.ts","../src/components/ticketResale/index.tsx","../src/hooks/useLocalStorageListener.ts"],"sourcesContent":["import axios, { AxiosInstance } from 'axios'\n\nimport { getCookieByName } from '../utils'\n\nconst headers: { [key: string]: string } = {\n Accept: 'application/vnd.api+json',\n 'Content-Type': 'application/vnd.api+json',\n}\n\nconst isWindowDefined = typeof window !== 'undefined'\nconst authGuestToken = isWindowDefined ? localStorage.getItem('auth_guest_token') : ''\nif (isWindowDefined && authGuestToken) {\n headers['Authorization-Guest'] = authGuestToken\n}\n\nexport const setAxiosHeader = (key: string, value: string | number) => {\n headers[key] = `${value}`\n}\n\ninterface IPublicRequest extends AxiosInstance {\n setBaseUrl: (baseUrl: string) => void;\n setGuestToken: (guestToken: string) => void;\n}\n\nexport const publicRequest: IPublicRequest = axios.create({\n baseURL: 'https://www.ticketfairy.com/api',\n headers,\n withCredentials: true,\n}) as IPublicRequest\n\npublicRequest.interceptors.request.use(config => {\n if (getCookieByName('X-TF-ECOMMERCE')) {\n config.headers['X-TF-ECOMMERCE'] = getCookieByName('X-TF-ECOMMERCE')\n }\n\n return config\n})\n\npublicRequest.setBaseUrl = (baseUrl: string) =>\n (publicRequest.defaults.baseURL = baseUrl + '/api')\n\npublicRequest.setGuestToken = (guestToken: string) =>\n (publicRequest.defaults.headers.common['Authorization-Guest'] = guestToken)\n\nexport const setBaseUrl = (baseUrl: string) => {\n publicRequest.setBaseUrl(baseUrl)\n}\n","export const X_TF_ECOMMERCE = 'X-TF-ECOMMERCE'\nexport const FEES_STYLES = { TRADITIONAL: 'TRADITIONAL', DISPLAY_BOTH: 'DISPLAY_BOTH' }\nexport const DEFAULT_FEES_STYLE = FEES_STYLES.TRADITIONAL\n","import { getDomain } from './getDomain'\n\nlet generalDomain: string\n\nexport function setCustomCookie(name: string, value: string, days = 5) {\n let expires = ''\n if (days) {\n const date = new Date()\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000)\n expires = '; expires=' + date.toUTCString()\n }\n if (typeof window === 'undefined') {\n return\n }\n\n const { hostname } = window.location\n\n if (generalDomain && generalDomain.endsWith(getDomain(hostname))) {\n document.cookie = name + '=' + (value || '') + expires + `; path=/;domain=${generalDomain}`\n return\n }\n\n let previousDomain = undefined\n let domain = undefined\n do {\n previousDomain = domain\n domain = getDomain(hostname, undefined, previousDomain)\n document.cookie = name + '=' + (value || '') + expires + `; path=/;domain=${domain}`\n } while (getCookieByName(name) === '' && hostname !== domain)\n generalDomain = domain\n}\n\nexport function getCookieByName(cname: string) {\n if (typeof window === 'undefined') return ''\n const name = cname + '='\n const ca = document.cookie.split(';')\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i]\n while (c.charAt(0) === ' ') {\n c = c.substring(1)\n }\n if (c.indexOf(name) === 0) {\n return c.substring(name.length, c.length)\n }\n }\n return ''\n}\n\nexport function deleteCookieByName(name: string) {\n if (getCookieByName(name) === '') {\n return\n }\n\n if (typeof window === 'undefined') {\n return\n }\n\n const { hostname } = window.location\n\n if (generalDomain && generalDomain.endsWith(getDomain(hostname))) {\n document.cookie = name + `=; Path=/;domain=${generalDomain}; Expires=Thu, 01 Jan 1970 00:00:01 GMT;`\n return\n }\n\n let previousDomain = undefined\n let domain = undefined\n do {\n previousDomain = domain\n domain = getDomain(hostname, undefined, previousDomain)\n document.cookie = name + `=; Path=/;domain=${domain}; Expires=Thu, 01 Jan 1970 00:00:01 GMT;`\n } while (getCookieByName(name) !== '' && hostname !== domain)\n generalDomain = domain\n}\n","import _forEach from 'lodash/forEach'\n\nimport { publicRequest } from '../api/publicRequest'\nimport { DEFAULT_FEES_STYLE } from '../constants'\n\nexport interface IConfigs {\n BASE_URL: string;\n CLIENT_ID: string;\n CLIENT_SECRET: string;\n STRIPE_PUBLISHABLE_KEY: string;\n X_SOURCE_ORIGIN: string;\n FEES_STYLE: string;\n [key: string]: string | number;\n}\n\nexport const CONFIGS: IConfigs = { FEES_STYLE: DEFAULT_FEES_STYLE } as IConfigs\n\nexport const setConfigs = (configs: IConfigs) => {\n _forEach(configs, (value, key) => {\n CONFIGS[key] = value\n })\n\n publicRequest.setBaseUrl(CONFIGS.BASE_URL)\n}\n","export const getQueryVariable = (variable: string) => {\n if (typeof window !== 'undefined') {\n const query = window.location.search.substring(1)\n const vars = query.split('&')\n for (let i = 0; i < vars.length; i++) {\n const pair = vars[i].split('=')\n if (pair[0] === variable) {\n return decodeURIComponent(pair[1])\n }\n }\n }\n return false\n}\n","import { connect, FormikContextType } from 'formik'\nimport { Component } from 'react'\n\ninterface IProps {\n formik: FormikContextType<any>;\n}\n\nclass ErrorFocusInternal extends Component<IProps> {\n public componentDidUpdate(prevProps: IProps) {\n const { isSubmitting, isValidating, errors } = prevProps.formik\n const keys = Object.keys(errors)\n if (keys.length > 0 && isSubmitting && !isValidating) {\n const selector = `[name=\"${keys[0]}\"]`\n const errorElement = document.querySelector(selector) as HTMLElement\n if (errorElement) {\n errorElement.focus()\n }\n }\n }\n\n public render = () => null;\n}\n\nexport const ErrorFocus = connect<{}>(ErrorFocusInternal)\n","export function getDomain(url: string, subdomain?: string, publicSuffix?: string): string {\n let updatedUrl: any = url.replace(/(https?:\\/\\/)?(www.)?/i, '')\n\n if (!subdomain) {\n if (publicSuffix) {\n const updatedPublicSuffix = publicSuffix.startsWith('.') ? publicSuffix : '.' + publicSuffix\n updatedUrl = url.replace(updatedPublicSuffix, '').split('.')\n updatedUrl = updatedUrl.length > 0 ? updatedUrl[updatedUrl.length - 1] : ''\n updatedUrl += updatedPublicSuffix\n } else {\n updatedUrl = updatedUrl.split(\".\")\n updatedUrl = updatedUrl.slice(updatedUrl.length - 2).join(\".\")\n }\n }\n\n if (updatedUrl.indexOf('/') !== -1) {\n return updatedUrl.split('/')[0]\n }\n\n return updatedUrl\n}\n","import { getCookieByName } from './cookies'\n\nexport const downloadPDF = (pdfUrl: string) => {\n if (typeof window === 'undefined') return\n\n const xtfCookie = getCookieByName('X-TF-ECOMMERCE')\n\n if (!xtfCookie) return\n\n let headers = {}\n\n if (xtfCookie) {\n headers = {\n 'X-TF-ECOMMERCE': xtfCookie,\n }\n }\n\n return fetch(pdfUrl, {\n headers,\n credentials: 'include',\n })\n .then(async response => {\n const blobValue = await response.blob()\n const fileNameHeader = response.headers.get('content-disposition') || ''\n const fileName = fileNameHeader.split('\"')[1]\n return { blobValue, fileName }\n })\n .then(({ blobValue, fileName }) => {\n if (!fileName) {\n throw Error('Something went wrong.')\n }\n const file = new Blob([blobValue], { type: 'application/pdf' })\n const fileURL = URL.createObjectURL(file)\n const link = document.createElement('a')\n link.href = fileURL\n link.setAttribute('download', fileName)\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n })\n .catch(error => error)\n}\n","import _get from 'lodash/get'\n\ntype Type1 = string | number | null | undefined\ninterface ICheckoutBody {\n attributes: {\n [key: string]:\n | Type1\n | Record<string | number, Type1>\n | Array<Type1 | IticketHolder>;\n };\n data_capture?: {\n [key: string]: any;\n };\n}\n\ninterface IticketHolder {\n first_name?: string;\n last_name?: string;\n phone?: string;\n email?: string;\n}\n\ninterface IUserCredentialsValues {\n emailLogged?: string;\n firstNameLogged?: string;\n lastNameLogged?: string;\n phoneLogged?: string;\n}\n\nexport const createCheckoutDataBodyWithDefaultHolder = (\n ticketsQuantity: number,\n logedInValues: Record<string, string | undefined>,\n includeDob = false,\n userCredentials: IUserCredentialsValues = {}\n): ICheckoutBody => {\n const ticket_holders: IticketHolder[] = []\n\n const first_name =\n _get(logedInValues, 'firstName') ||\n _get(logedInValues, 'first_name') ||\n _get(userCredentials, 'firstNameLogged') ||\n ''\n\n const last_name =\n _get(logedInValues, 'lastName') ||\n _get(logedInValues, 'last_name') ||\n _get(userCredentials, 'lastNameLogged') ||\n ''\n const phone =\n _get(logedInValues, 'phone') || _get(userCredentials, 'phoneLogged') || ''\n const email =\n _get(logedInValues, 'email') || _get(userCredentials, 'emailLogged') || ''\n\n for (let i = 0; i <= ticketsQuantity - 1; i++) {\n const individualHolder = i\n ? { first_name: '', last_name: '', phone: '', email: '' }\n : { first_name, last_name, phone, email }\n\n ticket_holders.push(individualHolder)\n }\n\n const body: ICheckoutBody = {\n attributes: {\n ...logedInValues,\n email,\n confirm_email: email,\n first_name,\n last_name,\n ticket_holders,\n },\n }\n\n if (includeDob) {\n const holderAgeDate = new Date(_get(logedInValues, 'holderAge', ''))\n body.attributes.dob_day = holderAgeDate.getDate()\n body.attributes.dob_month = holderAgeDate.getMonth() + 1\n body.attributes.dob_year = holderAgeDate.getFullYear()\n }\n\n return body\n}\n","export const createMarkup = (data: string) => ({ __html: data })","export const replaceVarInString = (message = '', varArray: Array<string>) => {\n const re = new RegExp(/\\{.*?\\}/g)\n let index = 0\n return message.replace(re, _ => {\n const value = varArray[index] || ''\n index++\n return value\n })\n}\n","export const isBrowser =\n typeof window !== 'undefined' && typeof window.document !== 'undefined'\n","import _forEach from 'lodash/forEach'\nimport _get from 'lodash/get'\n\nexport const getFormInitialValues = (fieldsSections: IFormFieldsSection[]) => {\n const initialValues: { [key: string]: string | number | boolean } = {}\n const isWindowDefined = typeof window !== 'undefined'\n const userData = JSON.parse(\n isWindowDefined ? window.localStorage.getItem('user_data') || '{}' : '{}'\n ) as IProfileData\n\n _forEach(fieldsSections, item => {\n _forEach(item.fields, fieldItem => {\n switch (fieldItem.name) {\n case 'country':\n case 'numTickets':\n case 'state':\n initialValues[fieldItem.name] = ''\n break\n case 'brandOptIn':\n initialValues[fieldItem.name] = true\n break\n case 'confirmEmail':\n initialValues[fieldItem.name] =\n _get(userData, fieldItem.name) || _get(userData, 'email') || ''\n break\n default:\n initialValues[fieldItem.name] = _get(userData, fieldItem.name) || ''\n break\n }\n })\n })\n\n return initialValues\n}\n","import { AxiosError } from 'axios'\n\nimport { logout } from '../api'\nimport { deleteCookieByName } from './cookies'\nimport { isBrowser } from './isBrowser'\n\nexport const setLoggedUserData = (data: IProfileData) => ({\n id: data.id,\n first_name: data.firstName,\n last_name: data.lastName,\n email: data.email,\n confirmEmail: data.email,\n city: data?.city || '',\n country: data?.countryId || '',\n phone: data?.phone || '',\n street_address: data?.streetAddress || '',\n state: data?.stateId || '',\n zip: data?.zipCode || '',\n})\n\ninterface LogoutUserParams {\n onLogoutSuccess?: () => void;\n onLogoutError?: (error: AxiosError) => void;\n setIsLogged?: (isLogged: boolean) => void;\n}\n\nexport const logoutUser = async ({\n onLogoutSuccess,\n onLogoutError,\n setIsLogged,\n}: LogoutUserParams) => {\n try {\n await logout()\n onLogoutSuccess && onLogoutSuccess()\n if (isBrowser) {\n window.localStorage.removeItem('user_data')\n setIsLogged && setIsLogged(false)\n const event = new window.CustomEvent('tf-logout')\n deleteCookieByName('X-TF-ECOMMERCE')\n window.document.dispatchEvent(event)\n }\n } catch (e) {\n onLogoutError && onLogoutError(e as AxiosError)\n }\n}\n","import _isEmpty from 'lodash/isEmpty'\nimport _map from 'lodash/map'\n\nimport { IBillingInfoData } from '../types'\n\nexport const getDataWithCustomFields = (\n initialData: IBillingInfoData[],\n ticketHoldersFields: IBillingInfoData,\n customFields: any\n) => {\n // Custom Fields are not specified case\n if (_isEmpty(customFields)) {\n const dataWithCustomFields = { ...initialData }\n const ticketHoldersWithCustomFields = { ...ticketHoldersFields }\n return { dataWithCustomFields, ticketHoldersWithCustomFields }\n }\n\n // Add Custom Fields for Order\n const orderWithCustomFields = {\n groupClassname: 'billing-info-container__customFields',\n groupItems: [...customFields.orderFields],\n }\n const initialDataFields = [...initialData[0].fields]\n\n // Add Custom Fields to penultimate position\n initialDataFields.splice(initialDataFields.length - 1, 0, {\n ...orderWithCustomFields,\n })\n\n const dataWithCustomFields = [\n {\n ...initialData[0],\n fields: initialDataFields,\n },\n ]\n\n // Add Custom Fields for Ticket Holders\n const ticketHoldersFieldsArr = ticketHoldersFields.fields || []\n\n const ticketHoldersCustomFieldsBlueprint = {\n id: ticketHoldersFieldsArr.length + 1,\n customFields: true,\n groupClassname: 'billing-info-container__customFields',\n groupItems: [...customFields.ticketsFields],\n }\n\n const ticketHoldersWithCustomFields = {\n ...ticketHoldersFields,\n fields: _isEmpty(ticketHoldersFieldsArr)\n ? []\n : [...ticketHoldersFieldsArr, ticketHoldersCustomFieldsBlueprint],\n }\n\n return { dataWithCustomFields, ticketHoldersWithCustomFields }\n}\n\nexport const getAddOnDataWithCustomFields = (customFields: any) => {\n // Custom Fields are not specified case\n if (_isEmpty(customFields)) {\n return { addOnDataWithCustomFields: [] }\n }\n\n // Add Custom Fields for Order\n const orderWithCustomFields = [\n {\n id: 1,\n groupClassname: 'billing-info-container__customFields',\n groupItems: [...customFields.addOnFields],\n },\n ]\n\n const addOnDataWithCustomFields = {\n fields: orderWithCustomFields,\n }\n\n return { addOnDataWithCustomFields }\n}\n\nexport const getFieldsKeys = (customFields: any) =>\n _map(customFields, field => field.name)\n","export const isJson = (value: any): boolean => {\n try {\n JSON.parse(value)\n } catch (e) {\n return false\n }\n return true\n}\n","import { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios'\nimport _get from 'lodash/get'\n\nimport { CONFIGS, isBrowser } from '../utils'\nimport { getCookieByName, setCustomCookie } from '../utils/cookies'\nimport { publicRequest } from './publicRequest'\n\npublicRequest.interceptors.request.use((config: InternalAxiosRequestConfig) => {\n const guestToken = isBrowser ? window.localStorage.getItem('auth_guest_token') : null\n if (guestToken) {\n config.headers['Authorization-Guest'] = guestToken\n }\n\n const xtfCookie = getCookieByName('X-TF-ECOMMERCE')\n if (xtfCookie) {\n config.headers['X-TF-ECOMMERCE'] = xtfCookie\n }\n\n const additionalCookiesHeaderValue = isBrowser ? document.cookie ?? '' : ''\n if (additionalCookiesHeaderValue !== '') {\n config.headers['Additional-Cookies'] = additionalCookiesHeaderValue\n }\n\n if (CONFIGS.X_SOURCE_ORIGIN) {\n config.headers['X-Source-Origin'] = CONFIGS.X_SOURCE_ORIGIN\n }\n\n if (CONFIGS.BASE_URL) {\n config.baseURL = CONFIGS.BASE_URL + '/api'\n }\n\n return config\n})\n\npublicRequest.interceptors.response.use(\n (response: AxiosResponse) => {\n const authGuestToken: string | null = _get(\n response,\n 'headers.authorization-guest',\n ''\n )\n\n if (isBrowser && authGuestToken) {\n window.localStorage.setItem('auth_guest_token', authGuestToken)\n publicRequest.setGuestToken(authGuestToken)\n }\n\n const xtfCookie = _get(response, 'headers.x-tf-ecommerce')\n const url = _get(response, 'config.url')\n const method = _get(response, 'config.method')\n\n if (xtfCookie && !(url === '/auth' && method === 'delete')) {\n setCustomCookie('X-TF-ECOMMERCE', xtfCookie)\n }\n\n return response\n },\n (error: AxiosError) => {\n if (error?.response?.status === 401) {\n if (isBrowser) {\n window.localStorage.removeItem('user_data')\n const errorType = _get(error, 'response.data.error')\n if (errorType === 'invalid_token') {\n window.location.href = '/'\n }\n }\n }\n\n const authGuestToken = _get(error, 'response.headers.authorization-guest')\n if (isBrowser && authGuestToken) {\n window.localStorage.setItem('auth_guest_token', authGuestToken)\n publicRequest.setGuestToken(authGuestToken)\n }\n\n return Promise.reject(error)\n }\n)\n","import _forEach from 'lodash/forEach'\nimport _get from 'lodash/get'\nimport _map from 'lodash/map'\n\nimport { IGroupItem } from '../types'\n\nexport const optionsAdapter = (options: any) => {\n const adaptedOptions = _map(options, option => ({\n id: option.id,\n label: option.name,\n value: option.value,\n }))\n return adaptedOptions\n}\n\nexport const fieldDataAdapter = (field: IGroupItem) => {\n const {\n name,\n label,\n required,\n description,\n type,\n options,\n ...restValues\n } = field\n\n const adaptedField: IGroupItem = {\n name,\n label,\n required,\n description,\n type,\n className: _get(restValues, 'settings.className', ''),\n value: _get(restValues, 'defaultValue'),\n }\n\n switch (type) {\n case 'textarea':\n adaptedField.type = 'text'\n adaptedField.multiline = true\n break\n case 'radio':\n adaptedField.radios = optionsAdapter(options)\n break\n case 'select_multi':\n adaptedField.isMultiple = true\n adaptedField.options = optionsAdapter(options)\n break\n case 'select':\n adaptedField.type = 'select_multi'\n adaptedField.isMultiple = false\n adaptedField.options = optionsAdapter(options)\n break\n default:\n break\n }\n\n return adaptedField\n}\n\nexport const customFieldsDataAdapter = (data: any) => {\n const adaptedTicketFields: Array<IGroupItem> = []\n const adaptedOrderFields: Array<IGroupItem> = []\n const adaptedAddOnFields: Array<IGroupItem> = []\n\n _forEach(data, field => {\n const ticketFields = _get(field, 'ticket.group.fields')\n const orderFields = _get(field, 'order.group.fields')\n const addOnFields = _get(field, 'add-on.group.fields')\n\n _forEach(ticketFields, ticketField => {\n adaptedTicketFields.push(fieldDataAdapter(ticketField))\n })\n\n _forEach(orderFields, orderField => {\n adaptedOrderFields.push(fieldDataAdapter(orderField))\n })\n\n _forEach(addOnFields, addOnField => {\n adaptedAddOnFields.push(fieldDataAdapter(addOnField))\n })\n })\n\n return { ticketsFields: adaptedTicketFields, orderFields: adaptedOrderFields, addOnFields: adaptedAddOnFields }\n}\n","import { AxiosRequestConfig, AxiosResponse } from 'axios'\n\nimport { CONFIGS } from '../utils'\nimport { publicRequest } from './publicRequest'\n\nexport const authorize = async (\n data: IAuthorizeRequestData\n): Promise<IProfileResponse> => {\n const response: AxiosResponse<IProfileResponse, AxiosRequestConfig> =\n await publicRequest.post(\n `/auth?clientId=${CONFIGS.CLIENT_ID || 'e9d8f8922797b4621e562255afe90dbf'}`,\n data\n )\n return response.data\n}\n\nexport const signUp = async (data: ISignupRequestData): Promise<IProfileResponse> => {\n const response: AxiosResponse<IProfileResponse, AxiosRequestConfig> =\n await publicRequest.post('auth/signup', { ...data })\n return response.data\n}\n\nexport const register = async (data: FormData): Promise<IProfileResponse> => {\n const response: AxiosResponse<IProfileResponse, AxiosRequestConfig> =\n await publicRequest.post('v1/oauth/register-rn', data)\n return response.data\n}\n\nexport const getProfileData = async (): Promise<IProfileResponse> => {\n const response: AxiosResponse<IProfileResponse, AxiosRequestConfig> =\n await publicRequest.get('/customer/profile/')\n return response.data\n}\n\nexport const logout = async (): Promise<IAxiosResponseData> => {\n const response: AxiosResponse<IAxiosResponseData, AxiosRequestConfig> =\n await publicRequest.delete('/auth')\n return response.data\n}\n\n/**\n * Checks whether a given email address already exists via the `/ajax/contact-email` endpoint.\n *\n * The underlying API is expected to return a JSON object containing:\n * - `exists`: `1` if the email exists, `0` otherwise\n * - `error`: `1` if an error occurred, `0` otherwise\n * - `message`: an optional error message when `error === 1`\n *\n * This function normalizes that response to an object with:\n * - `exists`: a boolean indicating whether the email exists\n * - `error`: an optional string containing an error message, if any\n *\n * On network or unexpected errors, it returns `{ exists: false, error: 'Failed to check email' }`.\n *\n * @param {string} email - The email address to check for existence.\n * @returns {Promise<{ exists: boolean; error?: string }>} A promise that resolves to the normalized\n * result of the email existence check.\n */\nexport const checkEmailExists = async (\n email: string\n): Promise<{ exists: boolean, error?: string }> => {\n try {\n const formData = new FormData()\n formData.append('email', email)\n formData.append('is_checkout_flow', 'true')\n\n const baseUrl = publicRequest.defaults.baseURL?.replace('/api', '') || ''\n const url = `${baseUrl}/ajax/contact-email`\n\n const response: AxiosResponse<any, AxiosRequestConfig> =\n await publicRequest.post(url, formData, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n })\n\n return {\n exists: response.data.exists === 1,\n error: response.data.error === 1 ? response.data.message : undefined,\n }\n } catch (error) {\n console.error('Error checking email:', error)\n return {\n exists: false,\n error: 'Failed to check email',\n }\n }\n}\n","import { AxiosRequestConfig, AxiosResponse } from 'axios'\n\nimport { CONFIGS } from '../utils'\nimport { publicRequest } from './publicRequest'\n\nexport const getOrders = async (\n page: number,\n limit: number,\n eventSlug: string\n): Promise<IOrdersResponse> => {\n const slug = eventSlug || CONFIGS.EVENT_SLUG || ''\n\n const response: AxiosResponse<IOrdersResponse, AxiosRequestConfig> =\n await publicRequest.get(\n `v1/account/orders/?page=${page}&limit=${limit}&filter[event]=${slug}&${\n CONFIGS.BRAND_SLUG\n ? `filter[brand]=${CONFIGS.BRAND_SLUG}&filter[subbrands]=true`\n : ''\n }`\n )\n\n return response.data\n}\n\nexport const getOrderDetails = async (orderId: string): Promise<IOrderResponse> => {\n const response: AxiosResponse<IOrderResponse, AxiosRequestConfig> =\n await publicRequest.get(`v1/account/order/${orderId}`)\n\n return response.data\n}\n","import { AxiosRequestConfig, AxiosResponse } from 'axios'\n\nimport { isBrowser } from '../utils'\nimport { publicRequest } from './publicRequest'\n\nexport const addToCart = async (\n id: string | number,\n data: ICartRequestData\n): Promise<ICartResponse> => {\n const response: AxiosResponse<ICartResponse, AxiosRequestConfig> =\n await publicRequest.post(\n `v1/event/${id}/add-to-cart/`,\n { data },\n {\n headers: {\n ...publicRequest.defaults.headers.common,\n 'Referer-Url': isBrowser ? document.referrer : '',\n },\n }\n )\n return response.data\n}\n\nexport const getCart = async (): Promise<IGetCartResponse> => {\n const response: AxiosResponse<IGetCartResponse, AxiosRequestConfig> =\n await publicRequest.get(`v1/cart`)\n return response.data\n}\n","import { AxiosRequestConfig, AxiosResponse } from 'axios'\n\nimport { ICheckoutResponse } from '../types/api/checkout'\nimport { publicRequest } from './publicRequest'\n\nexport const postOnCheckout = async (\n data: any,\n freeTicket = false\n): Promise<ICheckoutResponse> => {\n if (freeTicket) {\n delete data.attributes.city\n delete data.attributes.country\n delete data.attributes.state\n delete data.attributes.street_address\n }\n\n const response: AxiosResponse<ICheckoutResponse, AxiosRequestConfig> =\n await publicRequest.post(`v1/on-checkout`, { data })\n\n return response.data\n}\n\nexport const updateCheckout = async (data: any): Promise<ICheckoutResponse> => {\n const response: AxiosResponse<ICheckoutResponse, AxiosRequestConfig> =\n await publicRequest.post(`v1/checkout`, { data })\n\n return response.data\n}\n","import { AxiosRequestConfig, AxiosResponse } from 'axios'\nimport _forEach from 'lodash/forEach'\n\nimport { getQueryVariable, isBrowser } from '../utils'\nimport { publicRequest } from './publicRequest'\n\nexport const getEvent = async (\n id: string | number,\n pk?: string\n): Promise<IEventResponse> => {\n let referralValue = ''\n let invitationHash\n if (isBrowser) {\n const params = new URL(`${window.location}`)\n const referralId = params.searchParams.get('ttf_r') || ''\n const referral_key = window.localStorage.getItem('referral_key')\n const [, referralIdlocal] = (referral_key || '').split('.')\n referralValue = referralId || (referralIdlocal ?? '')\n invitationHash = params.searchParams.get('invitation-hash') || null\n }\n\n const response: AxiosResponse<IEventResponse, AxiosRequestConfig> =\n await publicRequest.get(`v1/event/${id}`, {\n params: { pk, invitationHash },\n headers: {\n ...publicRequest.defaults.headers.common,\n 'Referer-Url': isBrowser ? document.referrer : '',\n 'Referrer-Id': isBrowser ? referralValue : '',\n },\n })\n return response.data\n}\n\nexport const getTickets = async (\n eventId: string | number,\n promoCode: string,\n pk?: string\n): Promise<ITicketsAdaptedResponse> => {\n const invitationHash = getQueryVariable('invitation-hash')\n const referralId = getQueryVariable('ttf_r')\n\n if (referralId) {\n window.localStorage.setItem('promoter_id', referralId)\n }\n\n const promoterId = window.localStorage.getItem('promoter_id')\n const params = { pk } as Record<string, string | number | undefined>\n\n if (invitationHash) {\n params['invitation-hash'] = invitationHash\n }\n\n const headers = publicRequest.defaults.headers.common\n\n if (promoterId) {\n headers['Promotion-Event'] = String(eventId)\n headers['Referrer-Id'] = isBrowser ? promoterId : ''\n }\n\n if (promoCode) {\n headers['Promotion-Event'] = String(eventId)\n headers['Promotion-Code'] = promoCode\n window.localStorage.removeItem('promoter_id')\n }\n\n const response: AxiosResponse<ITicketsResponse, AxiosRequestConfig> =\n await publicRequest.get(`v1/event/${eventId}/tickets/`, {\n params,\n headers,\n })\n\n const { tickets } = response.data.data.attributes\n const ticketsArr: ITicketData[] = []\n _forEach(tickets, item => {\n ticketsArr.push(item)\n })\n const adaptedResponse: AxiosResponse<ITicketsAdaptedResponse, AxiosRequestConfig> = {\n ...response,\n data: {\n ...response.data,\n data: {\n ...response.data.data,\n attributes: {\n ...response.data.data.attributes,\n tickets: ticketsArr,\n },\n },\n },\n }\n\n return adaptedResponse.data\n}\n\nexport const getTimeSlotsByDate = async (\n eventId: string | number,\n date: string,\n promoCode?: string,\n pk?: string\n): Promise<ITimeslotsAdaptedResponse> => {\n const invitationHash = getQueryVariable('invitation-hash')\n const referralId = getQueryVariable('ttf_r')\n\n if (referralId) {\n window.localStorage.setItem('promoter_id', referralId)\n }\n\n const promoterId = window.localStorage.getItem('promoter_id')\n const params = { pk } as Record<string, string | number | undefined>\n\n if (invitationHash) {\n params['invitation-hash'] = invitationHash\n }\n\n const headers = publicRequest.defaults.headers.common\n\n if (promoterId) {\n headers['Promotion-Event'] = String(eventId)\n headers['Referrer-Id'] = isBrowser ? promoterId : ''\n }\n\n if (promoCode) {\n headers['Promotion-Event'] = String(eventId)\n headers['Promotion-Code'] = promoCode\n window.localStorage.removeItem('promoter_id')\n }\n\n const response: AxiosResponse<ITimeslotsAdaptedResponse, AxiosRequestConfig> =\n await publicRequest.get(`v1/event/${eventId}/timeslots`, {\n params: {\n date,\n remove_past_slots: true,\n ...params,\n },\n headers,\n })\n return response.data\n}\n\nexport const getCountries = async (): Promise<ICountriesResponse> => {\n const response: AxiosResponse<ICountriesResponse, AxiosRequestConfig> =\n await publicRequest.get('/countries/list')\n return response.data\n}\n\nexport const getStates = async (countryId: string | number): Promise<IStatesResponse> => {\n const response: AxiosResponse<IStatesResponse, AxiosRequestConfig> =\n await publicRequest.get(`/countries/${countryId}/states/`)\n return response.data\n}\n\nexport const sendRSVPInfo = async (\n eventId: number,\n data: { data: IRSVPRequestData }\n): Promise<IRSVPResponse> => {\n const response: AxiosResponse<IRSVPResponse, AxiosRequestConfig> =\n await publicRequest.post(`v1/event/${eventId}/send-rsvp-info`, data)\n\n return response.data\n}\n\nexport const addToWaitingList = async (\n id: number,\n data: IWaitingListRequestData\n): Promise<IWaitingListResponse> => {\n const response: AxiosResponse<IWaitingListResponse, AxiosRequestConfig> =\n await publicRequest.post(`v1/event/${id}/add_to_waiting_list`, {\n data,\n })\n\n return response.data\n}\n\nexport const postReferralVisits = async (\n eventId: string,\n referralId: string\n): Promise<IAxiosResponseData> => {\n const response: AxiosResponse<IAxiosResponseData, AxiosRequestConfig> =\n await publicRequest.post(`v1/event/${eventId}/referrer/`, {\n referrer: `${referralId}`,\n })\n\n return response.data\n}\n\nexport const validatePhoneNumber = async (phone: string): Promise<IAxiosResponseData> => {\n const response: AxiosResponse<IAxiosResponseData, AxiosRequestConfig> =\n await publicRequest.get(`/v1/account/validate_phone?phone=${phone}`)\n\n return response.data\n}\n","import { AxiosRequestConfig, AxiosResponse } from 'axios'\nimport _map from 'lodash/map'\nimport { nanoid } from 'nanoid'\n\nimport { isBrowser } from '../utils'\nimport { publicRequest } from './publicRequest'\n\nexport const getPaymentData = async (hash: string): Promise<IPaymentDataResponse> => {\n const response: AxiosResponse<IPaymentDataResponse, AxiosRequestConfig> =\n await publicRequest.get(`v1/order/${hash}/review`, {\n headers: { 'Referer-Url': isBrowser ? document.referrer : '' },\n })\n\n return response.data\n}\n\nexport const handlePaymentSuccess = async (\n orderHash: string\n): Promise<IPaymentSuccessDataResponse> => {\n const response: AxiosResponse<IPaymentSuccessDataResponse, AxiosRequestConfig> =\n await publicRequest.post(`v1/order/${orderHash}/success`, undefined, {\n headers: {\n ...publicRequest.defaults.headers.common,\n 'Referer-Url': isBrowser ? document.referrer : '',\n },\n })\n return response.data\n}\n\nexport const handleFreeSuccess = async (\n orderHash: string\n): Promise<IFreeRegistrationDataResponse> => {\n const response: AxiosResponse<IFreeRegistrationDataResponse, AxiosRequestConfig> =\n await publicRequest.post(\n `v1/order/${orderHash}/complete_free_registration`,\n undefined,\n { headers: { 'Referer-Url': isBrowser ? document.referrer : '' } }\n )\n return response.data\n}\n\nexport const getConfirmationData = async (\n orderHash: string\n): Promise<ICheckoutCompleteDataResponse> => {\n const response: AxiosResponse<ICheckoutCompleteDataResponse, AxiosRequestConfig> =\n await publicRequest.get(`v1/order/${orderHash}/payment/complete`)\n return response.data\n}\n\nexport const getConditions = async (\n eventId: string\n): Promise<IConditionsAdaptedDataResponse> => {\n const response: AxiosResponse<IConditionsDataResponse, AxiosRequestConfig> =\n await publicRequest.get(`v1/event/${eventId}/conditions`)\n\n const adaptedData: IConditionsAdaptedData[] = _map(\n response.data.data.attributes,\n item => ({\n id: nanoid(),\n text: item,\n checked: false,\n })\n )\n\n const returnData: AxiosResponse<IConditionsAdaptedDataResponse, AxiosRequestConfig> = {\n ...response,\n data: {\n ...response.data,\n data: {\n ...response.data.data,\n attributes: adaptedData,\n },\n },\n }\n\n return returnData.data\n}\n","import { AxiosRequestConfig, AxiosResponse } from 'axios'\n\nimport { publicRequest } from './publicRequest'\n\nexport const resaleTicket = async (\n data: FormData,\n hash: string\n): Promise<IResaleTicketResponse> => {\n const response: AxiosResponse<IResaleTicketResponse, AxiosRequestConfig> =\n await publicRequest.post(`v1/ticket/${hash}/sell`, data)\n\n return response.data\n}\n\nexport const removeFromResale = async (\n hash: string\n): Promise<IRemoveFromResaleResponse> => {\n const response: AxiosResponse<IRemoveFromResaleResponse, AxiosRequestConfig> =\n await publicRequest.delete(`v1/ticket/${hash}/sell`)\n\n return response.data\n}\n\nexport const processTicket = (hash: string) =>\n publicRequest.post(`v1/ticket/${hash}/process`)\n\nexport const declineInvitation = (hash: string) =>\n publicRequest.post(`v1/ticket/${hash}/decline`)\n","import { AxiosRequestConfig, AxiosResponse } from 'axios'\n\nimport { publicRequest } from './publicRequest'\n\nexport const getCustomerExistsData = async (\n accessHash: string\n): Promise<ICheckCustomerExistsData> => {\n const response: AxiosResponse<ICheckCustomerExistsData, AxiosRequestConfig> =\n await publicRequest.get(`/v1/delegation-access/${accessHash}/customer-exists`)\n return response.data\n}\n\ninterface IDelegationTicketType {\n delegationMaxQuantity: number | string;\n}\n\ninterface IIssueTicketResponseData {\n delegationName: string;\n eventImage: string;\n eventName: string;\n ticketTypes: {\n [key: number]: IDelegationTicketType;\n };\n}\n\ninterface IIssueTicketResponse {\n data: {\n attributes: IIssueTicketResponseData;\n relationships: Array<any>;\n type: string;\n message: string;\n };\n}\n\nexport interface IDelegationsTicketType {\n [key: number]: {\n delegationMaxQuantity: string | number;\n delegationQuantityIssued: string | number;\n matrixRecordId: string | number;\n optionValue: string | number;\n };\n}\nexport interface IDelegationsData {\n delegationName: string;\n eventImage: string;\n eventName: string;\n ticketTypes: IDelegationsTicketType;\n tickets: Array<any>;\n}\n\ninterface IDelegationsResponse {\n data: {\n data: {\n attributes: IDelegationsData;\n relationships: Array<any>;\n type: string;\n };\n };\n}\n\nexport const getDelegationTickets = (\n accessHash: string\n): Promise<IDelegationsResponse> => {\n const res = publicRequest.get(`v1/delegation-access/${accessHash}/consumer-page-info`)\n return res\n}\n\nexport const issueTicket = async (\n accessHash: string,\n data: ITicketIssueData\n): Promise<IIssueTicketResponse> => {\n const response: AxiosResponse<IIssueTicketResponse, AxiosRequestConfig> =\n await publicRequest.post(`v1/delegation-access/${accessHash}/issue-ticket`, {\n data: {\n attributes: data,\n },\n })\n return response.data\n}\n","import './interceptors'\n\nimport { AxiosRequestConfig, AxiosResponse } from 'axios'\nimport _get from 'lodash/get'\n\nimport { customFieldsDataAdapter } from '../adapters'\nimport {\n GetNetverifyUrlResponseData,\n UpdateVerificationStatusResponseData,\n VerificationStatusResponseData,\n} from '../types/verification'\nimport { getQueryVariable, isBrowser } from '../utils'\nimport { publicRequest } from './publicRequest'\n\nexport { authorize, getProfileData, signUp, register, logout, checkEmailExists } from './auth'\nexport { setAxiosHeader, setBaseUrl } from './publicRequest'\nexport { getOrders, getOrderDetails } from './orders'\nexport { addToCart, getCart } from './cart'\nexport { postOnCheckout } from './checkout'\n\nexport {\n getEvent,\n getTickets,\n getCountries,\n getStates,\n addToWaitingList,\n sendRSVPInfo,\n postReferralVisits,\n validatePhoneNumber,\n} from './common'\n\nexport {\n getPaymentData,\n getConditions,\n handlePaymentSuccess,\n handleFreeSuccess,\n getConfirmationData,\n} from './payment'\n\nexport {\n resaleTicket,\n removeFromResale,\n processTicket,\n declineInvitation,\n} from './resale'\n\nexport { issueTicket, getDelegationTickets } from './guestTicketDelegation'\n\nexport const setCustomHeader = (response: any) => {\n const guestHeaderResponseValue = _get(response, 'headers.authorization-guest')\n const guestHeaderExistingValue = _get(response, 'config.headers[Authorization-Guest]')\n const guestHeader = guestHeaderResponseValue || guestHeaderExistingValue\n\n if (guestHeader) {\n if (isBrowser) {\n window.localStorage.setItem('auth_guest_token', guestHeader)\n publicRequest.setGuestToken(guestHeader)\n }\n }\n}\n\nexport const handlePaymentData = (orderHash: string, data: any) => {\n const res = publicRequest\n .post(`v1/order/${orderHash}/pay`, {\n data: { attributes: { 'stripe-source': data } },\n })\n .catch(error => {\n throw error\n })\n return res\n}\n\nexport const createPaymentPlan = (orderHash: string, stripePaymentMethodId: string) => {\n const res = publicRequest\n .post(\n `v1/order/${orderHash}/payment_plan/create`,\n {\n stripe_payment_method_id: stripePaymentMethodId,\n },\n {\n headers: {\n 'Referer-Url': isBrowser ? document.referrer : '',\n },\n }\n )\n .catch(error => {\n throw error\n })\n return res\n}\n\n// forgot password\nexport const forgotPassword = (email: string) =>\n publicRequest.post(`/auth/restore-password`, { email })\n\n// reset password\ninterface IResetPasswordData {\n token: string;\n password: string;\n confirmPassword: string;\n}\nexport const resetPassword = (data: IResetPasswordData) =>\n publicRequest.post(`/auth/reset-password`, data)\n\nexport const getAddons = async (eventId: string) => {\n const result = await publicRequest.get(`/v1/event/${eventId}/add-ons`)\n const addons = _get(result, 'data.data.attributes', [])\n return addons\n}\n\nexport const selectAddons = (data: any) => {\n publicRequest.post(`v1/on-checkout`, data)\n}\n\nexport interface AttributesConfig {\n has_add_on: boolean;\n names_required: boolean;\n phone_required: boolean;\n minimum_age?: any;\n age_required: boolean;\n hide_phone_field: boolean;\n event_id: string;\n free_ticket: boolean;\n collect_mandatory_wallet_address: boolean;\n collect_optional_wallet_address: boolean;\n collect_mandatory_company: boolean;\n collect_optional_company: boolean;\n collect_mandatory_job_title: boolean;\n collect_optional_job_title: boolean;\n collect_mandatory_business_category: boolean;\n collect_optional_business_category: boolean;\n collect_mandatory_instagram: boolean;\n collect_optional_instagram: boolean;\n skip_billing_page: boolean;\n cart: ICart[];\n}\n\nexport interface ConfigsData {\n attributes: AttributesConfig;\n relationships: any[];\n type: string;\n}\n\nexport interface ResponseConfigs {\n data: ConfigsData;\n success: boolean;\n error: boolean;\n message: string;\n status: number;\n}\n\nexport const getCheckoutPageConfigs = async (): Promise<ResponseConfigs> => {\n const response = await publicRequest.get(`v1/checkout-configs`)\n return response.data\n}\n\n\nexport const getCustomFields = async (eventId: string) => {\n const response = await publicRequest.get(`/v1/event/${eventId}/custom_fields`)\n const customFields = _get(response, 'data.data.attributes', [])\n const adaptedResponse = customFieldsDataAdapter(customFields)\n return adaptedResponse\n}\n\nexport const updateOrderCustomFields = async (\n eventId: string,\n orderId: string,\n customFieldsData: Record<string, any>\n) => {\n const response = await publicRequest.put(`v1/event/${eventId}/order-data-capture`, {\n data: {\n attributes: {\n order_id: orderId,\n data_capture: customFieldsData,\n },\n },\n })\n return response\n}\n\nexport const updateTicketHoldersCustomFields = async (\n eventId: string,\n customFieldsData: Record<string, any>,\n ticketHash: string\n) => {\n const response = await publicRequest.put(`v1/event/${eventId}/ticket-data-capture`, {\n data: {\n attributes: {\n ticket_hash: ticketHash,\n ticket_data_capture: {\n [ticketHash]: customFieldsData,\n },\n },\n },\n })\n return response\n}\n\nexport const confirmPreRegistration = async (\n eventId: string | number,\n data: IConfirmPreRegistrationRequestData\n) => {\n const response = await publicRequest.post(\n `v1/event/${eventId}/pre-registration/confirm`,\n {\n data: {\n attributes: data,\n },\n }\n )\n return response.data\n}\n\n// seat map <--start-->\n\n// const makeId = (length = 20) => {\n// let result = ''\n// const characters =\n// 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\n// const charactersLength = characters.length\n// for (let i = 0; i < length; i++) {\n// result += characters.charAt(Math.floor(Math.random() * charactersLength))\n// }\n// return result\n// }\n\nexport const getSeatMapData = async (\n eventId: string | number\n): Promise<SeatMapDataResponse> => {\n localStorage.setItem('tierId', '')\n const reservedSeatsHash = getQueryVariable('reserved_seats_hash')\n const params = {} as any\n if (reservedSeatsHash) {\n params.reserved_seats_hash = reservedSeatsHash\n }\n\n const response: AxiosResponse<SeatMapDataResponse, AxiosRequestConfig> =\n await publicRequest.get(`v1/event/${eventId}/seat-map-data`, { params })\n return response.data\n}\n\nexport const getSeatMapStatuses = async (\n eventId: string | number\n): Promise<SeatMapStatusesResponse> => {\n const response = await publicRequest.get(`v1/event/${eventId}/seats/status`)\n return response.data\n}\n\nexport const reserveSeat = async (\n eventId: string | number,\n tierId: string,\n seatId: string\n) => {\n const response = await publicRequest.post(`v1/event/${eventId}/seats/reserve`, {\n data: {\n tierId,\n seatId,\n ttl: 10,\n },\n })\n return response.data\n}\n\nexport const removeSeatReserve = async (\n eventId: string | number,\n tierId: string,\n seatIds: string[]\n) => {\n const response = await publicRequest.delete(\n `v1/event/${eventId}/seats/delete-reserved`,\n {\n data: {\n tierId,\n seatIds,\n },\n }\n )\n\n return response.data\n}\n\n// seat map <--end-->\nexport function getPixelScript(id: string | number, pageOptions: any) {\n const response = publicRequest.get(`v1/event/${id}/track`, {\n params: {\n page_url: pageOptions.pageUrl,\n page: pageOptions.page,\n order_hash: pageOptions.orderHash,\n },\n })\n return response\n}\n\n// ID Verification\nexport const getNetverifyUrl = async (): Promise<GetNetverifyUrlResponseData> => {\n const response: AxiosResponse<GetNetverifyUrlResponseData, AxiosRequestConfig> =\n await publicRequest.get('v1/authenticate/verify')\n return response.data\n}\n\nexport const checkVerificationStatus = async (): Promise<{\n data: VerificationStatusResponseData;\n}> => {\n const response: AxiosResponse<\n { data: VerificationStatusResponseData },\n AxiosRequestConfig\n > = await publicRequest.get('v1/authenticate/get-verification-info')\n return response.data\n}\n\nexport const updateVerificationStatus = async (): Promise<{\n data: UpdateVerificationStatusResponseData;\n}> => {\n const response: AxiosResponse<\n { data: UpdateVerificationStatusResponseData },\n AxiosRequestConfig\n > = await publicRequest.patch('v1/authenticate/verify', {\n data: {\n attributes: {\n verification: {\n verificationStatus: 'PENDING',\n },\n },\n },\n })\n return response.data\n}\n\nexport const checkCustomerOrder = async (orderHash: string): Promise<any> => {\n const response: AxiosResponse<any, AxiosRequestConfig> = await publicRequest.get(\n `v1/order/${orderHash}/verify-customer-order`\n )\n\n return response.data\n}\n\nexport const refreshSeatReservation = async (eventId: string, orderId: string) => {\n const response: AxiosResponse<any, AxiosRequestConfig> = await publicRequest.patch(\n `event/${eventId}/reservation/refresh/`,\n {\n order_id: orderId,\n }\n )\n return response\n}\n","import { CircularProgress } from '@mui/material'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport React, { useEffect, useState } from 'react'\n\nimport { getCustomFields } from '../../api'\nimport {\n getDataWithCustomFields,\n getFieldsKeys,\n getQueryVariable,\n} from '../../utils'\nimport { getAddOnDataWithCustomFields } from '../../utils/customFields'\n\nconst withCustomFields = (Children: any) => (props: any) => {\n const {\n data = [],\n ticketHoldersFields = {\n id: 1,\n fields: [],\n },\n skipCustomFields = true,\n onGetCustomFieldsError = _identity,\n onGetCustomFieldsSuccess = _identity,\n ...args\n } = props\n\n const [lodaing, setLoading] = useState(!skipCustomFields)\n const [customFieldsData, setCustomFieldsData] = useState({} as any)\n const [customFieldsOrderKeys, setCustomFieldsOrderKeys] = useState([] as any)\n const [customFieldsTicketHolderKeys, setCustomFieldsTicketHolderKeys] = useState([] as any)\n const [customFieldsAddOnKeys, setCustomFieldsAddOnKeys] = useState([] as any)\n\n const getFields = async () => {\n try {\n const eventId = getQueryVariable('event_id') || getQueryVariable(\"eventId\") || ''\n const customFields = await getCustomFields(eventId)\n\n const orderFieldsKeys = getFieldsKeys(_get(customFields, 'orderFields', []))\n const ticketHoldersFieldsKeys = getFieldsKeys(_get(customFields, 'ticketsFields', []))\n const addOnFieldsKeys = getFieldsKeys(_get(customFields, 'addOnFields', []))\n\n setCustomFieldsTicketHolderKeys(ticketHoldersFieldsKeys)\n setCustomFieldsOrderKeys(orderFieldsKeys)\n setCustomFieldsData(customFields)\n setCustomFieldsAddOnKeys(addOnFieldsKeys)\n\n onGetCustomFieldsSuccess(customFields)\n } catch (e) {\n onGetCustomFieldsError(e)\n } finally {\n setLoading(false)\n }\n }\n\n useEffect(() => {\n if (!skipCustomFields) {\n getFields()\n }\n }, [])\n\n const {\n dataWithCustomFields,\n ticketHoldersWithCustomFields,\n } = getDataWithCustomFields(data, ticketHoldersFields, customFieldsData)\n\n const { addOnDataWithCustomFields } = getAddOnDataWithCustomFields(customFieldsData)\n\n if (lodaing) {\n return <CircularProgress size={50} />\n }\n\n return (\n <Children\n {...args}\n data={dataWithCustomFields}\n ticketHoldersFields={ticketHoldersWithCustomFields}\n customFieldsOrderKeys={customFieldsOrderKeys}\n customFieldsTicketHolderKeys={customFieldsTicketHolderKeys}\n customFieldsAddOnKeys={customFieldsAddOnKeys}\n addOnDataWithCustomFields={addOnDataWithCustomFields}\n />\n )\n}\n\nexport { withCustomFields }\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport _get from 'lodash/get'\nimport { useEffect } from 'react'\n\nimport { getPixelScript } from '../api'\nimport { isBrowser } from '../utils'\n\nexport interface pageOptions {\n pageUrl: string;\n page?: string;\n orderHash?: string;\n}\n\nfunction appendScriptsToHeader(code: string) {\n if (isBrowser && code) {\n const tempEl = document.createElement('div')\n tempEl.innerHTML = code\n const scripts = tempEl.getElementsByTagName('script')\n\n for (let index = 0; index < scripts.length; ++index) {\n const script = document.createElement('script')\n script.type = 'text/javascript'\n\n if (scripts[index].src) {\n script.src = scripts[index].src\n } else {\n script.innerHTML = scripts[index].innerHTML\n }\n\n document.head.appendChild(script)\n }\n }\n}\n\nconst addGTagToHeader = (tagId?: string, links?: string[]) => {\n if (document?.head && document?.body && tagId) {\n const script = document.createElement('script')\n script.innerHTML = `(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\n new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\n j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\n 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n })(window,document,'script','dataLayer','${tagId}');`.trim()\n document.head.append(script)\n\n const scriptBody = document.createElement('noscript')\n scriptBody.innerHTML = `<iframe src=\"https://www.googletagmanager.com/ns.html?id=${tagId}\"\n height=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"></iframe>`\n document.body.append(scriptBody);\n\n (window as any).dataLayer = (window as any).dataLayer || [];\n (window as any).gtag = function gtag(...args: any){(window as any).dataLayer.push(args)}\n if (links) {\n (window as any)?.gtag('set', 'linker', {\n 'domains': links\n })\n }\n (window as any).gtag('js', new Date());\n (window as any).gtag('config', tagId)\n }\n}\n\nexport const usePixel = async (\n eventId: string | number,\n options: pageOptions\n) => {\n const getScript = async () => {\n if (!eventId) return\n\n try {\n const response = await getPixelScript(eventId, options)\n const pixels = _get(response, 'data.data.attributes.pixels', '')\n appendScriptsToHeader(pixels)\n const brandGoogleTagKey = _get(response, 'data.data.attributes.brandGoogleTagKey', '')\n const eventGoogleTagKey = _get(response, 'data.data.attributes.eventGoogleTagKey', '')\n const eventGoogleTagManagerLinkerDomains = _get(response, 'data.data.attributes.eventGoogleTagManagerLinkerDomains', '')\n addGTagToHeader(brandGoogleTagKey, eventGoogleTagManagerLinkerDomains)\n if (eventGoogleTagKey) {\n addGTagToHeader(eventGoogleTagKey, eventGoogleTagManagerLinkerDomains)\n }\n } catch (e) {\n console.error(e)\n }\n }\n\n useEffect(() => {\n getScript()\n }, [eventId])\n}","export const emailRegex = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\n\nexport const combineValidators = (...validators: any) => (...value: any) => {\n for (let i = 0; i < validators.length; ++i) {\n const error_message = validators[i](...value)\n if (error_message) return error_message\n }\n}\n\nexport function isFalsy(item: any) {\n try {\n if (\n !item || // handles most, like false, 0, null, etc\n (typeof item === 'object' &&\n Object.keys(item).length === 0 && // for empty objects, like {}, []\n !(typeof item.addEventListener === 'function')) // omit webpage elements\n ) {\n return true\n }\n } catch (err) {\n return true\n }\n\n return false\n}\n\nexport const requiredValidator = (\n value?: string | number | Array<string> | boolean,\n message?: string\n): string => {\n let errorMessage = ''\n\n if (isFalsy(typeof value === 'string' ? value.trim() : value)) {\n errorMessage = message || 'Required'\n }\n return errorMessage\n}\n\nexport const emailValidator = (email: string) =>\n !emailRegex.test(email) ? 'Please enter a valid email address' : ''\n\nexport const passwordValidator = (password: string): string => {\n if (!password || password.length < 6) {\n return 'The password must be at least 6 characters.'\n }\n return ''\n}\n\nexport const confirmPasswordValidator = (confirmPassword: string, password: string): string => {\n if (confirmPassword !== password) {\n return 'Passwords do not match.'\n }\n return ''\n}\n\nexport const confirmEmailValidator = (confirmEmail: string, email: string): string => {\n if (confirmEmail !== email) {\n return 'Emails do not match.'\n }\n return ''\n}\n","export const currencyNormalizerCreator = (\n value: string | number,\n currency: string\n) => (!value ? '' : `${getCurrencySymbolByCurrency(currency)} ${value}`)\n\nexport const createFixedFloatNormalizer = (fixedValue: number) => (\n value: string | number\n) => (value || `${value}` === '0' ? (+value).toFixed(fixedValue) : '')\n\nexport const getCurrencySymbolByCurrency = (currency = '') => {\n switch (currency) {\n case 'GBP':\n return '£'\n case 'EUR':\n return '€'\n case 'INR':\n return '₹'\n case 'JMD':\n return 'J$'\n case 'NZD':\n return 'NZ$'\n case 'MYR':\n return 'RM'\n case 'MXN':\n return 'Mex$'\n case 'SGD':\n return 'S$'\n case 'AUD':\n return 'A$'\n case 'ZAR':\n return 'R'\n case 'ke':\n return 'Ksh'\n case 'TRY':\n return '₺'\n case 'CAD':\n return 'CA$'\n case 'THB':\n return '฿'\n case 'ISK':\n return 'Kr'\n case 'SEK':\n return 'kr'\n default:\n return 'US$'\n }\n}\n\nexport const removePlusSign = (string = '') => string.replace('+', '')\n","import { Modal as MuiModal } from '@mui/material'\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport CircularProgress from '@mui/material/CircularProgress'\nimport _map from 'lodash/map'\nimport React, { FC } from 'react'\n\nexport interface Action {\n id: string;\n label: string;\n onClick: () => void;\n disabled?: boolean;\n loading?: boolean;\n variant?: \"text\" | \"contained\" | \"outlined\";\n}\n\ninterface Props {\n onClose?: () => void;\n actions: Action[];\n modalClassName?: string;\n}\n\nconst style: React.CSSProperties = {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n minWidth: 480,\n backgroundColor: '#e3e3e3',\n border: '1px solid white',\n outline: 'none',\n padding: '14px',\n maxHeight: '85vh',\n overflow: 'auto',\n}\n\nconst Modal: FC<Props> = ({\n onClose,\n actions = [],\n children,\n modalClassName = '',\n}) => (\n <MuiModal\n open={true}\n onClose={onClose}\n aria-labelledby=\"modal-modal-title\"\n aria-describedby=\"modal-modal-description\"\n className={`confirm-modal ${modalClassName}`}\n >\n <Box style={style}>\n <div className=\"modal-body\">{children}</div>\n <div className=\"footer\">\n {_map(actions, (action: Action) => (\n <Button\n key={action.id}\n onClick={action.onClick}\n disabled={action.disabled || action.loading}\n variant={action.variant || \"text\"}\n >\n {action.loading ? <CircularProgress size=\"22px\" /> : action.label}\n </Button>\n ))}\n </div>\n </Box>\n </MuiModal>\n)\n\nexport default Modal\n","import React, { useEffect, useState } from 'react'\n\nimport Modal, { Action } from '../common/ModalComponent'\n\ninterface IDVerificationProps {\n message?: string | null;\n displayModal?: boolean;\n actions?: Action[];\n onClose?: () => void;\n}\n\nexport const VerificationPendingModal = (props: IDVerificationProps) => {\n const { message, displayModal, actions, onClose } = props\n const [showModal, setShowModal] = useState(false)\n\n useEffect(() => {\n if (displayModal === undefined) {\n setShowModal(Boolean(message))\n }\n }, [message, displayModal])\n\n return showModal || displayModal ? (\n <div>\n <Modal\n modalClassName=\"id-verification-modal\"\n actions={\n actions || [\n {\n id: 'okay',\n label: 'OK',\n variant: 'contained',\n onClick: () => {\n setShowModal(false)\n\n if (onClose) {\n onClose()\n }\n },\n },\n ]\n }\n >\n <div>{message}</div>\n </Modal>\n </div>\n ) : null\n}\n","import React from \"react\"\n\nconst InfoIcon = ({ size = 17 }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 17 17\"\n fill=\"none\"\n >\n <circle\n cx=\"8.5\"\n cy=\"8.5\"\n r=\"8\"\n stroke=\"black\"\n strokeWidth=\"1\"\n />\n <rect\n x=\"7.5\"\n y=\"4\"\n width=\"2\"\n height=\"2\"\n fill=\"black\"\n />\n <rect\n x=\"7.5\"\n y=\"7\"\n width=\"2\"\n height=\"5\"\n fill=\"black\"\n />\n </svg>\n)\n\nexport default InfoIcon","import _isNumber from 'lodash/isNumber'\n\nexport const showZero = (value = 0) => {\n const intNumber = Number(value)\n return _isNumber(intNumber)\n ? intNumber >= 0 && intNumber < 10\n ? '0' + intNumber\n : intNumber\n : null\n}\n","import './style.css'\n\nimport _identity from 'lodash/identity'\nimport React, { memo, useState } from 'react'\nimport Countdown from 'react-countdown'\nimport ReactDOM from 'react-dom'\nimport SVG from 'react-inlinesvg'\n\nimport Cross from '../../assets/images/cross.svg'\nimport { showZero } from '../../utils/showZero'\n\nexport interface ITimerWidgetPage {\n expires_at: number;\n buyLoading?: boolean;\n onCountdownFinish?: () => void;\n container?: string;\n}\n\nexport interface IRenderer {\n minutes: number;\n seconds: number;\n completed: number;\n handleCountdownFinish: () => void;\n}\n\nconst TimerWidget = ({\n expires_at,\n buyLoading,\n onCountdownFinish = _identity,\n container,\n}: ITimerWidgetPage) => {\n const [showTimer, setShowTimer] = useState(true)\n\n const handleCountdownFinish = () => {\n setShowTimer(false)\n if (!buyLoading) {\n onCountdownFinish()\n }\n }\n\n const renderer = ({\n minutes,\n seconds,\n completed,\n handleCountdownFinish,\n }: IRenderer) => {\n if (completed) {\n handleCountdownFinish()\n return null\n }\n return (\n <span>\n {showZero(minutes)}:{showZero(seconds)}\n </span>\n )\n }\n\n const hideTimer = () => {\n const timerRl: HTMLElement | null = document.querySelector('.timer')\n if (timerRl) {\n timerRl.style.visibility = 'hidden'\n }\n }\n\n const timerComponent = (\n <div className=\"timer\">\n <div aria-hidden className=\"close-icon\" onClick={hideTimer}>\n <SVG src={Cross} width=\"10\" height=\"10\" fill=\"#fff\" />\n </div>\n <div className=\"toast-message\">\n <p>Please complete your purchase before the timer reaches zero.</p>\n <p className=\"countdown\">\n <Countdown\n date={Date.now() + expires_at * 1000}\n renderer={(props: any) =>\n renderer({\n ...props,\n handleCountdownFinish,\n })\n }\n />\n </p>\n </div>\n </div>\n )\n\n return showTimer && !!expires_at\n ? container\n ? ReactDOM.createPortal(\n timerComponent,\n document.querySelector(container) as HTMLElement\n )\n : timerComponent\n : null\n}\n\nexport default memo(TimerWidget)\n","import _get from 'lodash/get'\nimport _isEmpty from 'lodash/isEmpty'\n\nexport interface IAddOnsData {\n add_on_groups: Array<{ [key: string]: any }>;\n add_ons: Array<[]>;\n}\n\nexport const addonsWithGroupsAdapter = (data: IAddOnsData) => {\n const addonsData = { ...data }\n const addOnsGroups = _get(addonsData, 'add_on_groups', [])\n const addons = _get(addonsData, 'add_ons', [])\n\n if (!_isEmpty(addOnsGroups)) {\n const addOnGroupsWithVariants: any = []\n const addOnsWithoutVariants: any = []\n\n addons.forEach((addon: any) => {\n if (addon.attributes.addOnGroupId) {\n // Collect addons groups inside with their variants\n const currentGroupId = addon.attributes.addOnGroupId\n const exsistingGroupIndex = addOnGroupsWithVariants.findIndex(\n (item: any) => item.id === currentGroupId\n )\n\n if (addOnGroupsWithVariants[exsistingGroupIndex]) {\n const addOnGroup = addOnGroupsWithVariants[exsistingGroupIndex]\n addOnGroupsWithVariants[exsistingGroupIndex] = {\n ...addOnGroup,\n variants: [...addOnGroup.variants, ...addon.attributes],\n }\n } else {\n const group =\n addOnsGroups.find(group => group.attributes.id === currentGroupId) || {}\n\n addOnGroupsWithVariants.push({\n ...group.attributes,\n variants: [...addon.attributes],\n })\n }\n } else {\n addOnsWithoutVariants.push(addon.attributes)\n }\n })\n\n return addOnGroupsWithVariants.concat(addOnsWithoutVariants)\n }\n\n // Adapt only simple addons data\n const adaptedAddons = (addons as any[]).map((addon: any) => ({\n ...addon.attributes,\n }))\n return adaptedAddons\n}\n\nexport const cartAdapter = (cart: any) => {\n const cartData = _get(cart, 'data.attributes', [])\n const { expiresAt, cart: carts_arr } = cartData\n const { id, quantity } = carts_arr[0] || {}\n\n return { id, quantity, expiresAt }\n}\n","import { FormControl, FormHelperText } from '@mui/material'\nimport Checkbox from '@mui/material/Checkbox'\nimport FormControlLabel from '@mui/material/FormControlLabel'\nimport FormGroup from '@mui/material/FormGroup'\nimport { useTheme } from '@mui/styles'\nimport { FieldInputProps, FormikProps } from 'formik'\nimport _get from 'lodash/get'\nimport React from 'react'\n\ninterface ICheckboxField {\n label: string | number | JSX.Element;\n field: FieldInputProps<any>;\n form: FormikProps<any>;\n}\n\nexport const CheckboxField = ({\n label,\n field,\n form: { touched, errors },\n}: ICheckboxField) => {\n const isTouched = Boolean(_get(touched, field.name, false))\n const errorText = _get(errors, field.name)\n const hasError = isTouched && Boolean(errorText)\n const customTheme: any = useTheme()\n\n return (\n <FormControl\n className={`checkbox-field ${hasError ? 'required-checkbox-field' : ''}`}\n error={hasError}\n >\n <FormGroup>\n <FormControlLabel\n control={<Checkbox {...field} checked={Boolean(field.value)} />}\n label={label}\n componentsProps={{ typography: customTheme?.checkbox }}\n />\n </FormGroup>\n {hasError && <FormHelperText>Required</FormHelperText>}\n </FormControl>\n )\n}\n","import { FormControl, FormHelperText } from '@mui/material'\nimport CheckboxMaterial from '@mui/material/Checkbox'\nimport FormControlLabel from '@mui/material/FormControlLabel'\nimport FormGroup from '@mui/material/FormGroup'\nimport { useTheme } from '@mui/styles'\nimport { FieldInputProps } from 'formik'\nimport React from 'react'\n\nexport interface ICheckboxField {\n label: string | number | JSX.Element;\n field?: FieldInputProps<any>;\n}\n\ninterface IOtherProps {\n [key: string]: any;\n}\n\nexport const Checkbox = ({\n label,\n field,\n selectOptions,\n theme,\n setFieldValue,\n disableDropdown,\n setPhoneValidationIsLoading,\n defaultCountry,\n required,\n uniqueId,\n dateFormat,\n datePlaceholder,\n isCountryCodeEditable,\n ...rest\n}: ICheckboxField & IOtherProps) => {\n const customTheme: any = useTheme()\n return (\n <FormControl error={!!(rest?.form?.errors && rest.form.errors[field?.name ?? ''])}>\n <FormGroup>\n <FormControlLabel\n control={<CheckboxMaterial {...field} {...rest} />}\n label={label}\n componentsProps={{\n typography: customTheme?.checkbox,\n }}\n />\n </FormGroup>\n {rest?.form?.errors && rest.form.errors[field?.name ?? ''] ? (\n <FormHelperText>Required</FormHelperText>\n ) : null}\n </FormControl>\n )\n}\n","/* eslint-disable no-underscore-dangle */\n/* eslint-disable import/no-unresolved */\nimport Visibility from '@mui/icons-material/Visibility'\nimport VisibilityOff from '@mui/icons-material/VisibilityOff'\nimport IconButton from '@mui/material/IconButton'\nimport InputAdornment from '@mui/material/InputAdornment'\nimport MenuItem from '@mui/material/MenuItem'\nimport TextField from '@mui/material/TextField'\nimport { useTheme } from '@mui/styles'\nimport { FieldInputProps, FormikProps } from 'formik'\nimport _get from 'lodash/get'\nimport _includes from 'lodash/includes'\nimport _isFunction from 'lodash/isFunction'\nimport _isObject from 'lodash/isObject'\nimport _map from 'lodash/map'\nimport React, { useEffect, useRef, useState } from 'react'\n\nexport interface ISelectOption {\n label: string | number;\n value?: string | number;\n [key: string]: any;\n}\n\nexport interface ICustomField {\n onChange?: (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;\n label: string;\n field: FieldInputProps<any>;\n form: FormikProps<any>;\n theme: 'dark' | 'light';\n // optional\n type?: string;\n selectOptions?: ISelectOption[];\n inputRef?:\n | { current: HTMLInputElement | null }\n | ((node: HTMLInputElement | null) => void);\n multiline?: boolean;\n minRows?: string | number;\n maxRows?: string | number;\n}\n\nexport interface IOtherProps {\n [key: string]: any;\n}\n\nexport const CustomField = ({\n label,\n type = 'text',\n field,\n selectOptions = [] as ISelectOption[],\n form: { touched, errors, submitCount },\n theme,\n inputProps: pInputProps = {},\n InputProps = {},\n inputRef,\n onChange,\n multiline = false,\n minRows = 3,\n maxRows,\n disabled,\n}: ICustomField & IOtherProps) => {\n const [isShrinked, setIsShrinked] = useState(Boolean(field.value))\n const [showPassword, setShowPassword] = useState(false)\n const _ref = useRef<HTMLInputElement>(null)\n const isAutoFilled = _ref.current?.matches ? _ref.current?.matches(':-webkit-autofill') : false\n const isSelectField = type === 'select'\n const isPasswordField = type === 'password'\n const error = _get(errors, field.name)\n const isTouched =\n Boolean(_get(touched, field.name)) ||\n (_includes(field.name, 'holder') && !!error && !!submitCount)\n\n const customTheme: any = useTheme()\n const inputProps: any = { sx: customTheme?.input }\n\n const handleClickShowPassword = () => {\n setShowPassword(!showPassword)\n }\n\n const handleMouseDownPassword = (event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault()\n }\n\n const finalInputProps = isPasswordField\n ? {\n ...InputProps,\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n aria-label=\"toggle password visibility\"\n onClick={handleClickShowPassword}\n onMouseDown={handleMouseDownPassword}\n edge=\"end\"\n size=\"small\"\n sx={{ color: customTheme?.input?.color || 'inherit' }}\n >\n {showPassword ? <VisibilityOff /> : <Visibility />}\n </IconButton>\n </InputAdornment>\n ),\n }\n : InputProps\n\n useEffect(() => {\n if (_isFunction(inputRef)) {\n inputRef(_ref.current)\n } else if (_isObject(inputRef)) {\n inputRef.current = _ref.current\n }\n })\n\n return (\n <TextField\n disabled={disabled}\n placeholder=\"\"\n id={field.name}\n label={label}\n type={isPasswordField ? (showPassword ? 'text' : 'password') : type}\n select={isSelectField}\n fullWidth={true}\n error={!!error && isTouched}\n helperText={isTouched && error}\n onFocus={() => {\n setIsShrinked(true)\n }}\n SelectProps={{\n native: false,\n className: theme,\n MenuProps: {\n className: theme,\n PaperProps: {\n sx: {\n '& .MuiMenuItem-root': {\n paddingLeft: '16px',\n paddingRight: '16px',\n },\n },\n },\n },\n }}\n InputLabelProps={{\n sx: customTheme?.input,\n shrink: isSelectField || isShrinked || Boolean(field.value) || isAutoFilled,\n }}\n InputProps={finalInputProps}\n inputProps={{ ...inputProps, ...pInputProps }}\n inputRef={_ref}\n multiline={multiline}\n minRows={minRows}\n maxRows={maxRows}\n {...field}\n onBlur={(e: React.FocusEvent<any, Element>) => {\n setIsShrinked(Boolean(field.value))\n if (field.onBlur) {\n field.onBlur(e)\n }\n }}\n onChange={onChange ?? field.onChange}\n >\n {isSelectField\n ? _map(selectOptions, option => (\n <MenuItem key={option.value} value={option.value} disabled={option.disabled}>\n {option.label}\n </MenuItem>\n ))\n : null}\n </TextField>\n )\n}\n","import { FieldInputProps, FormikProps } from 'formik'\nimport _debounce from 'lodash/debounce'\nimport _get from 'lodash/get'\nimport MuiPhoneNumber from 'material-ui-phone-number'\nimport React, { useCallback, useEffect } from 'react'\n\nimport { validatePhoneNumber } from '../../api'\n\nexport interface IPhoneNumberField {\n label: string;\n field: FieldInputProps<any>;\n form: FormikProps<any>;\n type: string;\n disableDropdown: boolean;\n fill: boolean;\n setPhoneValidationIsLoading: (isLoading: boolean) => void;\n\n // optional\n defaultCountry?: string;\n isCountryCodeEditable?: boolean;\n}\n\nexport const PhoneNumberField = ({\n label,\n field,\n form: {\n errors,\n touched,\n setFieldError,\n values,\n initialValues,\n setFieldValue,\n setFieldTouched,\n setErrors,\n submitCount,\n },\n disableDropdown = true,\n defaultCountry = 'us',\n fill = false,\n setPhoneValidationIsLoading,\n isCountryCodeEditable,\n}: IPhoneNumberField) => {\n const error = _get(errors, field.name)\n const isTouched = Boolean(_get(touched, field.name))\n const isSubmitAttempted = Boolean(submitCount && submitCount > 0)\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const debounceCb = useCallback(\n _debounce((cb: () => void) => void cb(), 1000),\n []\n )\n\n useEffect(() => {\n if (field.value) {\n setPhoneValidationIsLoading(true)\n }\n\n debounceCb(async () => {\n try {\n if (!values[field.name]) {\n const newErrors = { ...errors }\n delete newErrors[field.name]\n setErrors(newErrors)\n return\n }\n if (values[field.name]) {\n await validatePhoneNumber(values[field.name])\n }\n if (errors[field.name]) {\n const newErrors = { ...errors }\n delete newErrors[field.name]\n setErrors(newErrors)\n }\n } catch (error) {\n const message = _get(\n error,\n 'response.data.message',\n 'Invalid phone number'\n )\n if (values[field.name] && errors[field.name] !== message) {\n setFieldError(field.name, message)\n }\n } finally {\n setPhoneValidationIsLoading(false)\n }\n })\n // eslint-disable-next-line\n }, [field.value])\n\n return (\n <>\n <MuiPhoneNumber\n name={field.name}\n value={fill ? values[field.name] : initialValues[field.name]}\n onChange={(value: any, country?: any) => {\n if (`+${country?.dialCode}` === value || value === '+') {\n setFieldValue(field.name, '')\n setFieldError(field.name, '')\n } else {\n setFieldTouched(field.name, true)\n setFieldValue(field.name, value)\n }\n }}\n variant=\"outlined\"\n defaultCountry={defaultCountry}\n disableDropdown={disableDropdown}\n label={label}\n error={!!error && (isTouched || fill || isSubmitAttempted)}\n helperText={(isTouched || fill || isSubmitAttempted) && error}\n fullWidth\n autoFormat={false}\n disableAreaCodes={true}\n countryCodeEditable={isCountryCodeEditable}\n />\n </>\n )\n}\n","import CircularProgress from '@mui/material/CircularProgress'\nimport React from 'react'\n\nexport const Loader = () => (\n <div className=\"loader-container\">\n <CircularProgress />\n </div>\n)\n","import { FormControl, InputLabel } from '@mui/material'\nimport Checkbox from '@mui/material/Checkbox'\nimport FormHelperText from '@mui/material/FormHelperText'\nimport ListItemText from '@mui/material/ListItemText'\nimport MenuItem from '@mui/material/MenuItem'\nimport OutlinedInput from '@mui/material/OutlinedInput'\nimport Select, { SelectChangeEvent } from '@mui/material/Select'\nimport { FieldInputProps, FormikProps } from 'formik'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport _map from 'lodash/map'\nimport React from 'react'\n\ninterface ISelectOption {\n id: string | number;\n label: string | number;\n value: string | number;\n}\n\ninterface ISelectField {\n field: FieldInputProps<any>;\n form: FormikProps<any>;\n options: ISelectOption[];\n\n // optional\n label?: string;\n isMultiple?: boolean;\n disabled?: boolean;\n onChange?: (e: SelectChangeEvent<string[]>) => void;\n}\n\nfunction SelectField({\n label,\n isMultiple,\n field,\n form: { touched, errors, setFieldValue },\n options = [],\n disabled,\n onChange = _identity,\n}: ISelectField) {\n const { name, value = [] } = field\n const selectId = `select-field-${name}`\n const error = _get(errors, name)\n const isTouched = Boolean(_get(touched, field.name))\n\n const handleChange = (event: SelectChangeEvent<string[]>) => {\n const {\n target: { value },\n } = event\n\n setFieldValue(name, value)\n onChange(event)\n }\n\n const getSelectedItemLabel = (selectedValue: any) => {\n const selectedItem = options.find(option => option.value === selectedValue)\n const label = _get(selectedItem, 'label', '')\n return label\n }\n\n return (\n <>\n <FormControl\n fullWidth={true}\n disabled={disabled}\n error={isTouched && Boolean(error)}\n >\n {label && <InputLabel id={selectId}>{label}</InputLabel>}\n <Select\n id={name}\n labelId={selectId}\n multiple={isMultiple}\n value={value || []}\n onChange={handleChange}\n input={<OutlinedInput label={label} />}\n renderValue={selected => {\n if (isMultiple) {\n const selectedLabels = _map(selected, (selectedValue: string) =>\n getSelectedItemLabel(selectedValue)\n )\n return selectedLabels.join(', ')\n }\n\n const selectedLabel = getSelectedItemLabel(selected)\n return selectedLabel\n }}\n sx={{ textAlign: 'start' }}\n >\n {options?.map((option: ISelectOption) => (\n <MenuItem key={option.label} value={option.value}>\n {isMultiple && <Checkbox checked={value.indexOf(option.value) > -1} />}\n <ListItemText primary={option.label} />\n </MenuItem>\n ))}\n </Select>\n {isTouched && Boolean(error) ? (\n <FormHelperText error>{error}</FormHelperText>\n ) : null}\n </FormControl>\n </>\n )\n}\n\nexport { SelectField }\n","import Modal from '@mui/material/Modal'\nimport React from 'react'\n\ninterface ICopyMessageModalProps {\n showCopyModal: boolean;\n onClose: () => void;\n}\n\nexport const CopyMessageModal = (props: ICopyMessageModalProps) => {\n const { showCopyModal = false, onClose } = props\n return (\n <Modal\n open={showCopyModal}\n onClose={onClose}\n aria-labelledby=\"modal-modal-title\"\n aria-describedby=\"modal-modal-description\"\n className=\"success-copy-modal\"\n >\n <div className=\"message-copy-success-box\">\n <div className=\"message-copy-success\">\n <span>\n Copied to your clipboard! Now paste your link in a Snapchat message,\n </span>\n <span>your Instagram bio, Whatsapp, Facebook or a text :)</span>\n </div>\n <div className=\"footer\">\n <button className=\"footer-button\" type=\"button\" onClick={onClose}>\n OK\n </button>\n </div>\n </div>\n </Modal>\n )\n}\n","import { ThemeOptions } from '@mui/material'\nimport { createTheme, ThemeProvider } from '@mui/material/styles'\nimport { CSSProperties } from '@mui/styles'\nimport { DatePicker } from '@mui/x-date-pickers'\nimport { AdapterMoment } from '@mui/x-date-pickers/AdapterMoment'\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'\nimport { FieldInputProps, FormikProps } from 'formik'\nimport React from 'react'\n\nimport { CustomField } from './CustomField'\n\nconst DATE_SIZE = 32\nconst compactStyles = {\n '& > div': {\n minWidth: 256,\n },\n '& > div > div, & > div > div > div, & .MuiCalendarPicker-root': {\n width: 256,\n },\n '& .MuiTypography-caption': {\n width: DATE_SIZE,\n margin: 0,\n },\n '& .PrivatePickersSlideTransition-root': {\n minHeight: DATE_SIZE * 6,\n },\n '& .PrivatePickersSlideTransition-root [role=\"row\"]': {\n margin: 0,\n },\n '& .MuiPickersDay-dayWithMargin': {\n margin: 0,\n },\n '& .MuiPickersDay-root': {\n width: DATE_SIZE,\n height: DATE_SIZE,\n },\n '& .MuiPickersArrowSwitcher-spacer': {\n width: 0,\n },\n '& [role=\"presentation\"] .PrivatePickersFadeTransitionGroup-root': {\n marginRight: -1,\n },\n}\n\nconst getTheme = (isCompact: boolean, baseThemeOptions?: object | null) => {\n if (isCompact) {\n return createTheme(\n Object.assign(baseThemeOptions ?? {}, {\n components: {\n MuiPaper: {\n defaultProps: {\n sx: compactStyles,\n },\n },\n },\n })\n )\n }\n\n return createTheme(baseThemeOptions ?? {})\n}\n\nexport interface IDatePickerFieldProps {\n label: string;\n\n field: FieldInputProps<any>;\n form: FormikProps<any>;\n theme: 'dark' | 'light';\n themeOptions?: ThemeOptions & {\n input?: CSSProperties;\n checkbox?: CSSProperties;\n };\n\n useCompact?: boolean;\n}\n\ninterface IOtherProps {\n [key: string]: any;\n}\n\nexport const DatePickerField = ({\n label,\n field,\n form,\n theme,\n useCompact = true,\n themeOptions,\n dateFormat = 'DD/MM/YYYY',\n placeholder = 'dd/mm/yyyy',\n}: IDatePickerFieldProps & IOtherProps) => (\n <ThemeProvider theme={getTheme(useCompact, themeOptions ?? null)}>\n <LocalizationProvider dateAdapter={AdapterMoment}>\n <DatePicker\n value={field.value || ''}\n onChange={value => form.setFieldValue(field.name, value)}\n PopperProps={{\n placement: 'bottom-start',\n }}\n showDaysOutsideCurrentMonth={true}\n disableFuture={true}\n inputFormat={dateFormat}\n mask=\"__/__/____\"\n renderInput={(params: any) => (\n <CustomField\n {...params}\n inputProps={{ ...params.inputProps, placeholder }}\n theme={theme}\n field={{\n ...field,\n onChange: (\n evt: React.FormEvent<HTMLInputElement | HTMLTextAreaElement>\n ) => {\n if (params.inputProps && params.inputProps.onChange) {\n params.inputProps.onChange(evt)\n }\n },\n }}\n form={form}\n label={label}\n type=\"tel\"\n />\n )}\n />\n </LocalizationProvider>\n </ThemeProvider>\n)\n","import { FormControl, FormHelperText, InputLabel } from '@mui/material'\nimport Select from '@mui/material/Select'\nimport { useTheme } from '@mui/styles'\nimport { FieldInputProps, FormikProps } from 'formik'\nimport _get from 'lodash/get'\nimport _map from 'lodash/map'\nimport React from 'react'\n\nexport interface ISelectOption {\n label: string | number;\n value?: string | number;\n [key: string]: any;\n}\n\nexport interface ISelectField {\n label: string;\n\n field: FieldInputProps<any>;\n form: FormikProps<any>;\n theme: 'dark' | 'light';\n\n // optional\n type?: string;\n selectOptions?: ISelectOption[];\n onChange?: (e: any) => void;\n}\n\ninterface IOtherProps {\n [key: string]: any;\n}\n\nexport const NativeSelectField = ({\n label,\n type = 'text',\n field,\n selectOptions = [] as ISelectOption[],\n form: { touched, errors, setFieldValue },\n theme,\n onChange = () => {},\n}: ISelectField & IOtherProps) => {\n const isTouched = Boolean(_get(touched, field.name))\n const error = _get(errors, field.name)\n\n const customTheme: any = useTheme()\n\n return (\n <FormControl fullWidth={true}>\n <InputLabel\n style={customTheme?.input}\n htmlFor={field.name}\n error={!!error && isTouched}\n shrink={true}\n >\n {label}\n </InputLabel>\n <Select\n id={field.name}\n label={label}\n type={type}\n fullWidth={true}\n error={!!error && isTouched}\n inputProps={{\n id: field.name,\n }}\n native={true}\n className={`Mui-Select ${theme}`}\n MenuProps={{ className: theme }}\n {...field}\n style={customTheme?.input}\n onChange={e => {\n onChange(e)\n setFieldValue(field.name, e.target.value)\n }}\n >\n {_map(selectOptions, option => (\n <option key={option.value} value={option.value} disabled={option.disabled}>\n {option.label}\n </option>\n ))}\n </Select>\n {isTouched && error ? (\n <FormHelperText error={!!error && isTouched}>{error}</FormHelperText>\n ) : null}\n </FormControl>\n )\n}\n","import FormControl from '@mui/material/FormControl'\nimport FormControlLabel from '@mui/material/FormControlLabel'\nimport FormHelperText from '@mui/material/FormHelperText'\nimport FormLabel from '@mui/material/FormLabel'\nimport Radio from '@mui/material/Radio'\nimport RadioGroup from '@mui/material/RadioGroup'\nimport { FieldInputProps, FormikProps } from 'formik'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport React from 'react'\n\nexport interface IRadio {\n id: string | number;\n label: string | number;\n value: string | number;\n [key: string]: any;\n}\n\nexport interface IRadioGroupField {\n label?: string;\n field: FieldInputProps<any>;\n form: FormikProps<any>;\n radios: IRadio[];\n disabled?: boolean;\n onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\nexport const RadioGroupField = ({\n label,\n field,\n radios = [],\n disabled,\n form: { touched, errors, setFieldValue },\n onChange = _identity,\n}: IRadioGroupField) => {\n const radioId = `radio-${field.name}`\n const error = _get(errors, field.name)\n const isTouched = Boolean(_get(touched, field.name))\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const { value } = e.target as HTMLInputElement\n setFieldValue(field.name, value)\n onChange(e)\n }\n\n if (!radios) return null\n\n return (\n <FormControl disabled={disabled} error={isTouched && Boolean(error)}>\n {isTouched && Boolean(error) ? (\n <FormHelperText className=\"radio-error\" error>\n {error}\n </FormHelperText>\n ) : null}\n {label && <FormLabel id={radioId}>{label}</FormLabel>}\n <RadioGroup\n aria-labelledby={radioId}\n name={field.name}\n value={field.value}\n onChange={handleChange}\n >\n {radios.map(radio => {\n const { id, label, value } = radio\n return (\n <FormControlLabel\n key={id}\n label={label}\n value={value}\n control={<Radio />}\n />\n )\n })}\n </RadioGroup>\n </FormControl>\n )\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { FormikErrors, FormikValues } from 'formik'\nimport _flatMapDeep from 'lodash/flatMapDeep'\nimport _forEach from 'lodash/forEach'\nimport _get from 'lodash/get'\nimport _isArray from 'lodash/isArray'\nimport _isEmpty from 'lodash/isEmpty'\nimport _map from 'lodash/map'\nimport { nanoid } from 'nanoid'\nimport React from 'react'\n\nimport { AttributesConfig } from '../../api'\nimport { IGroupItem } from '../../types'\nimport { CONFIGS } from '../../utils'\nimport { combineValidators, requiredValidator } from '../../validators'\nimport {\n CheckboxField,\n CustomField,\n DatePickerField,\n PhoneNumberField,\n RadioGroupField,\n SelectField,\n} from '../common/index'\n\nexport interface ILoggedInValues {\n emailLogged?: string;\n firstNameLogged?: string;\n lastNameLogged?: string;\n phoneLogged?: string;\n}\n\nexport interface IValues {\n [key: string]: any;\n}\n\nexport const getInitialValues = (\n data: any = [],\n propsInitialValues: IValues = {},\n userValues: any = {},\n ticketHoldersFields: any = {},\n ticketsQuantity: any = []\n): IValues => {\n const results = _flatMapDeep(data, ({ fields }) =>\n _map(fields, ({ groupItems }) =>\n _map(groupItems, ({ name, value }) => ({ name, value }))\n )\n )\n\n // Add Ticket Holder default values for custom fields\n const ticketHoldersCustomFields =\n ticketHoldersFields?.fields?.find((groupItem: any) => groupItem.customFields)\n ?.groupItems || []\n const ticketHoldersCustomFieldsInitValues = {} as IValues\n const selectedTicketsCount =\n ticketsQuantity.length || localStorage.getItem('selectedTicketsQuantity') || 0\n\n if (!_isEmpty(ticketHoldersCustomFields)) {\n for (const customField of ticketHoldersCustomFields) {\n for (let i = 0; i < selectedTicketsCount; i++) {\n const fieldName = `${customField.name}-${i}`\n const fieldValue = customField.value\n ticketHoldersCustomFieldsInitValues[fieldName] = fieldValue\n }\n }\n }\n\n const initialValues: IValues = {}\n _forEach(results, groupItem => {\n const { name, value } = groupItem\n initialValues[name] = value || propsInitialValues[name] || userValues[name] || ''\n })\n\n // set logged in user as first ticket holder\n initialValues['holderFirstName-0'] =\n propsInitialValues.firstName || userValues.firstName || ''\n initialValues['holderLastName-0'] =\n propsInitialValues.lastName || userValues.lastName || ''\n initialValues['holderEmail-0'] = propsInitialValues.email || userValues.email || ''\n initialValues['holderPhone-0'] = propsInitialValues.phone || userValues.phone || ''\n\n return { ...initialValues, ...ticketHoldersCustomFieldsInitValues }\n}\n\nexport const createRegisterFormData = (\n values: IValues = {},\n checkoutBody: { attributes: { [key: string]: any } },\n flagFreeTicket = false\n): FormData => {\n const bodyFormData = new FormData()\n bodyFormData.append('first_name', values.firstName)\n bodyFormData.append('last_name', values.lastName)\n bodyFormData.append('email', values.email)\n bodyFormData.append('password', values.password)\n bodyFormData.append('password_confirmation', values.confirmPassword)\n bodyFormData.append(\n 'client_id',\n CONFIGS.CLIENT_ID || 'e9d8f8922797b4621e562255afe90dbf'\n )\n bodyFormData.append(\n 'client_secret',\n CONFIGS.CLIENT_SECRET || 'b89c191eff22fdcf84ac9bfd88d005355a151ec2c83b26b9'\n )\n bodyFormData.append('check_cart_expiration', 'true')\n\n _forEach(checkoutBody.attributes, (item: any, key: string) => {\n if (\n !(flagFreeTicket && ['country', 'state', 'city', 'street_address'].includes(key))\n ) {\n bodyFormData.append(key, item)\n }\n })\n\n return bodyFormData\n}\n\nexport interface ICheckoutBody {\n attributes: {\n [key: string]: any;\n };\n data_capture?: {\n [key: string]: any;\n };\n}\n\ninterface IticketHolder {\n first_name?: string;\n last_name?: string;\n phone?: string;\n email?: string;\n}\n\nexport const createCheckoutDataBody = (\n ticketsQuantity: number,\n values: IValues = {},\n logedInValues: ILoggedInValues = {},\n includeDob = false\n): ICheckoutBody => {\n const { firstName, lastName, holderAge, confirmEmail, confirmPassword, ...restValues } =\n values\n\n const holders = []\n let ticket_holders: IticketHolder[] = []\n\n for (let i = 0; i <= ticketsQuantity; i++) {\n const individualHolder = Object.fromEntries(\n Object.entries(values).filter(([key, _val]) => key.includes(String(i)))\n )\n holders.push(individualHolder)\n }\n\n const filteredHolders = holders.filter(holder => Object.entries(holder).length > 0)\n ticket_holders = filteredHolders.map((item, index) => ({\n first_name: !index\n ? item[`holderFirstName-${index}`] || logedInValues.firstNameLogged || ''\n : item[`holderFirstName-${index}`] || '',\n last_name: !index\n ? item[`holderLastName-${index}`] || logedInValues.lastNameLogged || ''\n : item[`holderLastName-${index}`] || '',\n phone: !index\n ? item[`holderPhone-${index}`] || logedInValues.phoneLogged || ''\n : item[`holderPhone-${index}`] || '',\n email: !index\n ? item[`holderEmail-${index}`] || logedInValues.emailLogged || ''\n : item[`holderEmail-${index}`] || '',\n }))\n\n const filteredRestValue: { [key: string]: any } = {}\n _forEach(restValues, (value, key) => {\n if (!key.includes('holder')) {\n filteredRestValue[key] = value\n }\n })\n\n const body: ICheckoutBody = {\n attributes: {\n ...filteredRestValue,\n email: restValues.email || logedInValues.emailLogged,\n confirm_email: restValues.email || logedInValues.emailLogged,\n first_name: firstName || logedInValues.firstNameLogged,\n last_name: lastName || logedInValues.lastNameLogged,\n ticket_holders,\n },\n }\n\n if (includeDob) {\n const holderAgeDate = new Date(holderAge)\n body.attributes.dob_day = holderAgeDate.getDate()\n body.attributes.dob_month = holderAgeDate.getMonth() + 1\n body.attributes.dob_year = holderAgeDate.getFullYear()\n }\n return body\n}\n\nexport const getValidateFunctions = (\n element: IGroupItem,\n states: Array<{ [key: string]: any }>,\n values: FormikValues,\n errors: FormikErrors<any>\n) => {\n const validationFunctions: any[] = []\n\n if (element.required) {\n if (element.name !== 'state' || (element.name === 'state' && states.length)) {\n validationFunctions.push(requiredValidator)\n }\n }\n\n if (element.onValidate) {\n validationFunctions.push(element.onValidate)\n }\n\n if (element.name === 'phone') {\n const invalidPhone = () =>\n errors.phone === 'Invalid phone number' ? 'Invalid phone number' : null\n validationFunctions.push(invalidPhone)\n }\n\n if (element.name === 'confirmEmail') {\n const isSameEmail = (confirmEmail?: string) =>\n values.email !== confirmEmail ? 'Please confirm your email address correctly' : null\n validationFunctions.push(isSameEmail)\n }\n\n if (element.name === 'confirmPassword') {\n const isSame = (confirmPassword?: string) =>\n values.password !== confirmPassword ? 'Password confirmation does not match' : null\n validationFunctions.push(isSame)\n }\n\n return combineValidators(...validationFunctions)\n}\n\nexport const assingUniqueIds = (data: any): any => {\n if (_get(data[0], 'uniqueId')) {\n return data\n }\n\n return _map(data, (item: any) => {\n _forEach(item, (itemValue: string, key) => {\n if (_isArray(itemValue) && !itemValue.some(item => typeof item === 'string')) {\n item[key] = assingUniqueIds(itemValue)\n }\n })\n\n return { ...item, uniqueId: nanoid() }\n })\n}\n\nexport const isRequiredField = (\n element: IGroupItem,\n configs?: null | AttributesConfig\n) => {\n const { name, required } = element\n const flagRequirePhone = _get(configs, 'phone_required', false)\n const collectMandatoryWalletAddress = _get(\n configs,\n 'collect_mandatory_wallet_address',\n false\n )\n\n if (\n required ||\n (name === 'phone' && flagRequirePhone) ||\n (name === 'data_capture[wallet_address]' && !collectMandatoryWalletAddress)\n ) {\n return true\n }\n\n return false\n}\n\nexport const getFieldLabel = (element: IGroupItem, configs?: null | AttributesConfig) => {\n if (isRequiredField(element, configs) || React.isValidElement(element.label)) {\n return element.label\n }\n\n return `${element.label} (optional)`\n}\n\nexport const getFieldComponent = (element: IGroupItem) => {\n const type = _get(element, 'type', 'text')\n\n const fieldComponentConfigs = {\n checkbox: CheckboxField,\n select: CustomField, // Temp change untill refactoring\n select_multi: SelectField,\n phone: PhoneNumberField,\n date: DatePickerField,\n radio: RadioGroupField,\n text: CustomField,\n }\n\n const fieldComponent = _get(fieldComponentConfigs, type, CustomField)\n return fieldComponent\n}\n\n/**\n * Renders a React component with the provided props\n * @param Component - The React component to render\n * @param props - The props to apply to the component\n * @returns JSX element with applied props\n */\nexport const renderComponentWithProps = <T extends Record<string, any>>(\n Component: React.ComponentType<T>,\n props: T\n): React.ReactElement<T> => <Component {...props} />\n\nexport const filterBillingInfoFields = (\n fields: IGroupItem[],\n options: {\n showDOB: boolean;\n hideTtfOptIn: boolean;\n hidePhoneField: boolean;\n flagRequirePhone: boolean;\n collectMandatoryWalletAddress: boolean;\n collectMandatoryJobTitle: boolean;\n collectMandatoryBusinessCategory: boolean;\n collectMandatoryCompany: boolean;\n collectMandatoryInstagram: boolean;\n flagFreeTicket: boolean;\n hideWalletAddressField: boolean;\n hideJobTitleField: boolean;\n hideBusinessCategoryField: boolean;\n hideCompanyField: boolean;\n hideInstagramField: boolean;\n }\n) => {\n const {\n showDOB,\n hideTtfOptIn,\n hidePhoneField,\n flagRequirePhone,\n collectMandatoryWalletAddress,\n collectMandatoryJobTitle,\n collectMandatoryBusinessCategory,\n collectMandatoryCompany,\n collectMandatoryInstagram,\n flagFreeTicket,\n hideWalletAddressField,\n hideJobTitleField,\n hideBusinessCategoryField,\n hideCompanyField,\n hideInstagramField,\n } = options\n return fields.filter(el => {\n if (el.name === 'holderAge' && !showDOB) {\n return false\n }\n if (el.name === 'ttf_opt_in' && hideTtfOptIn) {\n return false\n }\n if (el.name === 'phone') {\n if (!hidePhoneField) {\n el.required = flagRequirePhone\n } else {\n return false\n }\n }\n if (el.name === 'data_capture[wallet_address]') {\n if (collectMandatoryWalletAddress) {\n el.required = true\n }\n }\n if (el.name === 'data_capture[jobTitle]') {\n if (collectMandatoryJobTitle) {\n el.required = true\n }\n }\n if (el.name === 'data_capture[businessCategory]') {\n if (collectMandatoryBusinessCategory) {\n el.required = true\n }\n }\n if (el.name === 'data_capture[company]') {\n if (collectMandatoryCompany) {\n el.required = true\n }\n }\n if (el.name === 'data_capture[instagram]') {\n if (collectMandatoryInstagram) {\n el.required = true\n }\n }\n if (['street_address', 'country', 'state', 'city'].includes(el.name)) {\n if (flagFreeTicket) {\n el.required = false\n return false\n }\n }\n if (\n hideWalletAddressField &&\n (el.name === 'wallet-address-info' || el.name === 'data_capture[wallet_address]')\n ) {\n return false\n }\n if (hideJobTitleField && el.name === 'data_capture[jobTitle]') {\n return false\n }\n if (hideBusinessCategoryField && el.name === 'data_capture[businessCategory]') {\n return false\n }\n if (hideCompanyField && el.name === 'data_capture[company]') {\n return false\n }\n if (\n hideInstagramField &&\n (el.name === 'data_capture[instagram]' || el.name === 'instagram-info')\n ) {\n return false\n }\n return true\n })\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Field } from 'formik'\nimport _identity from 'lodash/identity'\nimport _isEmpty from 'lodash/isEmpty'\nimport _isNull from 'lodash/isNull'\nimport _map from 'lodash/map'\nimport React from 'react'\n\nimport {\n getFieldComponent,\n getFieldLabel,\n getValidateFunctions,\n} from '../billing-info-container/utils'\nimport { NativeSelectField } from '../common'\n\n// TO DO:\n// - Need to add custom fields validations\n// - Need to apply correct styles\n\ninterface IAddonComponentProps {\n classNamePrefix: string;\n data: any;\n selectOptions: any;\n handleAddonChange?: (...res: any) => void;\n addOnDataWithCustomFields: any;\n configs: any;\n values: any;\n errors: any;\n onCustomFieldChange?: (\n addon: any,\n groupId: string | number,\n fieldName: string,\n value: any\n ) => void;\n}\n\nconst AddonComponent = ({\n classNamePrefix = '',\n data,\n selectOptions,\n handleAddonChange = _identity,\n addOnDataWithCustomFields,\n configs,\n values,\n errors,\n onCustomFieldChange = _identity,\n}: IAddonComponentProps) => {\n const { id, name, active, stock } = data\n\n return (\n <div key={id} className={`${classNamePrefix}_product_select_container`}>\n <div className={`${classNamePrefix}_product_select_block`} key={name}>\n <div className={`${classNamePrefix}_product_size`}>{name}</div>\n <div className={`${classNamePrefix}_product_qty_select_block`}>\n {!active || (!_isNull(stock) && stock <= 0) ? (\n <div className=\"sold_out\">SOLD OUT</div>\n ) : (\n <>\n <div className={`${classNamePrefix}_product_qty_select`}>\n <Field\n name={id}\n selectOptions={selectOptions}\n component={NativeSelectField}\n onChange={(e: any) => {\n const { value } = e.target\n handleAddonChange(id, value)\n }}\n />\n </div>\n {!_isEmpty(addOnDataWithCustomFields?.fields) && values[id] > 0 && (\n <div className=\"add-on-fields\">\n <h2>{addOnDataWithCustomFields.label}</h2>\n {_map(addOnDataWithCustomFields.fields, group => {\n const { id, groupClassname, groupItems } = group\n return (\n <div key={id}>\n <div className={groupClassname}>\n {_map(groupItems, element => {\n const fieldName = `${data.id}-${id}-${element.name}`\n const Comp = getFieldComponent(element)\n const type =\n element.type === 'radio' || element.type === 'checkbox'\n ? undefined\n : element.type\n return (\n <div className={element.className} key={fieldName}>\n <Field\n {...element}\n name={fieldName}\n validate={getValidateFunctions(\n element,\n [],\n values,\n errors\n )}\n >\n {({ field, form }: any) => {\n const handleChange = (e: any) => {\n // extract value from native events or custom widgets\n const v = e?.target?.value ?? e?.value ?? e // allow custom components to pass raw value\n form.setFieldValue(field.name, v)\n onCustomFieldChange?.(data, id, element.name, v)\n }\n\n return (\n <Comp\n {...element}\n field={field}\n form={form}\n type={type}\n label={getFieldLabel(element, configs)}\n onChange={handleChange}\n />\n )\n }}\n </Field>\n </div>\n )\n })}\n </div>\n </div>\n )\n })}\n </div>\n )}\n </>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nexport default AddonComponent\n","export const getNormalizedPrice = (value: any) => {\n const minimizedValue = Number(value) / 100\n const normalized = minimizedValue.toFixed(2)\n return normalized\n}","import _isEmpty from 'lodash/isEmpty'\nimport _isNull from 'lodash/isNull'\nimport _reverse from 'lodash/reverse'\nimport _sortBy from 'lodash/sortBy'\n\ninterface ObjectLiteral {\n [key: string]: any;\n}\n\nexport const generateSelectOptions = (minCount = 1, maxCount = 10) => {\n const options = []\n for (let i = minCount; i <= maxCount; i++) {\n options.push({ label: i, value: i })\n }\n return options\n}\n\nconst generateStockBasedOnLimitations = (\n addon: any,\n ticketQuantity: number\n) => {\n // Generate addon available stock count based on limitations\n const { flagLimitToTicketQuantity, maxQuantity, limitPerTicket } = addon\n\n let allowedStockCount\n\n // Generate stock\n if (flagLimitToTicketQuantity) {\n // Limited to ticket quantity case\n allowedStockCount = ticketQuantity\n } else if (maxQuantity && limitPerTicket) {\n const stockBasedOnLimitPerTicket = limitPerTicket * ticketQuantity\n // Both maximum quantity and limited to per ticket selected case, stock is minimum of them\n allowedStockCount =\n maxQuantity <= stockBasedOnLimitPerTicket\n ? maxQuantity\n : stockBasedOnLimitPerTicket\n } else if (maxQuantity && !limitPerTicket) {\n // Limited to maximum quantity case\n allowedStockCount = maxQuantity\n } else if (!maxQuantity && limitPerTicket) {\n // Limited to per ticket case\n allowedStockCount = limitPerTicket * ticketQuantity\n }\n\n return Number(allowedStockCount)\n}\n\nconst filterStockBasedOnAvailability = (\n generatedStock: any,\n availableStock: any\n) => {\n // Check generated stock count admissibility with addon stock availability\n let filteredStockCount = generatedStock\n\n if (generatedStock) {\n if (generatedStock > availableStock && !_isNull(availableStock)) {\n filteredStockCount = availableStock\n }\n } else {\n // Not set any restriction\n // Here 10 value is business logic\n filteredStockCount = 10\n\n if (!_isNull(availableStock) && availableStock < filteredStockCount) {\n filteredStockCount = availableStock\n }\n }\n\n return filteredStockCount\n}\n\nexport const getAddonSelectOptions = (addons: any, choosedTicketCount: any) => {\n const addonsWithOptions: ObjectLiteral = {}\n const groupsWithSelectedVariantsInfo: ObjectLiteral = {}\n const groupsWithVariants: ObjectLiteral = {}\n\n addons.forEach((addon: any) => {\n // Here addon can act either as simple Addon or Addon Group\n const {\n id,\n stock: simpleAddonStock,\n variants,\n active,\n flagLimitToTicketQuantity,\n maxQuantity,\n limitPerTicket,\n } = addon\n\n if (variants) {\n // Addon Group with inside addon variants case\n variants.forEach((variant: any) => {\n const { id: variantId, stock: variantStock } = variant\n\n // null checking is for unlimited stock value\n if (active && (variantStock > 0 || _isNull(variantStock))) {\n // Generate Addon Group allowed stock count based on limitations\n const stockBasedOnLimitation = generateStockBasedOnLimitations(\n addon,\n choosedTicketCount\n )\n\n // Detect if group has limitation or not\n if (flagLimitToTicketQuantity || maxQuantity || limitPerTicket) {\n // Generate Group with inside variants info\n if (groupsWithSelectedVariantsInfo[id]) {\n // Set group limit\n if (\n groupsWithSelectedVariantsInfo[id].limit <\n stockBasedOnLimitation\n ) {\n groupsWithSelectedVariantsInfo[\n id\n ].limit = stockBasedOnLimitation\n }\n\n // Set choosed variants info\n groupsWithSelectedVariantsInfo[id] = {\n ...groupsWithSelectedVariantsInfo[id],\n choosedVariants: {\n ...groupsWithSelectedVariantsInfo[id].choosedVariants,\n [variantId]: 0,\n },\n }\n } else {\n groupsWithSelectedVariantsInfo[id] = {\n limit: stockBasedOnLimitation,\n selectedCount: 0,\n choosedVariants: { [variantId]: 0 },\n }\n }\n }\n\n // Check stock admissibility with addon stock availability\n const allowedVariantStockCount = filterStockBasedOnAvailability(\n stockBasedOnLimitation,\n variantStock\n )\n\n // Generate options for variant\n const variantOptions = generateSelectOptions(\n 0,\n allowedVariantStockCount\n )\n\n addonsWithOptions[variantId] = [...variantOptions]\n\n // Generate Group with its variants list\n groupsWithVariants[id] = {\n ...groupsWithVariants[id],\n [variantId]: allowedVariantStockCount,\n }\n }\n })\n } else {\n // Simple addon case, null checking is for unlimited stock value\n if (active && (simpleAddonStock > 0 || _isNull(simpleAddonStock))) {\n // Generate Addon Group allowed stock count based on limitations\n const stockBasedOnLimitation = generateStockBasedOnLimitations(\n addon,\n choosedTicketCount\n )\n\n // Check stock admissibility with addon stock availability\n const allowedVariantStockCount = filterStockBasedOnAvailability(\n stockBasedOnLimitation,\n simpleAddonStock\n )\n\n const addonOptions = generateSelectOptions(0, allowedVariantStockCount)\n addonsWithOptions[id] = [...addonOptions]\n }\n }\n })\n\n return {\n addonsWithOptions,\n groupsWithSelectedVariantsInfo,\n groupsWithVariants,\n }\n}\n\nexport const getTicketRelatedAddons = (addons: any, ticketId: any) => {\n // Filter addons based on choosed ticket\n const filteredAddons: any = addons.filter(\n (addon: any) =>\n _isNull(addon.prerequisiteTicketTypeIds) ||\n addon.prerequisiteTicketTypeIds.includes(ticketId)\n )\n\n return filteredAddons\n}\n\nexport const getSortedAddons = (addons: any, sortDirection = 'asc') => {\n const addonsCopy = [...addons]\n\n addonsCopy.forEach(addon => {\n if (addon.variants) {\n const unsortedVariants: any = []\n addon.variants.forEach((variant: any) => {\n unsortedVariants.push({\n ...variant,\n sortOrder: Number(variant.sortOrder),\n })\n })\n addon.sortOrder = Number(addon.variants[0].sortOrder)\n const sortedVariants = _sortBy(\n unsortedVariants,\n variant => variant.sortOrder\n )\n addon.variants = sortedVariants\n } else {\n addon.sortOrder = Number(addon.sortOrder)\n }\n })\n\n const sortedAddons = _sortBy(addonsCopy, addon => addon.sortOrder)\n if (sortDirection === 'desc') {\n return _reverse(sortedAddons)\n }\n\n return sortedAddons\n}\n\nexport const isAtLeastOneAddonSelected = (value: any) => {\n const selectedAddons = Object.fromEntries(\n Object.entries(value).filter(([_, count]) => Number(count) !== 0)\n )\n\n return !_isEmpty(selectedAddons)\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable react/no-unescaped-entities */\n\nimport { CircularProgress } from '@mui/material'\nimport { Form, Formik } from 'formik'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport _map from 'lodash/map'\nimport React, { useEffect, useMemo, useState } from 'react'\nimport { Tooltip } from 'react-tooltip'\n\nimport { getAddons, getCart, getCheckoutPageConfigs, postOnCheckout } from '../../api'\nimport { FEES_STYLES } from '../../constants'\nimport { currencyNormalizerCreator } from '../../normalizers'\nimport { ICheckoutPageConfigs } from '../../types'\nimport {\n CONFIGS,\n createCheckoutDataBodyWithDefaultHolder,\n createMarkup,\n getQueryVariable,\n isBrowser,\n} from '../../utils'\nimport { VerificationPendingModal } from '../idVerificationContainer/VerificationPendingModal'\nimport InfoIcon from '../ticketsContainer/InfoIcon'\nimport TimerWidget from '../timerWidget'\nimport { addonsWithGroupsAdapter, cartAdapter } from './adapters'\nimport AddonComponent from './AddonComponent'\nimport { getNormalizedPrice } from './normalizers'\nimport {\n generateSelectOptions,\n getAddonSelectOptions,\n getSortedAddons,\n getTicketRelatedAddons,\n isAtLeastOneAddonSelected,\n} from './utils'\n\nexport interface IAddonContainterProps {\n classNamePrefix?: string;\n enableBillingInfoAutoCreate?: boolean;\n enableTimer?: boolean;\n onGetAddonsPageInfoSuccess?: (res: any) => void;\n onGetAddonsPageInfoError?: (error: any) => void;\n onPostCheckoutSuccess?: (res: any) => void;\n onPostCheckoutError?: (error: any) => void;\n onConfirmSelectionSuccess?: (res: any) => void;\n onConfirmSelectionError?: (error: any) => void;\n onCountdownFinish?: () => void;\n onPendingVerification?: () => void;\n samePage?: boolean;\n descriptionTrigger?: 'click' | 'hover' | 'always';\n addOnDataWithCustomFields: any;\n configs: any;\n\n onAddOnSelect?: (id: string, value: string, addon: any) => void;\n}\n\nexport interface ObjectLiteral {\n [key: string]: any;\n}\n\nexport const AddonsContainter = ({\n classNamePrefix = 'add_on',\n enableBillingInfoAutoCreate = true,\n enableTimer = false,\n onGetAddonsPageInfoSuccess = _identity,\n onGetAddonsPageInfoError = _identity,\n onPostCheckoutSuccess = _identity,\n onPostCheckoutError = _identity,\n onConfirmSelectionSuccess = _identity,\n onConfirmSelectionError = _identity,\n onCountdownFinish = _identity,\n onPendingVerification = _identity,\n samePage,\n descriptionTrigger = 'click',\n addOnDataWithCustomFields,\n configs,\n onAddOnSelect = _identity,\n}: IAddonContainterProps) => {\n const eventId = getQueryVariable('event_id')\n const [addons, setAddons] = useState<any>([])\n const [addonsOptions, setAddonsOptions] = useState<any>({})\n const [groupsWithSelectedVariants, setGroupsWithSelectedVariants] = useState<any>({})\n const [groupsWithInitialVariantsValues, setGroupsWithInitialVariantsValues] =\n useState<any>({})\n const [loading, setLoading] = useState(true)\n const [cartExpirationTime, setCartExpirationTime] = useState(0)\n const [pendingVerificationMessage, setPendingVerificationMessage] = useState()\n\n const [visibleDescription, setVisibleDescription] = useState<string | null>(null)\n\n const handleDescriptionToggle = (ticketId: string) => {\n setVisibleDescription(current => (current === ticketId ? null : ticketId))\n }\n\n useEffect(() => {\n if (samePage) {\n window.localStorage.removeItem('add_ons')\n }\n const getAddonsPageInfo = async () => {\n try {\n if (eventId) {\n setLoading(true)\n\n // Get choosed ticket info (id, count) from Cart request for addons options calculations\n const cart = await getCart()\n const { id: choosedTicketID, quantity, expiresAt } = cartAdapter(cart)\n const choosedTicketCount = Number(quantity)\n setCartExpirationTime(expiresAt)\n\n // Get and collect addons data\n const addonsData = await getAddons(eventId)\n const adaptedAddons = addonsWithGroupsAdapter(addonsData)\n const ticketRelatedAddons = getTicketRelatedAddons(\n adaptedAddons,\n choosedTicketID\n )\n const sortedTicketAddons = getSortedAddons(ticketRelatedAddons)\n\n setAddons(sortedTicketAddons)\n\n // Collect addons and addon group options\n const {\n addonsWithOptions,\n groupsWithSelectedVariantsInfo,\n groupsWithVariants,\n } = getAddonSelectOptions(adaptedAddons, choosedTicketCount)\n\n setAddonsOptions(addonsWithOptions)\n setGroupsWithSelectedVariants(groupsWithSelectedVariantsInfo)\n setGroupsWithInitialVariantsValues(groupsWithVariants)\n\n // Success callback props\n onGetAddonsPageInfoSuccess(addonsData)\n }\n } catch (e) {\n // Callback error props\n onGetAddonsPageInfoError(e)\n } finally {\n setLoading(false)\n }\n }\n\n getAddonsPageInfo()\n }, [])\n\n const recreateGroupVariantsSelectOptions = (groupId: any, changedGroupd: any) => {\n const { choosedVariants, limit, selectedCount } = changedGroupd\n const remainingGroupStock = limit - selectedCount\n const recreatedVariantsOptions: ObjectLiteral = {}\n\n // Regenerate variants allowed stock counts\n for (const variant in choosedVariants) {\n const variantId = variant\n const variantCurrSelectedValue = choosedVariants[variant]\n let allowedOptionCount\n\n // Formula for regenerating\n if (\n remainingGroupStock >=\n groupsWithInitialVariantsValues[groupId][variantId] - variantCurrSelectedValue\n ) {\n allowedOptionCount = groupsWithInitialVariantsValues[groupId][variantId]\n } else {\n allowedOptionCount = remainingGroupStock + variantCurrSelectedValue\n }\n\n recreatedVariantsOptions[variantId] = generateSelectOptions(0, allowedOptionCount)\n }\n\n setAddonsOptions((prevState: any) =>\n Object.assign({}, prevState, recreatedVariantsOptions)\n )\n }\n\n const onFieldChange = (id: any, value: any, addon: any) => {\n // If changeableGroup exsists it means that group with limitation variant was changed\n const changeableGroup = groupsWithSelectedVariants[addon.id]\n\n if (changeableGroup) {\n const currGroupId = addon.id\n const currSelectedVariantId = id\n const currSelectedVariantCount = Number(value)\n const currSelectedVariantPrevCount =\n groupsWithSelectedVariants[currGroupId].choosedVariants[currSelectedVariantId]\n\n const currSelectedGroupCount =\n changeableGroup.selectedCount +\n (currSelectedVariantCount - currSelectedVariantPrevCount)\n\n // Update Group info\n const updatedGroupsWithSelectedVariants = {\n ...groupsWithSelectedVariants,\n [currGroupId]: {\n ...groupsWithSelectedVariants[currGroupId],\n selectedCount: currSelectedGroupCount,\n choosedVariants: {\n ...groupsWithSelectedVariants[currGroupId].choosedVariants,\n [currSelectedVariantId]: currSelectedVariantCount,\n },\n },\n }\n setGroupsWithSelectedVariants(updatedGroupsWithSelectedVariants)\n\n // Recreate Select Options for Addon Group Variants\n recreateGroupVariantsSelectOptions(\n currGroupId,\n updatedGroupsWithSelectedVariants[currGroupId]\n )\n }\n }\n\n const handleConfirm = async (values: any, skipAddonPage?: boolean) => {\n try {\n const pageConfigsDataResponse = await getCheckoutPageConfigs()\n const pageConfigsData: ICheckoutPageConfigs =\n _get(pageConfigsDataResponse, 'data.attributes') || {}\n\n const skipBillingPage = pageConfigsData.skip_billing_page ?? false\n\n if (skipBillingPage && enableBillingInfoAutoCreate) {\n const ticketsQuantity = window.localStorage.getItem('quantity')\n const userData = JSON.parse(window.localStorage.getItem('user_data') || '{}')\n\n const checkoutBody = createCheckoutDataBodyWithDefaultHolder(\n Number(ticketsQuantity) || 0,\n userData\n )\n\n try {\n const checkoutResponse = await postOnCheckout({\n ...checkoutBody,\n attributes: {\n ...checkoutBody.attributes,\n ...(!skipAddonPage && { add_ons: values }),\n },\n })\n const hash = checkoutResponse?.data?.attributes?.hash || ''\n const total = checkoutResponse?.data?.attributes?.total || ''\n\n isBrowser && window.localStorage.removeItem('quantity')\n isBrowser && window.localStorage.removeItem('add_ons')\n\n onPostCheckoutSuccess(checkoutResponse?.data.attributes)\n onConfirmSelectionSuccess({\n skip_billing_page: skipBillingPage,\n event_id: String(eventId),\n hash,\n total,\n })\n } catch (error) {\n if ((error as any).response?.data?.data?.hasUnverifiedOrder) {\n setPendingVerificationMessage((error as any).response?.data?.message)\n } else {\n onPostCheckoutError(error)\n onConfirmSelectionError(error)\n }\n }\n } else {\n if (isBrowser) {\n if (!skipAddonPage) {\n window.localStorage.setItem('add_ons', JSON.stringify(values))\n }\n\n onConfirmSelectionSuccess({\n skip_billing_page: skipBillingPage && enableBillingInfoAutoCreate,\n event_id: String(eventId),\n })\n } else {\n onConfirmSelectionError({\n error: true,\n message: 'Window is not defined',\n })\n }\n }\n } catch (e) {\n onConfirmSelectionError(e)\n }\n }\n\n const handleClearAddons = () => {\n window.localStorage.removeItem('add_ons')\n }\n\n const initialValues = useMemo(() => {\n const addOnsData: any = {}\n if (addons?.length > 0 && addOnDataWithCustomFields?.fields?.length > 0) {\n _map(addons, addon => {\n _map(addOnDataWithCustomFields.fields, field => {\n const { id, groupItems } = field\n _map(groupItems, item => {\n addOnsData[`${addon.id}-${id}-${item.name}`] = item.value\n })\n })\n })\n }\n\n return addOnsData\n }, [addons, addOnDataWithCustomFields])\n\n if (loading) {\n return (\n <div className={`${classNamePrefix}_loader`}>\n <CircularProgress size={50} />\n </div>\n )\n }\n\n if (addons?.length === 0) {\n return null\n }\n\n const params = new URL(`${window.location}`).searchParams\n const addOnIsIncluded = params.get('include_add_on') === 'true'\n const isResale = params.get('resale') === 'true'\n\n return (\n <>\n {!!cartExpirationTime && enableTimer && !samePage && (\n <TimerWidget\n expires_at={cartExpirationTime}\n onCountdownFinish={() => {\n handleClearAddons()\n onCountdownFinish()\n }}\n />\n )}\n <div className={`${classNamePrefix}_container`}>\n <div className={`${classNamePrefix}_block`}>\n <div className={`${classNamePrefix}_line_block`}>\n {samePage ? null : (\n <p className={`${classNamePrefix}_info_title`}>Get Your Tickets</p>\n )}\n {(!addons?.length || (isResale && addOnIsIncluded)) && samePage ? null : (\n <div className={`${classNamePrefix}_title`}>UPGRADES & ADD-ONS</div>\n )}\n {samePage ? null : (\n <button\n type=\"button\"\n className={`${classNamePrefix}_skip`}\n onClick={() => {\n handleClearAddons()\n handleConfirm({}, true)\n }}\n >\n Skip\n </button>\n )}\n </div>\n {(!addons?.length || (isResale && addOnIsIncluded)) && samePage ? null : (\n <div className={`${classNamePrefix}_subtitle`}>\n PLEASE SELECT FROM THE OPTIONAL ADD-ONS BELOW\n </div>\n )}\n <Formik\n initialValues={initialValues}\n onSubmit={values => {\n handleConfirm(values)\n }}\n validate={\n samePage\n ? values => {\n if (isBrowser) {\n window.localStorage.setItem('add_ons', JSON.stringify(values))\n }\n }\n : undefined\n }\n >\n {({ values, errors, setFieldTouched }) => {\n const isConfirmDisabled = !isAtLeastOneAddonSelected(values)\n\n return (\n <Form autoComplete=\"off\" className=\"form_holder\">\n <>\n {(isResale && addOnIsIncluded ? [] : addons).map((addon: any) => {\n const price = addon.feeIncluded ? addon.price : addon.cost\n const isAddonFree = Number(addon?.price) === 0\n\n const addOnNormalizedCost = isAddonFree\n ? 'FREE'\n : currencyNormalizerCreator(\n getNormalizedPrice(addon?.cost ?? 0),\n addon.currency\n )\n\n const addonNormalizedPrice = isAddonFree\n ? 'FREE'\n : currencyNormalizerCreator(\n getNormalizedPrice(\n CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH\n ? addon?.price ?? price\n : price\n ),\n addon.currency\n )\n\n return (\n <div\n key={addon.id}\n className={`${classNamePrefix}_product_block`}\n >\n <div className={`${classNamePrefix}_product_images`}>\n {addon.imageUrl && (\n <div className={`${classNamePrefix}_product_image_block`}>\n <img src={addon.imageUrl} alt=\"No Data\" />\n </div>\n )}\n </div>\n <div className={`${classNamePrefix}_product_info_block`}>\n <div className={`${classNamePrefix}_product_title`}>\n {addon.name}\n {addon.description && descriptionTrigger !== 'always' && (\n <>\n <span\n aria-hidden\n className=\"info-icon\"\n onClick={\n descriptionTrigger === 'click'\n ? () => handleDescriptionToggle(addon.id)\n : undefined\n }\n onMouseEnter={\n descriptionTrigger === 'hover'\n ? () => setVisibleDescription(addon.id)\n : undefined\n }\n onMouseLeave={\n descriptionTrigger === 'hover'\n ? () => setVisibleDescription(null)\n : undefined\n }\n style={{\n marginLeft: 8,\n cursor: 'pointer',\n display: 'flex',\n }}\n data-tooltip-id={`tooltip-${addon.id}`}\n data-tooltip-content=\"View Add-On info\"\n >\n <InfoIcon size={14} />\n </span>\n <Tooltip id={`tooltip-${addon.id}`} place=\"top\">\n {addon.description || 'No description available'}\n </Tooltip>\n </>\n )}\n </div>\n <div className={`${classNamePrefix}_product_price`}>\n {CONFIGS.FEES_STYLE === FEES_STYLES.TRADITIONAL\n ? addonNormalizedPrice\n : addOnNormalizedCost}\n {!isAddonFree &&\n CONFIGS.FEES_STYLE === FEES_STYLES.TRADITIONAL && (\n <span className={`${classNamePrefix}_product_fee`}>\n {addon.feeIncluded ? '(incl. Fees)' : '(excl. Fees)'}\n </span>\n )}\n {!isAddonFree &&\n CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH && (\n <>\n <span className={`${classNamePrefix}_product_fee`}>\n {`(${addonNormalizedPrice} with fees)`}\n </span>\n </>\n )}\n </div>\n </div>\n {(visibleDescription === addon.id ||\n descriptionTrigger === 'always') && (\n <div\n className={`${classNamePrefix}_product_desc`}\n dangerouslySetInnerHTML={createMarkup(addon.description)}\n />\n )}\n <div className={`${classNamePrefix}_product_select_container`}>\n {addon.variants ? (\n addon.variants.map((variant: any) => (\n // Group Variants\n <AddonComponent\n key={variant.id}\n data={variant}\n selectOptions={addonsOptions[variant.id]}\n classNamePrefix={classNamePrefix}\n handleAddonChange={(id, value) => {\n onAddOnSelect(id, value, addon)\n onFieldChange(id, value, addon)\n }}\n addOnDataWithCustomFields={addOnDataWithCustomFields}\n configs={configs}\n values={values}\n errors={errors}\n />\n ))\n ) : (\n // Simple Addon\n <AddonComponent\n key={addon.id}\n data={addon}\n selectOptions={addonsOptions[addon.id]}\n classNamePrefix={classNamePrefix}\n handleAddonChange={(id, value) => {\n onAddOnSelect(id, value, addon)\n onFieldChange(id, value, addon)\n\n _map(addOnDataWithCustomFields.fields, fieldGroup => {\n const { id, groupItems } = fieldGroup\n _map(groupItems, field => {\n setFieldTouched(\n `${addon.id}-${id}-${field.name}`,\n true,\n true\n )\n })\n })\n }}\n addOnDataWithCustomFields={addOnDataWithCustomFields}\n configs={configs}\n values={values}\n errors={errors}\n />\n )}\n </div>\n </div>\n )\n })}\n {samePage ? null : (\n <button\n type=\"submit\"\n className={`${\n isConfirmDisabled ? `${classNamePrefix}_is_disabled` : ''\n } ${classNamePrefix}_submit_button`}\n disabled={isConfirmDisabled}\n >\n CONFIRM SELECTION\n </button>\n )}\n </>\n </Form>\n )\n }}\n </Formik>\n </div>\n </div>\n <VerificationPendingModal\n message={pendingVerificationMessage}\n onClose={() => {\n onPendingVerification()\n }}\n />\n </>\n )\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { CircularProgress } from '@mui/material'\nimport { Form, Formik } from 'formik'\nimport _identity from 'lodash/identity'\nimport _map from 'lodash/map'\nimport React, { useEffect, useMemo, useState } from 'react'\nimport { Tooltip } from 'react-tooltip'\n\nimport { getAddons, getCart } from '../../api'\nimport { FEES_STYLES } from '../../constants'\nimport { currencyNormalizerCreator } from '../../normalizers'\nimport { CONFIGS, createMarkup } from '../../utils'\nimport InfoIcon from '../ticketsContainer/InfoIcon'\nimport { addonsWithGroupsAdapter, cartAdapter } from './adapters'\nimport AddonComponent from './AddonComponent'\nimport { getNormalizedPrice } from './normalizers'\nimport {\n generateSelectOptions,\n getAddonSelectOptions,\n getSortedAddons,\n getTicketRelatedAddons,\n} from './utils'\n\nexport interface ISimpleAddonContainerProps {\n classNamePrefix?: string;\n onGetAddonsPageInfoSuccess?: (res: any) => void;\n onGetAddonsPageInfoError?: (error: any) => void;\n descriptionTrigger?: 'click' | 'hover' | 'always';\n addOnDataWithCustomFields: any;\n configs: any;\n eventId: string;\n onAddOnSelect?: (id: string, value: string, addon: any, fieldUpdates: any) => void;\n handleConfirm?: (values: any) => void;\n}\n\nexport interface ObjectLiteral {\n [key: string]: any;\n}\n\nexport const SimpleAddonsContainer = ({\n classNamePrefix = 'add_on',\n onGetAddonsPageInfoSuccess = _identity,\n onGetAddonsPageInfoError = _identity,\n descriptionTrigger = 'click',\n addOnDataWithCustomFields,\n configs,\n eventId,\n onAddOnSelect = _identity,\n handleConfirm = _identity,\n}: ISimpleAddonContainerProps) => {\n const [addons, setAddons] = useState<any>(null)\n const [addonsOptions, setAddonsOptions] = useState<any>({})\n const [groupsWithSelectedVariants, setGroupsWithSelectedVariants] = useState<any>({})\n const [groupsWithInitialVariantsValues, setGroupsWithInitialVariantsValues] =\n useState<any>({})\n const [loading, setLoading] = useState(true)\n\n const [visibleDescription, setVisibleDescription] = useState<string | null>(null)\n\n const handleDescriptionToggle = (ticketId: string) => {\n setVisibleDescription(current => (current === ticketId ? null : ticketId))\n }\n\n // build { [fieldName]: value } for one addon from current Formik values\n const collectAddonFieldUpdates = (addon: any, allValues: Record<string, any>) => {\n const out: Record<string, any> = {}\n if (!addOnDataWithCustomFields?.fields?.length) return out\n addOnDataWithCustomFields.fields.forEach((group: any) => {\n group.groupItems.forEach((item: any) => {\n const k = `${addon.id}-${group.id}-${item.name}`\n if (k in allValues) out[item.name] = allValues[k]\n })\n })\n return out\n }\n\n // live-sync a single custom field change into localStorage.add_on_data_capture\n const handleCustomFieldChange = (\n addon: any,\n _groupId: string | number,\n fieldName: string,\n value: any\n ) => {\n const existing = JSON.parse(localStorage.getItem('add_on_data_capture') || '{}')\n const addonId = String(addon.id)\n const next = {\n ...existing,\n [addonId]: { ...(existing[addonId] || {}), [fieldName]: value },\n }\n localStorage.setItem('add_on_data_capture', JSON.stringify(next))\n }\n\n useEffect(() => {\n const getAddonsPageInfo = async () => {\n try {\n if (eventId) {\n setLoading(true)\n\n // Get choosed ticket info (id, count) from Cart request for addons options calculations\n const cart = await getCart()\n const { id: choosedTicketID, quantity } = cartAdapter(cart)\n const choosedTicketCount = Number(quantity)\n\n // Get and collect addons data\n const addonsData = await getAddons(eventId)\n const adaptedAddons = addonsWithGroupsAdapter(addonsData)\n const ticketRelatedAddons = getTicketRelatedAddons(\n adaptedAddons,\n choosedTicketID\n )\n const sortedTicketAddons = getSortedAddons(ticketRelatedAddons)\n\n setAddons(sortedTicketAddons)\n\n // Collect addons and addon group options\n const {\n addonsWithOptions,\n groupsWithSelectedVariantsInfo,\n groupsWithVariants,\n } = getAddonSelectOptions(adaptedAddons, choosedTicketCount)\n\n setAddonsOptions(addonsWithOptions)\n setGroupsWithSelectedVariants(groupsWithSelectedVariantsInfo)\n setGroupsWithInitialVariantsValues(groupsWithVariants)\n\n // Success callback props\n onGetAddonsPageInfoSuccess(addonsData)\n }\n } catch (e) {\n // Callback error props\n onGetAddonsPageInfoError(e)\n } finally {\n setLoading(false)\n }\n }\n\n getAddonsPageInfo()\n }, [eventId, onGetAddonsPageInfoError, onGetAddonsPageInfoSuccess])\n\n const recreateGroupVariantsSelectOptions = (groupId: any, changedGroupd: any) => {\n const { choosedVariants, limit, selectedCount } = changedGroupd\n const remainingGroupStock = limit - selectedCount\n const recreatedVariantsOptions: ObjectLiteral = {}\n\n // Regenerate variants allowed stock counts\n for (const variant in choosedVariants) {\n const variantId = variant\n const variantCurrSelectedValue = choosedVariants[variant]\n let allowedOptionCount\n\n // Formula for regenerating\n if (\n remainingGroupStock >=\n groupsWithInitialVariantsValues[groupId][variantId] - variantCurrSelectedValue\n ) {\n allowedOptionCount = groupsWithInitialVariantsValues[groupId][variantId]\n } else {\n allowedOptionCount = remainingGroupStock + variantCurrSelectedValue\n }\n\n recreatedVariantsOptions[variantId] = generateSelectOptions(0, allowedOptionCount)\n }\n\n setAddonsOptions((prevState: any) =>\n Object.assign({}, prevState, recreatedVariantsOptions)\n )\n }\n\n const onFieldChange = (id: any, value: any, addon: any) => {\n // If changeableGroup exsists it means that group with limitation variant was changed\n const changeableGroup = groupsWithSelectedVariants[addon.id]\n\n if (changeableGroup) {\n const currGroupId = addon.id\n const currSelectedVariantId = id\n const currSelectedVariantCount = Number(value)\n const currSelectedVariantPrevCount =\n groupsWithSelectedVariants[currGroupId].choosedVariants[currSelectedVariantId]\n\n const currSelectedGroupCount =\n changeableGroup.selectedCount +\n (currSelectedVariantCount - currSelectedVariantPrevCount)\n\n // Update Group info\n const updatedGroupsWithSelectedVariants = {\n ...groupsWithSelectedVariants,\n [currGroupId]: {\n ...groupsWithSelectedVariants[currGroupId],\n selectedCount: currSelectedGroupCount,\n choosedVariants: {\n ...groupsWithSelectedVariants[currGroupId].choosedVariants,\n [currSelectedVariantId]: currSelectedVariantCount,\n },\n },\n }\n setGroupsWithSelectedVariants(updatedGroupsWithSelectedVariants)\n\n // Recreate Select Options for Addon Group Variants\n recreateGroupVariantsSelectOptions(\n currGroupId,\n updatedGroupsWithSelectedVariants[currGroupId]\n )\n }\n }\n\n const initialValues = useMemo(() => {\n const addOnsData: any = {}\n if (addons?.length > 0 && addOnDataWithCustomFields?.fields?.length > 0) {\n _map(addons, addon => {\n _map(addOnDataWithCustomFields.fields, field => {\n const { id, groupItems } = field\n _map(groupItems, item => {\n addOnsData[`${addon.id}-${id}-${item.name}`] = item.value\n })\n })\n })\n }\n\n return addOnsData\n }, [addons, addOnDataWithCustomFields])\n\n if (loading || !addons) {\n return (\n <div className={`${classNamePrefix}_loader`}>\n <CircularProgress size={50} />\n </div>\n )\n }\n\n return (\n <div className={`${classNamePrefix}_container`}>\n <div className={`${classNamePrefix}_block`}>\n <div className={`${classNamePrefix}_line_block`}>\n {addons?.length > 0 && (\n <div className={`${classNamePrefix}_title`}>UPGRADES & ADD-ONS</div>\n )}\n </div>\n {addons?.length > 0 && (\n <div className={`${classNamePrefix}_subtitle`}>\n PLEASE SELECT FROM THE OPTIONAL ADD-ONS BELOW\n </div>\n )}\n <Formik\n initialValues={initialValues}\n onSubmit={values => {\n handleConfirm(values)\n }}\n validate={() => {\n // Real-time validation can be handled here if needed\n }}\n >\n {({ values, errors, setFieldTouched }) => (\n <Form autoComplete=\"off\" className=\"form_holder\">\n <>\n {addons.map((addon: any) => {\n const price = addon.feeIncluded ? addon.price : addon.cost\n const isAddonFree = Number(addon?.price) === 0\n\n const addOnNormalizedCost = isAddonFree\n ? 'FREE'\n : currencyNormalizerCreator(\n getNormalizedPrice(addon?.cost ?? 0),\n addon.currency\n )\n\n const addonNormalizedPrice = isAddonFree\n ? 'FREE'\n : currencyNormalizerCreator(\n getNormalizedPrice(\n CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH\n ? addon?.price ?? price\n : price\n ),\n addon.currency\n )\n\n return (\n <div key={addon.id} className={`${classNamePrefix}_product_block`}>\n <div className={`${classNamePrefix}_product_images`}>\n {addon.imageUrl && (\n <div className={`${classNamePrefix}_product_image_block`}>\n <img src={addon.imageUrl} alt=\"No Data\" />\n </div>\n )}\n </div>\n <div className={`${classNamePrefix}_product_info_block`}>\n <div className={`${classNamePrefix}_product_title`}>\n {addon.name}\n {addon.description && descriptionTrigger !== 'always' && (\n <>\n <span\n aria-hidden\n className=\"info-icon\"\n onClick={\n descriptionTrigger === 'click'\n ? () => handleDescriptionToggle(addon.id)\n : undefined\n }\n onMouseEnter={\n descriptionTrigger === 'hover'\n ? () => setVisibleDescription(addon.id)\n : undefined\n }\n onMouseLeave={\n descriptionTrigger === 'hover'\n ? () => setVisibleDescription(null)\n : undefined\n }\n style={{\n marginLeft: 8,\n cursor: 'pointer',\n display: 'flex',\n }}\n data-tooltip-id={`tooltip-${addon.id}`}\n data-tooltip-content=\"View Add-On info\"\n >\n <InfoIcon size={14} />\n </span>\n <Tooltip id={`tooltip-${addon.id}`} place=\"top\">\n {addon.description || 'No description available'}\n </Tooltip>\n </>\n )}\n </div>\n <div className={`${classNamePrefix}_product_price`}>\n {CONFIGS.FEES_STYLE === FEES_STYLES.TRADITIONAL\n ? addonNormalizedPrice\n : addOnNormalizedCost}\n {!isAddonFree &&\n CONFIGS.FEES_STYLE === FEES_STYLES.TRADITIONAL && (\n <span className={`${classNamePrefix}_product_fee`}>\n {addon.feeIncluded ? '(incl. Fees)' : '(excl. Fees)'}\n </span>\n )}\n {!isAddonFree &&\n CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH && (\n <>\n <span className={`${classNamePrefix}_product_fee`}>\n {`(${addonNormalizedPrice} with fees)`}\n </span>\n </>\n )}\n </div>\n </div>\n {(visibleDescription === addon.id ||\n descriptionTrigger === 'always') && (\n <div\n className={`${classNamePrefix}_product_desc`}\n dangerouslySetInnerHTML={createMarkup(addon.description)}\n />\n )}\n <div className={`${classNamePrefix}_product_select_container`}>\n {addon.variants ? (\n addon.variants.map((variant: any) => (\n // Group Variants\n <AddonComponent\n key={variant.id}\n data={variant}\n selectOptions={addonsOptions[variant.id]}\n classNamePrefix={classNamePrefix}\n handleAddonChange={(id, value) => {\n console.log('handleAddonChange', id, value)\n onFieldChange(id, value, addon)\n const fieldUpdates = collectAddonFieldUpdates(\n addon,\n values\n )\n onAddOnSelect(id, value, addon, fieldUpdates)\n }}\n onCustomFieldChange={handleCustomFieldChange}\n addOnDataWithCustomFields={addOnDataWithCustomFields}\n configs={configs}\n values={values}\n errors={errors}\n />\n ))\n ) : (\n // Simple Addon\n <AddonComponent\n key={addon.id}\n data={addon}\n selectOptions={addonsOptions[addon.id]}\n classNamePrefix={classNamePrefix}\n handleAddonChange={(id, value) => {\n onFieldChange(id, value, addon)\n const fieldUpdates = collectAddonFieldUpdates(addon, values)\n onAddOnSelect(id, value, addon, fieldUpdates)\n _map(addOnDataWithCustomFields.fields, fieldGroup => {\n const { id, groupItems } = fieldGroup\n _map(groupItems, field => {\n setFieldTouched(\n `${addon.id}-${id}-${field.name}`,\n true,\n true\n )\n })\n })\n }}\n onCustomFieldChange={handleCustomFieldChange}\n addOnDataWithCustomFields={addOnDataWithCustomFields}\n configs={configs}\n values={values}\n errors={errors}\n />\n )}\n </div>\n </div>\n )\n })}\n </>\n </Form>\n )}\n </Formik>\n </div>\n </div>\n )\n}\n\nexport default SimpleAddonsContainer\n","import { Alert, AlertColor, Snackbar, SnackbarOrigin } from '@mui/material'\nimport React from 'react'\n\ninterface ISnackbarAlertProps {\n isOpen: boolean;\n message: string;\n type: AlertColor;\n position?: SnackbarOrigin;\n autoHideDuration?: number;\n variant?: 'filled' | 'standard' | 'outlined';\n\n onClose: () => void;\n}\n\nconst SnackbarAlert = ({\n isOpen,\n message,\n type,\n position,\n autoHideDuration = 3000,\n variant,\n onClose,\n}: ISnackbarAlertProps) => (\n <div className=\"snackbar-alert-container\">\n <Snackbar\n autoHideDuration={autoHideDuration}\n open={isOpen}\n anchorOrigin={position || { vertical: 'top', horizontal: 'center' }}\n onClose={onClose}\n classes={{\n root: 'snackbar-alert-snackbar-root',\n }}\n >\n <Alert\n severity={type}\n onClose={onClose}\n variant={variant || 'filled'}\n classes={{\n icon: 'snackbar-alert-icon',\n root: 'snackbar-alert-alert-root',\n action: 'snackbar-alert-action',\n message: 'snackbar-alert-message',\n filled: 'snackbar-alert-filled',\n }}\n >\n {message}\n </Alert>\n </Snackbar>\n </div>\n)\n\nexport default SnackbarAlert\n","import React from 'react'\n\nexport const PoweredBy = () => (\n <div className=\"powered-container\">\n <div className='powered-text'>Powered By</div>\n <img\n className='powered-img'\n alt=\"The Ticket Fairy\"\n src={\"https://cdn-checkout.s3.us-east-2.amazonaws.com/IconTicketFairy.svg\"}\n />\n <div className='powered-ttf'>\n The<strong>Ticket</strong>Fairy\n </div>\n </div>\n)\n","import './style.css'\n\nimport { Box, CircularProgress, Modal } from '@mui/material'\nimport axios, { AxiosError } from 'axios'\nimport { Field, Form, Formik } from 'formik'\nimport _identity from 'lodash/identity'\nimport React, { FC, useState } from 'react'\nimport * as Yup from 'yup'\n\nimport { forgotPassword } from '../../api'\nimport { CustomField } from '../common/CustomField'\nimport { PoweredBy } from '../common/PoweredBy'\n\nexport interface IForgotPasswordProps {\n onClose: () => void;\n onLoginButtonClick: () => void;\n onForgotPasswordSuccess: (res: IAxiosResponseData) => void;\n onForgotPasswordError: (e: AxiosError) => void;\n showPoweredByImage?: boolean;\n displaySuccessMessage?: boolean;\n}\n\ninterface ValuesTypes {\n email: string;\n}\n\nconst style: React.CSSProperties = {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n minWidth: 480,\n backgroundColor: '#fff',\n border: '1px solid white',\n outline: 'none',\n padding: '14px',\n}\n\nconst Schema = Yup.object().shape({\n email: Yup.string().email('Invalid email').required('Required'),\n})\n\nexport const ForgotPasswordModal: FC<IForgotPasswordProps> = ({\n onClose = _identity,\n onLoginButtonClick = _identity,\n onForgotPasswordSuccess = _identity,\n onForgotPasswordError = _identity,\n showPoweredByImage = false,\n displaySuccessMessage = false,\n}) => {\n const [loading, setLoading] = useState(false)\n const [successMessage, setSuccessMessage] = useState<string | null>(null)\n const showSuccess = displaySuccessMessage && successMessage\n\n const onForgotPassword = async ({ email }: ValuesTypes) => {\n if (showSuccess) {\n setSuccessMessage(null)\n onClose()\n return\n }\n\n try {\n setLoading(true)\n const { data } = await forgotPassword(email)\n\n onForgotPasswordSuccess(data)\n\n if (displaySuccessMessage && data?.success) {\n setSuccessMessage(data?.message)\n }\n\n if (!displaySuccessMessage) {\n onClose()\n }\n } catch (e) {\n if (axios.isAxiosError(e)) {\n onForgotPasswordError(e)\n }\n } finally {\n setLoading(false)\n }\n }\n\n return (\n <Modal\n open={true}\n onClose={loading ? _identity : onClose}\n aria-labelledby=\"modal-modal-title\"\n aria-describedby=\"modal-modal-description\"\n className=\"forgot-password-modal\"\n >\n <Box style={style}>\n <div>\n <Formik\n initialValues={{ email: '' }}\n validationSchema={Schema}\n onSubmit={onForgotPassword}\n >\n {({ isValid, dirty, handleSubmit }) => (\n <Form onSubmit={handleSubmit}>\n <div className=\"forgot-password-container\">\n <div className=\"title\">Password Reset</div>\n <div className=\"forgot-password-container__singleField\">\n {showSuccess ? (\n <p id=\"forgot-password-success-message\">{successMessage}</p>\n ) : (\n <Field name=\"email\" label=\"Email\" component={CustomField} />\n )}\n </div>\n </div>\n <div className=\"forgot-password-action-button\">\n <button\n type=\"submit\"\n disabled={showSuccess ? false : !(isValid && dirty)}\n >\n {loading ? (\n <CircularProgress size=\"22px\" />\n ) : showSuccess ? (\n 'Close'\n ) : (\n 'Submit'\n )}\n </button>\n </div>\n <div className=\"login\">\n <span aria-hidden onClick={onLoginButtonClick}>\n Back to Log In\n </span>\n </div>\n {showPoweredByImage ? <PoweredBy /> : null}\n </Form>\n )}\n </Formik>\n </div>\n </Box>\n </Modal>\n )\n}\n","import { Grid } from '@mui/material'\nimport { AxiosError } from 'axios'\nimport { Field, Form, Formik } from 'formik'\nimport _get from 'lodash/get'\nimport _map from 'lodash/map'\nimport React, { FC, useEffect, useState } from 'react'\n\nimport { getCountries, getProfileData, getStates, register } from '../../api'\nimport { CONFIGS, isBrowser, setLoggedUserData } from '../../utils'\nimport {\n confirmPasswordValidator,\n emailValidator,\n passwordValidator,\n requiredValidator,\n} from '../../validators'\nimport { CustomField } from '../common/CustomField'\nimport { PhoneNumberField } from '../common/PhoneNumberField'\n\ninterface SignUpFormProps {\n onSignUpSuccess: (res: IProfileData) => void;\n onGetProfileDataSuccess?: (res: any) => void;\n onGetProfileDataError?: (e: AxiosError) => void;\n logo?: string;\n}\n\nexport const SignUpForm: FC<SignUpFormProps> = ({\n onSignUpSuccess,\n onGetProfileDataSuccess = () => {},\n onGetProfileDataError = () => {},\n logo,\n}) => {\n const [error, setError] = useState('')\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [countries, setCountries] = useState<any[]>([])\n const [states, setStates] = useState<any[]>([])\n const [phoneValidationIsLoading, setPhoneValidationIsLoading] = useState(false)\n\n // Fetch countries on mount\n useEffect(() => {\n const fetchCountries = async () => {\n try {\n const res = await getCountries()\n const mappedCountries = _map(res.data, (item: any) => ({\n id: item.id,\n name: item.name,\n code: item.code,\n }))\n setCountries(mappedCountries)\n } catch (e) {\n console.error('Error fetching countries:', e)\n }\n }\n fetchCountries()\n }, [])\n\n return (\n <Formik\n enableReinitialize\n initialValues={{\n firstName: '',\n lastName: '',\n email: '',\n password: '',\n passwordConfirmation: '',\n phone: '',\n country: '1',\n city: '',\n state: '',\n streetAddress: '',\n zip: '',\n }}\n onSubmit={async values => {\n setIsSubmitting(true)\n setError('')\n try {\n const formData = new FormData()\n formData.append('first_name', values.firstName)\n formData.append('last_name', values.lastName)\n formData.append('email', values.email)\n formData.append('password', values.password)\n formData.append('password_confirmation', values.passwordConfirmation)\n formData.append('phone', values.phone)\n formData.append('country', values.country)\n formData.append('city', values.city)\n formData.append('state', values.state)\n formData.append('street_address', values.streetAddress)\n formData.append('zip', values.zip)\n formData.append('client_id', CONFIGS.CLIENT_ID || '')\n formData.append('client_secret', CONFIGS.CLIENT_SECRET || '')\n\n await register(formData)\n\n // Fetch profile data after successful signup\n try {\n const profileResponse = await getProfileData()\n onGetProfileDataSuccess(profileResponse.data)\n\n const profileSpecifiedData = profileResponse.data\n const profileDataObj = setLoggedUserData(profileSpecifiedData)\n\n if (isBrowser) {\n window.localStorage.setItem('user_data', JSON.stringify(profileDataObj))\n const event = new window.CustomEvent('tf-login')\n window.document.dispatchEvent(event)\n }\n\n onSignUpSuccess(_get(profileResponse, 'data.data', {}) as IProfileData)\n } catch (e) {\n if ((e as any).isAxiosError) {\n onGetProfileDataError(e as AxiosError)\n }\n setError('Registration successful but failed to fetch profile data')\n }\n } catch (e) {\n const errorData = _get(e, 'response.data.message', '')\n\n // Check if error is an object with field-specific errors\n if (typeof errorData === 'object' && errorData !== null) {\n const errorMessages = Object.entries(errorData)\n .map(([field, messages]) => {\n const fieldName = field.replace(/_/g, ' ').replace(/\\b\\w/g, l => l.toUpperCase())\n const messageArray = Array.isArray(messages) ? messages : [messages]\n return `${fieldName}: ${messageArray.join(', ')}`\n })\n .join('\\n')\n setError(errorMessages || 'Registration failed. Please try again.')\n } else {\n setError(String(errorData) || 'Registration failed. Please try again.')\n }\n } finally {\n setIsSubmitting(false)\n }\n }}\n >\n {props => (\n <Form onSubmit={props.handleSubmit}>\n <div className=\"login-logo-container\">\n <img\n className=\"login-logo-tff\"\n src={\n logo ||\n 'https://www.ticketfairy.com/resources/images/logo-ttf-black.svg'\n }\n alt=\"logo\"\n />\n </div>\n {error && (\n <div className=\"server_auth__error\" style={{ whiteSpace: 'pre-line' }}>\n {error}\n </div>\n )}\n <Grid container spacing={2} sx={{ padding: '15px 25px', maxHeight: { xs: '40vh', sm: '60vh' }, overflowY: 'auto' }}>\n {/* Name Fields */}\n <Grid item xs={12} md={6}>\n <Field\n name=\"firstName\"\n label=\"First Name\"\n type=\"text\"\n component={CustomField}\n theme=\"light\"\n validate={requiredValidator}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <Field\n name=\"lastName\"\n label=\"Last Name\"\n type=\"text\"\n component={CustomField}\n theme=\"light\"\n validate={requiredValidator}\n />\n </Grid>\n\n {/* Email */}\n <Grid item xs={12} md={6}>\n <Field\n name=\"email\"\n label=\"Email\"\n type=\"email\"\n component={CustomField}\n theme=\"light\"\n validate={(value: string) => {\n const required = requiredValidator(value)\n if (required) return required\n return emailValidator(value)\n }}\n />\n </Grid>\n\n {/* Street Address */}\n <Grid item xs={12} md={6}>\n <Field\n name=\"streetAddress\"\n label=\"Street Address\"\n type=\"text\"\n component={CustomField}\n theme=\"light\"\n validate={requiredValidator}\n />\n </Grid>\n\n {/* Zip Code */}\n <Grid item xs={12} md={6}>\n <Field\n name=\"zip\"\n label=\"Zip / Postal Code\"\n type=\"text\"\n component={CustomField}\n theme=\"light\"\n validate={requiredValidator}\n />\n </Grid>\n\n {/* Country */}\n <Grid item xs={12} md={6}>\n <Field\n name=\"country\"\n label=\"Country\"\n type=\"select\"\n component={CustomField}\n theme=\"light\"\n validate={requiredValidator}\n selectOptions={_map(countries, item => ({\n value: item.id,\n label: item.name,\n }))}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n props.setFieldValue('country', e.target.value)\n props.setFieldValue('state', '')\n // Fetch states for selected country\n const fetchStatesForCountry = async () => {\n try {\n const res = await getStates(e.target.value)\n const mappedStates = _map(res.data, (item, key) => ({\n label: item,\n value: key,\n }))\n setStates(mappedStates)\n } catch (error) {\n console.error('Error fetching states:', error)\n setStates([])\n }\n }\n fetchStatesForCountry()\n }}\n />\n </Grid>\n\n {/* State */}\n <Grid item xs={12} md={6}>\n <Field\n name=\"state\"\n label=\"State / Province\"\n type=\"select\"\n component={CustomField}\n theme=\"light\"\n validate={requiredValidator}\n selectOptions={[\n { value: '', label: 'Select State/Province', disabled: true },\n ...states,\n ]}\n />\n </Grid>\n\n {/* City */}\n <Grid item xs={12} md={6}>\n <Field\n name=\"city\"\n label=\"City\"\n type=\"text\"\n component={CustomField}\n theme=\"light\"\n validate={requiredValidator}\n />\n </Grid>\n\n {/* Phone */}\n <Grid item xs={12}>\n <Field\n name=\"phone\"\n label=\"Phone\"\n type=\"phone\"\n component={PhoneNumberField}\n fill={true}\n disableDropdown={false}\n setPhoneValidationIsLoading={setPhoneValidationIsLoading}\n defaultCountry=\"us\"\n isCountryCodeEditable={true}\n />\n </Grid>\n\n {/* Password */}\n <Grid item xs={12} md={6}>\n <Field\n name=\"password\"\n label=\"Password\"\n type=\"password\"\n component={CustomField}\n theme=\"light\"\n validate={passwordValidator}\n />\n </Grid>\n\n {/* Confirm Password */}\n <Grid item xs={12} md={6}>\n <Field\n name=\"passwordConfirmation\"\n label=\"Confirm Password\"\n type=\"password\"\n component={CustomField}\n theme=\"light\"\n validate={(value: string) => confirmPasswordValidator(value, props.values.password)}\n />\n </Grid>\n </Grid>\n\n <div className=\"login-modal-body\">\n <div className=\"login-action-button\">\n <button type=\"submit\" disabled={isSubmitting || phoneValidationIsLoading}>\n {isSubmitting ? 'Creating Account...' : 'Create Account'}\n </button>\n </div>\n </div>\n </Form>\n )}\n </Formik>\n )\n}\n","import './style.css'\n\nimport Box from '@mui/material/Box'\nimport Modal from '@mui/material/Modal'\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\nimport useMediaQuery from '@mui/material/useMediaQuery'\nimport axios, { AxiosError } from 'axios'\nimport { Field, Form, Formik } from 'formik'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport React, { FC, useState } from 'react'\n\nimport { authorize, getProfileData } from '../../api'\nimport { isBrowser, setLoggedUserData } from '../../utils'\nimport { requiredValidator } from '../../validators'\nimport { CustomField } from '../common/CustomField'\nimport { PoweredBy } from '../common/PoweredBy'\nimport { COLORS, MODAL_DIMENSIONS, TAB_STYLES } from './constants'\nimport { SignUpForm } from './SignUpForm'\n\nexport interface Props {\n onClose: () => void;\n onLogin: (res: IProfileData) => void;\n alreadyHasUser?: boolean;\n userExpired?: boolean;\n onAuthorizeSuccess?: (res: any) => void;\n onAuthorizeError?: (e: AxiosError) => void;\n onGetProfileDataSuccess?: (res: any) => void;\n onGetProfileDataError?: (e: AxiosError) => void;\n onForgotPassword?: () => void;\n onSignup?: () => void;\n modalClassname?: string;\n logo?: string;\n showForgotPasswordButton?: boolean;\n showSignUpButton?: boolean;\n showPoweredByImage?: boolean;\n registerUrl?: string;\n}\n\nconst style: React.CSSProperties = {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n width: MODAL_DIMENSIONS.WIDTH.DESKTOP,\n backgroundColor: '#e3e3e3',\n border: `1px solid ${COLORS.BORDER}`,\n outline: 'none',\n}\n\nconst mobileStyle: React.CSSProperties = {\n ...style,\n width: MODAL_DIMENSIONS.WIDTH.MOBILE,\n}\n\nexport const LoginModal: FC<Props> = ({\n onClose,\n onLogin,\n alreadyHasUser = false,\n userExpired = false,\n onGetProfileDataSuccess = _identity,\n onGetProfileDataError = _identity,\n onForgotPassword = _identity,\n onSignup = _identity,\n modalClassname = '',\n logo,\n showForgotPasswordButton = false,\n showSignUpButton = false,\n showPoweredByImage = false,\n}) => {\n const [error, setError] = useState('')\n const [activeTab, setActiveTab] = useState<'login' | 'signup'>('login')\n const isMobile = useMediaQuery('(max-width:600px)')\n\n // If onSignup is provided (custom callback), use old behavior\n const useCustomSignup = onSignup !== _identity\n\n const handleTabChange = (_event: React.SyntheticEvent, newValue: 'login' | 'signup') => {\n setActiveTab(newValue)\n }\n\n return (\n <Modal\n open={true}\n onClose={onClose}\n aria-labelledby=\"modal-modal-title\"\n aria-describedby=\"modal-modal-description\"\n className={`login-modal ${modalClassname}`}\n >\n <Box style={isMobile ? mobileStyle : style}\n sx={{\n '@media screen and (orientation:landscape)': {\n maxHeight: '80vh',\n overflowY: 'auto'\n }\n }}\n >\n <div>\n {showSignUpButton && !useCustomSignup && (\n <Tabs\n value={activeTab}\n onChange={handleTabChange}\n variant=\"fullWidth\"\n sx={{\n backgroundColor: TAB_STYLES.BACKGROUND_COLOR,\n marginBottom: TAB_STYLES.MARGIN_BOTTOM,\n '& .MuiTabs-indicator': {\n backgroundColor: TAB_STYLES.INDICATOR.BACKGROUND_COLOR,\n },\n }}\n >\n <Tab\n label=\"Login\"\n value=\"login\"\n sx={{\n fontFamily: TAB_STYLES.LABEL.FONT_FAMILY,\n fontWeight: TAB_STYLES.LABEL.FONT_WEIGHT,\n fontSize: TAB_STYLES.LABEL.FONT_SIZE,\n textTransform: TAB_STYLES.LABEL.TEXT_TRANSFORM,\n color: TAB_STYLES.LABEL.COLOR,\n '&.Mui-selected': {\n color: TAB_STYLES.LABEL.SELECTED_COLOR,\n },\n }}\n />\n <Tab\n label=\"Sign Up\"\n value=\"signup\"\n sx={{\n fontFamily: TAB_STYLES.LABEL.FONT_FAMILY,\n fontWeight: TAB_STYLES.LABEL.FONT_WEIGHT,\n fontSize: TAB_STYLES.LABEL.FONT_SIZE,\n textTransform: TAB_STYLES.LABEL.TEXT_TRANSFORM,\n color: TAB_STYLES.LABEL.COLOR,\n '&.Mui-selected': {\n color: TAB_STYLES.LABEL.SELECTED_COLOR,\n },\n }}\n />\n </Tabs>\n )}\n\n {activeTab === 'login' ? (\n <Formik\n initialValues={{ email: '', password: '' }}\n onSubmit={async ({ email, password }) => {\n try {\n const body = { email, password }\n const authRes = await authorize(body)\n let profileResponse = null\n try {\n profileResponse = await getProfileData()\n onGetProfileDataSuccess(profileResponse.data)\n } catch (e) {\n if (axios.isAxiosError(e)) {\n onGetProfileDataError(e)\n }\n return\n }\n\n const profileSpecifiedData = profileResponse.data\n const profileDataObj = setLoggedUserData(profileSpecifiedData)\n if (isBrowser) {\n window.localStorage.setItem('user_data', JSON.stringify(profileDataObj))\n const event = new window.CustomEvent('tf-login')\n window.document.dispatchEvent(event)\n }\n onLogin(_get(authRes, 'data.data', {}) as IProfileData)\n } catch (e) {\n if (axios.isAxiosError(e)) {\n const error = _get(e, 'response.data.message', 'Error')\n setError(error)\n } else if (e instanceof Error) {\n setError(e?.message || 'Error')\n }\n }\n }}\n >\n {props => (\n <Form onSubmit={props.handleSubmit}>\n <div className=\"login-logo-container\">\n <img\n className=\"login-logo-tff\"\n src={\n logo ||\n 'https://www.ticketfairy.com/resources/images/logo-ttf-black.svg'\n }\n alt=\"logo\"\n />\n </div>\n <div className=\"server_auth__error\">{error}</div>\n {alreadyHasUser && (\n <p className=\"info-text-for-login\">\n It appears this email is already attached to an account. Please log in\n here to complete your registration.\n </p>\n )}\n {userExpired && (\n <p className=\"info-text-for-login\">\n Your session has expired, please log in again.\n </p>\n )}\n <div className=\"login-modal-body\">\n <div className=\"login-modal-body__email\">\n <Field\n name=\"email\"\n label=\"Email\"\n type=\"email\"\n component={CustomField}\n theme=\"light\"\n validate={requiredValidator}\n />\n </div>\n <div className=\"login-modal-body__password\">\n <Field\n name=\"password\"\n label=\"Password\"\n type=\"password\"\n component={CustomField}\n theme=\"light\"\n validate={requiredValidator}\n />\n </div>\n <div className=\"login-action-button\">\n <button type=\"submit\">Login</button>\n </div>\n {showForgotPasswordButton && (\n <div className=\"forgot-password\">\n <span aria-hidden=\"true\" onClick={onForgotPassword}>\n Forgot password?\n </span>\n </div>\n )}\n {showSignUpButton && useCustomSignup && (\n <div className=\"forgot-password\">\n <span\n aria-hidden=\"true\"\n onClick={onSignup}\n style={{ cursor: 'pointer' }}\n >\n Sign up\n </span>\n </div>\n )}\n {showPoweredByImage ? <PoweredBy /> : null}\n </div>\n </Form>\n )}\n </Formik>\n ) : (\n <SignUpForm\n onSignUpSuccess={onLogin}\n onGetProfileDataSuccess={onGetProfileDataSuccess}\n onGetProfileDataError={onGetProfileDataError}\n logo={logo}\n />\n )}\n </div>\n </Box>\n </Modal>\n )\n}\n","// Theme colors\nexport const COLORS = {\n PRIMARY: '#212529',\n SECONDARY: '#666',\n BACKGROUND: '#fff',\n BORDER: 'white',\n INDICATOR: '#212529',\n}\n\n// Typography\nexport const TYPOGRAPHY = {\n FONT_FAMILY: 'Inter',\n FONT_WEIGHT: {\n SEMIBOLD: 600,\n BOLD: 700,\n },\n FONT_SIZE: {\n TAB: '16px',\n TITLE: '18px',\n },\n}\n\n// Modal dimensions\nexport const MODAL_DIMENSIONS = {\n WIDTH: {\n DESKTOP: 480,\n MOBILE: 345,\n },\n}\n\n// Tab configuration\nexport const TAB_STYLES = {\n BACKGROUND_COLOR: COLORS.BACKGROUND,\n MARGIN_BOTTOM: '30px',\n LABEL: {\n FONT_FAMILY: TYPOGRAPHY.FONT_FAMILY,\n FONT_WEIGHT: TYPOGRAPHY.FONT_WEIGHT.SEMIBOLD,\n FONT_SIZE: TYPOGRAPHY.FONT_SIZE.TAB,\n TEXT_TRANSFORM: 'none',\n COLOR: COLORS.SECONDARY,\n SELECTED_COLOR: COLORS.PRIMARY,\n },\n INDICATOR: {\n BACKGROUND_COLOR: COLORS.INDICATOR,\n },\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AxiosError } from 'axios'\nimport _get from 'lodash/get'\n\nimport { createPaymentPlan, handleFreeSuccess, handlePaymentSuccess } from '../../api'\n\ninterface Options {\n reviewData: any;\n isFreeTickets: boolean;\n paymentPlanIsAvailable: boolean;\n showPaymentPlanSection: boolean;\n handlePayment: any;\n setPaymentIsLoading: any;\n setError: any;\n orderData: any;\n eventId: any;\n isBrowser: boolean;\n onPaymentError: any;\n}\n\nexport const handlePaymentMiddleWare = async (\n error: any,\n data: object,\n {\n reviewData,\n isFreeTickets,\n paymentPlanIsAvailable,\n showPaymentPlanSection,\n handlePayment,\n setPaymentIsLoading,\n setError,\n orderData,\n eventId,\n isBrowser,\n onPaymentError,\n }: Options\n) => {\n try {\n if (error) {\n throw error\n }\n const {\n order_details: { order_hash },\n } = reviewData\n\n let paymentSuccessResponse\n\n if (isFreeTickets) {\n paymentSuccessResponse = await handleFreeSuccess(order_hash)\n } else if (paymentPlanIsAvailable && showPaymentPlanSection) {\n paymentSuccessResponse = await createPaymentPlan(\n order_hash,\n _get(data, 'paymentMethodId', '')\n )\n } else {\n paymentSuccessResponse = await handlePaymentSuccess(order_hash)\n }\n\n if (paymentSuccessResponse.status === 200) {\n handlePayment(paymentSuccessResponse)\n setPaymentIsLoading(false)\n\n // clear seat-map related data from localStorage\n localStorage.removeItem('reservationData')\n localStorage.removeItem(`reservationStart-${eventId}`)\n localStorage.removeItem('ownReservations')\n localStorage.removeItem('tierId')\n\n if (isBrowser) {\n (window as any)?.dataLayer?.push({\n event: 'Purchase',\n orderValue: orderData.total,\n orderCurrency: orderData.currency,\n orderId: orderData.id,\n })\n }\n }\n } catch (e) {\n setError(_get(e, 'response.data.message', null))\n setPaymentIsLoading(false)\n onPaymentError(\n ((e as Record<string, unknown>).response as AxiosError) || e,\n reviewData.event_details.slug\n )\n }\n}\n","import React from 'react'\n\nimport { createFixedFloatNormalizer, currencyNormalizerCreator } from '../../normalizers'\nimport { IPaymentPlanConfig } from '../../types/payment-plan-configuration'\nimport { Checkbox } from '../common'\n\ninterface PaymentPlanSectionProps {\n paymentPlanConfig: IPaymentPlanConfig;\n currency: string;\n paymentPlanUseSavedCard: boolean;\n setPaymentPlanUseSavedCard: (value: boolean) => void;\n}\n\nexport const PaymentPlanSection = (props: PaymentPlanSectionProps) => {\n const {\n paymentPlanConfig,\n currency,\n paymentPlanUseSavedCard,\n setPaymentPlanUseSavedCard,\n } = props\n\n return (\n <div className=\"payment_plan\">\n <h2 className=\"payment_plan_title\">Payment Plan Terms</h2>\n <div className=\"payment_plan_block\">\n <div className=\"payment_plan_text\">\n By clicking on the “Confirm Payment Plan” button, you are starting your payment\n plan of{' '}\n <span className=\"payment_plan_highlight\">\n {paymentPlanConfig.total_installments}\n </span>{' '}\n payments of{' '}\n <span className=\"payment_plan_highlight\">\n {currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(paymentPlanConfig.price_per_installment),\n currency\n )}\n </span>\n , which will be drawn from your account every {paymentPlanConfig.interval} days,\n with the first payment taken later today.\n </div>\n {paymentPlanConfig.has_admin_fee && (\n <div className=\"payment_plan_text\">\n This includes a non-refundable admin fee of{' '}\n <span className=\"payment_plan_highlight\">\n {currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(paymentPlanConfig.admin_fee),\n currency\n )}\n </span>{' '}\n per payment.\n </div>\n )}\n {paymentPlanConfig.requires_deposit && (\n <div className=\"payment_plan_text\">\n You will also be charged a single, non-refundable deposit of{' '}\n <span className=\"payment_plan_highlight\">\n {currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(paymentPlanConfig.deposit),\n currency\n )}\n </span>\n .\n </div>\n )}\n <div className=\"payment_plan_text payment_plan_note payment_plan_highlight\">\n NOTE: If today’s payment fails, your plan will not activate. Your tickets will\n not be issued until you complete your final payment.\n </div>\n {!paymentPlanConfig.non_refundable_type && (\n <div className=\"payment_plan_text\">\n If you do not complete your payments, your order will be canceled. Your{' '}\n <span className=\"payment_plan_highlight\">\n first payment of{' '}\n {currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(paymentPlanConfig.price_per_installment),\n currency\n )}\n </span>\n {paymentPlanConfig.has_admin_fee && (\n <>\n , plus the{' '}\n <span className=\"payment_plan_highlight\">\n non-refundable admin-fee of{' '}\n {currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(paymentPlanConfig.admin_fee),\n currency\n )}\n </span>\n </>\n )}{' '}\n will not be refunded.\n </div>\n )}\n {paymentPlanConfig.non_refundable_type === 'percent' && (\n <div className=\"payment_plan_text\">\n If you do not complete your payments, you will receive{' '}\n <span className=\"payment_plan_highlight\">\n {createFixedFloatNormalizer(0)(\n 100 - paymentPlanConfig.non_refundable_amount\n )}\n %\n </span>{' '}\n of your money back\n {paymentPlanConfig.requires_deposit && (\n <>\n , excluding your{' '}\n {currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(paymentPlanConfig.deposit),\n currency\n )}{' '}\n deposit\n </>\n )}\n .\n </div>\n )}\n {paymentPlanConfig.non_refundable_type === 'fixed' && (\n <div className=\"payment_plan_text\">\n If you do not complete your payments, you will receive all your money back\n {paymentPlanConfig.non_refundable_amount && (\n <>\n except for the non-refundable amount of{' '}\n {currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(paymentPlanConfig.non_refundable_amount),\n currency\n )}\n {paymentPlanConfig.requires_deposit && (\n <>\n , excluding your{' '}\n {currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(paymentPlanConfig.deposit),\n currency\n )}{' '}\n deposit\n </>\n )}\n </>\n )}\n .\n </div>\n )}\n {!!paymentPlanConfig.saved_card?.stripe_payment_method_id && (\n <>\n {paymentPlanUseSavedCard && (\n <div className=\"payment_plan_text\">\n {' '}\n Your payment will proceed with the card ending in ****{' '}\n <span className=\"payment_plan_highlight\">\n {'' + paymentPlanConfig.saved_card.last_4_digits}\n </span>\n </div>\n )}\n <div>\n <Checkbox\n label={<span className=\"payment_plan_toggle_label\">Use this card</span>}\n required={true}\n onChange={() => {\n setPaymentPlanUseSavedCard(!paymentPlanUseSavedCard)\n }}\n checked={paymentPlanUseSavedCard}\n />\n </div>\n </>\n )}\n </div>\n </div>\n )\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable max-len */\nimport './style.css'\n\nimport { ThemeOptions } from '@mui/material'\nimport Alert from '@mui/material/Alert'\nimport CircularProgress from '@mui/material/CircularProgress'\nimport Container from '@mui/material/Container'\nimport { createTheme, ThemeProvider } from '@mui/material/styles'\nimport { CSSProperties } from '@mui/styles'\nimport { Elements, PaymentElement, useElements, useStripe } from '@stripe/react-stripe-js'\nimport {\n loadStripe,\n StripeConstructorOptions,\n StripeElementsOptions,\n} from '@stripe/stripe-js'\nimport { StripePaymentElementOptions } from '@stripe/stripe-js'\nimport { AxiosError } from 'axios'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport _isEmpty from 'lodash/isEmpty'\nimport _map from 'lodash/map'\nimport { nanoid } from 'nanoid'\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport { getConditions, getPaymentData } from '../../api'\nimport { FEES_STYLES } from '../../constants'\nimport { usePixel } from '../../hooks/usePixel'\nimport { createFixedFloatNormalizer, currencyNormalizerCreator } from '../../normalizers'\nimport { IAddOn, IOrderData, IPaymentField } from '../../types'\nimport {\n IPaymentPlanConfig,\n IPaymentPlanConfigCard,\n} from '../../types/payment-plan-configuration'\nimport { CONFIGS, isBrowser } from '../../utils'\nimport { getQueryVariable } from '../../utils/getQueryVariable'\nimport { Checkbox, Loader } from '../common/index'\nimport TimerWidget from '../timerWidget'\nimport { handlePaymentMiddleWare } from './handlePayment'\nimport { PaymentPlanSection } from './PaymentPlanSection'\n\n// Wrapper component to access Stripe hooks inside Elements context\nconst StripeWrapper = ({\n options,\n onStripeReady,\n}: {\n options?: StripePaymentElementOptions;\n onStripeReady: (stripe: any, elements: any) => void;\n}) => {\n const stripe = useStripe()\n const elements = useElements()\n\n useEffect(() => {\n if (stripe && elements) {\n onStripeReady(stripe, elements)\n }\n }, [stripe, elements, onStripeReady])\n\n return <PaymentElement options={options} />\n}\n\nexport interface IPaymentPage {\n paymentFields: IPaymentField[];\n handlePayment: any;\n checkoutData: any;\n formTitle?: string;\n errorText?: string;\n onErrorClose?: () => void;\n onGetPaymentDataSuccess: (value: any) => void;\n onGetPaymentDataError: (value: AxiosError) => void;\n onPaymentError: (value: AxiosError, slug?: string) => void;\n themeOptions?: ThemeOptions & {\n input?: CSSProperties;\n checkbox?: CSSProperties;\n };\n elementsOptions?: StripeElementsOptions;\n paymentElementOptions?: StripePaymentElementOptions;\n onCountdownFinish?: () => void;\n enableTimer?: boolean;\n paymentInfoLabel?: string;\n orderInfoLabel?: string;\n displayPaymentButton?: boolean;\n hidePaymentForm?: boolean;\n hideFieldsBlock?: boolean;\n isSinglePageCheckout?: boolean;\n stripePublishableKey?: string;\n stripeAccountId?: string;\n onStripeReady?: (stripe: any, elements: any) => void;\n enablePaymentPlan?: boolean;\n}\n\nconst initialPaymentPlanConfiguration: IPaymentPlanConfig = {\n requires_deposit: false,\n deposit: 0,\n interval: 0,\n non_refundable_amount: 0,\n non_refundable_type: null,\n has_admin_fee: false,\n admin_fee: 0,\n total_installments: 0,\n price_per_installment: 0,\n stripe_setup_intent_secret: '',\n total: 0,\n saved_card: {\n last_4_digits: null,\n stripe_payment_method_id: null,\n } as IPaymentPlanConfigCard,\n}\n\nconst initialOrderValues: IOrderData = {\n id: '',\n product_name: '',\n ticketType: '',\n quantity: '',\n price: '',\n total: '',\n currency: 'USD',\n guest_count: '',\n pay_now: '',\n add_ons: [] as IAddOn[],\n cost: '',\n}\n\nconst initialReviewValues = {\n order_details: {\n id: '',\n order_hash: '',\n },\n payment_method: {\n stripe_client_secret: '',\n stripe_payment_plan_enabled: false,\n stripe_payment_plan_configuration: {} as any,\n stripe_publishable_key: '',\n id: '',\n name: '',\n stripeConnectedAccount: '',\n },\n billing_info: {},\n event_details: {\n flagSeatMapAllowed: false,\n slug: '',\n },\n}\n\nexport const PaymentContainer = ({\n paymentFields = [],\n handlePayment,\n formTitle = 'Get Your Tickets',\n errorText,\n checkoutData,\n onErrorClose = _identity,\n onGetPaymentDataSuccess = _identity,\n onGetPaymentDataError = _identity,\n onPaymentError = _identity,\n themeOptions,\n elementsOptions,\n paymentElementOptions,\n onCountdownFinish = _identity,\n enableTimer = false,\n orderInfoLabel = 'Order Review',\n paymentInfoLabel = 'Order Confirmation',\n displayPaymentButton = true,\n hidePaymentForm = false,\n hideFieldsBlock = false,\n isSinglePageCheckout = false,\n stripePublishableKey,\n stripeAccountId,\n onStripeReady = _identity,\n enablePaymentPlan = true,\n}: IPaymentPage) => {\n const [reviewData, setReviewData] = useState(initialReviewValues)\n const [orderData, setOrderData] = useState(initialOrderValues)\n const [error, setError] = useState(null)\n const [paymentIsLoading, setPaymentIsLoading] = useState(false)\n const [paymentDataIsLoading, setPaymentDataIsLoading] = useState(true)\n const [conditions, setConditions] = useState<{ id: string, text: string }[]>([])\n const [currency, setCurrency] = useState('')\n const [showPaymentPlanSection, setShowPaymentPlanSection] = useState(false)\n\n const [paymentPlanIsAvailable, setPaymentPlanIsAvailable] = useState(false)\n const [paymentPlanConfig, setPaymentPlanConfig] = useState(\n initialPaymentPlanConfiguration\n )\n const [paymentPlanUseSavedCard, setPaymentPlanUseSavedCard] = useState(true)\n\n const showFormTitle = Boolean(formTitle)\n const showErrorText = Boolean(errorText)\n\n const eventId =\n getQueryVariable('event_id') || _get(reviewData, 'cart[0].product_id') || ''\n const { hash, total } = checkoutData\n const isFreeTickets = useMemo(\n () => (!Number(total) && !Number(orderData.total)) || !Number(orderData.pay_now),\n [total, orderData]\n )\n\n const pageUrl = isBrowser ? window.location.href.split('?')[0] : ''\n usePixel(eventId, { page: 'review', pageUrl })\n\n console.log({ conditions })\n\n useEffect(() => {\n const fetchPaymentData = async () => {\n try {\n const paymentDataResponse = await getPaymentData(hash)\n if (paymentDataResponse.success) {\n const attributes = paymentDataResponse?.data?.attributes\n setReviewData(attributes)\n const { cart, order_details } = attributes\n const {\n tickets: [ticket],\n } = order_details\n\n const orderDataArray = _map(order_details.tickets, item => ({\n product_name: cart[0]?.product_name,\n ticketType: item?.name,\n quantity: item?.guest_count,\n price: item?.price,\n cost: item?.cost,\n id: item.id,\n count: item?.quantity,\n }))\n\n const orderData = {\n id: order_details?.id,\n product_name: cart[0]?.product_name,\n ticketType: ticket?.name,\n quantity: ticket?.quantity,\n price: ticket?.price,\n total: order_details?.total,\n currency: order_details?.currency,\n add_ons: order_details?.add_ons || [],\n pay_now: order_details?.pay_now || '',\n guest_count: order_details?.guest_count || '',\n debt: order_details?.debt || null,\n tableTypes: orderDataArray,\n cost: ticket?.cost,\n subtotal: order_details?.subtotal,\n fees: order_details?.fees,\n }\n setOrderData(orderData)\n setCurrency(order_details?.currency)\n onGetPaymentDataSuccess(paymentDataResponse.data)\n }\n } catch (e) {\n setError(_get(e, 'response.data.message', null))\n onGetPaymentDataError((e as Record<string, unknown>).response as AxiosError)\n } finally {\n setPaymentDataIsLoading(false)\n }\n }\n\n if (isSinglePageCheckout) {\n if (!orderData?.total) {\n setOrderData(current => ({ ...current, pay_now: 1, total: 1 }))\n setPaymentDataIsLoading(false)\n }\n } else {\n fetchPaymentData()\n }\n }, [\n orderData,\n hash,\n isSinglePageCheckout,\n onGetPaymentDataError,\n onGetPaymentDataSuccess,\n ])\n\n //just once\n useEffect(() => {\n // fetch conditions data\n const fetchConditions = async () => {\n if (eventId) {\n const conditionsResponse = await getConditions(eventId)\n const conditionsInfo = conditionsResponse.data.attributes\n setConditions(\n conditionsInfo\n ? conditionsInfo.map((item: { text: any }) => ({\n id: nanoid(),\n text: item.text,\n checked: false,\n }))\n : []\n )\n }\n }\n fetchConditions()\n }, [eventId])\n\n const showPaymentForm = () => {\n if (hidePaymentForm) {\n return false\n }\n\n let showPaymentForm = !isFreeTickets\n\n if (\n paymentPlanIsAvailable &&\n showPaymentPlanSection &&\n !!paymentPlanConfig.saved_card?.stripe_payment_method_id\n ) {\n showPaymentForm = !paymentPlanUseSavedCard\n }\n\n return showPaymentForm\n }\n\n const getPublishableKey = () =>\n stripePublishableKey || _get(reviewData, 'payment_method.stripe_publishable_key')\n\n const getStripePromise = useCallback(() => {\n const stripePublishableKey = getPublishableKey()\n const stripeAccount =\n stripeAccountId || _get(reviewData, 'payment_method.stripe_connected_account')\n\n const options: StripeConstructorOptions = {}\n\n if (stripeAccount) {\n options.stripeAccount = stripeAccount\n }\n\n return loadStripe(stripePublishableKey, options)\n }, [reviewData, stripePublishableKey])\n\n const themeMui = createTheme(themeOptions)\n const hasTableTypes = Boolean(Number(orderData.guest_count))\n const paymentFieldsData = hasTableTypes\n ? [\n {\n label: 'Event',\n id: 'product_name',\n },\n {\n label: '',\n id: 'tableTypes',\n },\n {\n label: 'Add-ons',\n id: 'add_ons',\n },\n {\n label: 'Total (incl. fees, card processing and taxes)',\n id: 'total',\n normalizer: (value: string, currency: string) =>\n currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(parseFloat(value)),\n currency\n ),\n },\n {\n label: 'Pay Now',\n id: 'pay_now',\n normalizer: (value: string, currency: string) =>\n currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(parseFloat(value)),\n currency\n ),\n },\n {\n label: 'Pay On Check-in',\n id: 'debt',\n normalizer: (value: string, currency: string) =>\n currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(parseFloat(value)),\n currency\n ),\n },\n ]\n : paymentFields\n const isTable = orderData?.guest_count\n\n useEffect(() => {\n const paymentMethod = reviewData.payment_method || {}\n console.log({\n paymentMethod,\n enablePaymentPlan,\n })\n const paymentPlanAvailable =\n paymentMethod.stripe_payment_plan_enabled && enablePaymentPlan\n setPaymentPlanIsAvailable(paymentPlanAvailable)\n\n if (paymentPlanAvailable) {\n const paymentPlanConfig =\n paymentMethod.stripe_payment_plan_configuration || initialPaymentPlanConfiguration\n setPaymentPlanConfig(paymentPlanConfig)\n setPaymentPlanUseSavedCard(!!paymentPlanConfig.saved_card?.stripe_payment_method_id)\n if (isBrowser) {\n const sessionData = window.localStorage.getItem('paymentConfiguration')\n const session = sessionData ? JSON.parse(sessionData) : {}\n if (!!session && session?.orderId == reviewData.order_details?.id) {\n setPaymentPlanUseSavedCard(session.paymentPlanUseSavedCard ?? false)\n setShowPaymentPlanSection(session.showPaymentPlanSection ?? false)\n }\n }\n }\n }, [enablePaymentPlan, reviewData])\n\n useEffect(() => {\n if (isBrowser && !!orderData?.id) {\n window.localStorage.setItem(\n 'paymentConfiguration',\n JSON.stringify({\n paymentPlanUseSavedCard,\n showPaymentPlanSection,\n orderId: orderData?.id,\n })\n )\n }\n }, [showPaymentPlanSection, paymentPlanUseSavedCard, orderData?.id])\n\n return (\n <ThemeProvider theme={themeMui}>\n <div\n className={`payment_page ${isSinglePageCheckout ? 'payment_page_single' : ''}`}\n >\n {enableTimer && (\n <TimerWidget\n expires_at={_get(reviewData, 'expires_at', 0)}\n buyLoading={paymentIsLoading}\n onCountdownFinish={onCountdownFinish}\n />\n )}\n {isSinglePageCheckout\n ? null\n : error && (\n <Alert severity=\"error\" onClose={onErrorClose} variant=\"filled\">\n {error}\n </Alert>\n )}\n {paymentDataIsLoading && <Loader />}\n {!paymentDataIsLoading && (\n <Container maxWidth=\"md\">\n {showFormTitle && <h1>{isTable ? 'Get Your Tables' : formTitle}</h1>}\n <div className=\"order_info_text\">{orderInfoLabel}</div>\n {!hideFieldsBlock && (\n <div\n className=\"order_info_section\"\n style={{ display: hasTableTypes ? 'block' : 'grid' }}\n >\n {_map(paymentFieldsData, field => {\n const { id, label, className = '', normalizer = _identity } = field\n let value = orderData[id as keyof IOrderData] || ''\n let component = null\n\n if (field.id === 'add_ons' && _isEmpty(value)) {\n return false\n }\n\n if (\n field.id === 'total' &&\n paymentPlanIsAvailable &&\n showPaymentPlanSection\n ) {\n value = '' + paymentPlanConfig.total\n }\n\n if (field.id === 'tableTypes') {\n const valueArray = value as Array<any>\n\n component = (\n <div\n key={id}\n className=\"order_info_block\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n {_map(valueArray, tableTypeItem => (\n <div\n key={tableTypeItem.id}\n style={{\n display: 'grid',\n gridTemplateColumns: '33% 33% 33%',\n gridColumnGap: '10%',\n }}\n >\n <div className=\"order_info_block\">\n <div className=\"order_info_title\">Table Type</div>\n <div className={`${className} order_info_text`}>\n {tableTypeItem.ticketType}\n </div>\n </div>\n <div className=\"order_info_block\">\n <div className=\"order_info_title\">Number of Tables</div>\n <div className={`${className} order_info_text`}>\n {tableTypeItem.count}\n </div>\n </div>\n <div className=\"order_info_block\">\n <div className=\"order_info_title\">Guest Count</div>\n <div className={`${className} order_info_text`}>\n {tableTypeItem.quantity}\n </div>\n </div>\n </div>\n ))}\n </div>\n )\n }\n\n return (\n component || (\n <div key={id} className={`order_info_block ${className}`}>\n <div className=\"order_info_title\">{label}</div>\n <div className={`${className} order_info_text`}>\n {typeof value === 'string' || typeof value === 'number'\n ? normalizer(value, currency, orderData)\n : _map(value, item => (\n <div>\n <div key={item.id} className=\"add-on-container\">\n <span>{item.quantity}</span>\n <span className=\"add-on-x\">{' x '}</span>\n <span>\n {item.groupName ? item.groupName + ' - ' : ''}\n </span>\n <span>{item.name}</span>\n <span>{' - '}</span>\n <span>\n {CONFIGS.FEES_STYLE === FEES_STYLES.TRADITIONAL &&\n currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(\n parseFloat(item.price)\n ),\n currency\n ) + ' (incl. fees)'}\n {CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH &&\n currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(\n parseFloat(item.cost)\n ),\n currency\n )}\n </span>\n <span className=\"add-on-each\">{' each'}</span>\n </div>\n {CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH && (\n <p className=\"fees\">\n {`(${currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(\n parseFloat(String(item.price))\n ),\n currency\n )} with fees)`}\n </p>\n )}\n </div>\n ))}\n </div>\n </div>\n )\n )\n })}\n </div>\n )}\n {!isFreeTickets && paymentPlanIsAvailable && (\n <div className=\"payment_toggle\">\n <Checkbox\n label={\n <span className=\"payment_plan_toggle_label\">\n Click to checkout using Payment Plan\n </span>\n }\n required={true}\n onChange={() => {\n setShowPaymentPlanSection(!showPaymentPlanSection)\n }}\n checked={showPaymentPlanSection}\n />\n </div>\n )}\n {showPaymentPlanSection && (\n <PaymentPlanSection\n paymentPlanConfig={paymentPlanConfig}\n currency={currency}\n paymentPlanUseSavedCard={paymentPlanUseSavedCard}\n setPaymentPlanUseSavedCard={setPaymentPlanUseSavedCard}\n />\n )}\n {showPaymentForm() && !!getPublishableKey() ? (\n <div className=\"payment_info\">\n <div className=\"payment_info_label\">{paymentInfoLabel}</div>\n {showErrorText && <p className=\"payment_info__error\">{errorText}</p>}\n <div>\n {elementsOptions && (\n <Elements stripe={getStripePromise()} options={elementsOptions}>\n <StripeWrapper\n onStripeReady={onStripeReady}\n options={paymentElementOptions}\n />\n </Elements>\n )}\n </div>\n </div>\n ) : displayPaymentButton ? (\n <div\n className={`payment_button ${\n paymentIsLoading ? 'disabled-payment-button' : ''\n }`}\n >\n <button\n disabled={paymentIsLoading}\n type=\"button\"\n onClick={() => {\n setPaymentIsLoading(true)\n\n let data\n\n if (\n paymentPlanIsAvailable &&\n showPaymentPlanSection &&\n paymentPlanUseSavedCard\n ) {\n data = {\n paymentMethodId:\n paymentPlanConfig.saved_card?.stripe_payment_method_id,\n }\n }\n\n handlePaymentMiddleWare(\n data,\n {},\n {\n reviewData,\n isFreeTickets,\n paymentPlanIsAvailable,\n showPaymentPlanSection,\n handlePayment,\n setPaymentIsLoading,\n setError,\n orderData,\n eventId,\n isBrowser,\n onPaymentError,\n }\n )\n }}\n >\n {paymentIsLoading ? (\n <CircularProgress size={26} />\n ) : isFreeTickets ? (\n 'Complete Registration'\n ) : (\n 'Confirm Payment Plan'\n )}\n </button>\n </div>\n ) : null}\n </Container>\n )}\n </div>\n </ThemeProvider>\n )\n}\n","import './style.css'\n\nimport { Box, CircularProgress, Modal } from '@mui/material'\nimport axios, { AxiosError } from 'axios'\nimport { Field, Form, Formik } from 'formik'\nimport _identity from 'lodash/identity'\nimport React, { FC, useState } from 'react'\nimport * as Yup from 'yup'\n\nimport { register } from '../../api'\nimport { CONFIGS } from '../../utils'\nimport { CustomField } from '../common/CustomField'\nimport { PoweredBy } from '../common/PoweredBy'\n\ninterface ISignupProps {\n onClose: () => void;\n onLogin: () => void;\n onRegisterSuccess: (res: any) => void;\n onRegisterError: (e: AxiosError, email: string) => void;\n showPoweredByImage?: boolean;\n}\n\ninterface ValuesTypes {\n firstName: string;\n lastName: string;\n email: string;\n password: string;\n confirmPassword: string;\n}\n\nconst style: React.CSSProperties = {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n minWidth: 480,\n backgroundColor: '#fff',\n border: '1px solid white',\n outline: 'none',\n padding: '14px',\n}\n\nconst SignupSchema = Yup.object().shape({\n firstName: Yup.string().required('Required'),\n lastName: Yup.string().required('Required'),\n email: Yup.string().email('Invalid email').required('Required'),\n password: Yup.string()\n .min(8, 'Password must have 8+ characters')\n .required('Required')\n .matches(\n new RegExp('^(?=.*[@$!%*#?&])'),\n 'Password must contain at least one special character'\n ),\n confirmPassword: Yup.string()\n .required('Required')\n .oneOf([Yup.ref('password'), null], 'Passwords must match'),\n})\n\nexport const SignupModal: FC<ISignupProps> = ({\n onClose = _identity,\n onLogin = _identity,\n onRegisterSuccess = _identity,\n onRegisterError = _identity,\n showPoweredByImage = false,\n}) => {\n const [loading, setLoading] = useState(false)\n\n const onSignup = async (values: ValuesTypes) => {\n try {\n setLoading(true)\n const formData = new FormData()\n formData.set('first_name', values.firstName)\n formData.set('last_name', values.lastName)\n formData.set('email', values.email)\n formData.set('password', values.password)\n formData.set('password_confirmation', values.confirmPassword)\n formData.append(\n 'client_id',\n CONFIGS.CLIENT_ID || 'e9d8f8922797b4621e562255afe90dbf'\n )\n formData.append(\n 'client_secret',\n CONFIGS.CLIENT_SECRET || 'b89c191eff22fdcf84ac9bfd88d005355a151ec2c83b26b9'\n )\n\n const res = await register(formData)\n\n onRegisterSuccess(res)\n onClose()\n } catch (e) {\n if (axios.isAxiosError(e)) {\n onRegisterError(e, values.email)\n }\n } finally {\n setLoading(false)\n }\n }\n\n const _onClose = loading ? _identity : onClose\n\n return (\n <Modal\n open={true}\n onClose={_onClose}\n aria-labelledby=\"modal-modal-title\"\n aria-describedby=\"modal-modal-description\"\n className=\"signup-modal\"\n >\n <Box style={style}>\n <div>\n <Formik\n initialValues={{\n firstName: '',\n lastName: '',\n email: '',\n password: '',\n confirmPassword: '',\n }}\n validationSchema={SignupSchema}\n onSubmit={onSignup}\n >\n {({ isValid, dirty, handleSubmit }) => (\n <Form onSubmit={handleSubmit}>\n <div className=\"signup-container\">\n <div className=\"title\">Create an Account</div>\n <div className=\"signup-container__twoFields\">\n <div className=\"is-half\">\n <Field\n name=\"firstName\"\n label=\"First Name\"\n component={CustomField}\n />\n </div>\n <div className=\"is-half\">\n <Field name=\"lastName\" label=\"Last Name\" component={CustomField} />\n </div>\n </div>\n <div className=\"signup-container__singleField\">\n <div className=\"\">\n <Field name=\"email\" label=\"Email\" component={CustomField} />\n </div>\n </div>\n <div className=\"signup-container__twoFields\">\n <div className=\"is-half\">\n <Field\n name=\"password\"\n label=\"Password\"\n type=\"password\"\n component={CustomField}\n />\n </div>\n <div className=\"is-half\">\n <Field\n name=\"confirmPassword\"\n label=\"Confirm Password\"\n type=\"password\"\n component={CustomField}\n />\n </div>\n </div>\n </div>\n <div className=\"signup-action-button\">\n <button type=\"submit\" disabled={!(isValid && dirty)}>\n {loading ? <CircularProgress size=\"22px\" /> : 'Submit'}\n </button>\n </div>\n <div className=\"login\">\n <span onClick={onLogin}>Login</span>\n </div>\n {showPoweredByImage ? <PoweredBy /> : null}\n </Form>\n )}\n </Formik>\n </div>\n </Box>\n </Modal>\n )\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport './style.css'\n\nimport { CircularProgress, ThemeOptions } from '@mui/material'\nimport Backdrop from '@mui/material/Backdrop'\nimport Button from '@mui/material/Button'\nimport { createTheme, ThemeProvider } from '@mui/material/styles'\nimport { CSSProperties } from '@mui/styles'\nimport { Stripe, StripeElementsOptions } from '@stripe/stripe-js'\nimport axios, { AxiosError } from 'axios'\nimport { Field, Form, Formik, FormikHelpers, FormikProps, FormikValues } from 'formik'\nimport _find from 'lodash/find'\nimport _forEach from 'lodash/forEach'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport _isEmpty from 'lodash/isEmpty'\nimport _isEqual from 'lodash/isEqual'\nimport _map from 'lodash/map'\nimport { nanoid } from 'nanoid'\nimport React, { FC, useCallback, useEffect, useRef, useState } from 'react'\n\nimport {\n AttributesConfig,\n checkEmailExists,\n getCart,\n getCheckoutPageConfigs,\n getCountries,\n getPaymentData,\n getProfileData,\n getStates,\n postOnCheckout,\n setCustomHeader,\n} from '../../api'\nimport { updateCheckout } from '../../api/checkout'\nimport { withCustomFields } from '../../hoc'\nimport { usePixel } from '../../hooks/usePixel'\nimport { IBillingInfoData } from '../../types'\nimport { ICheckoutResponseData } from '../../types/api/checkout'\nimport {\n createCheckoutDataBodyWithDefaultHolder,\n deleteCookieByName,\n getCookieByName,\n isBrowser,\n setLoggedUserData,\n} from '../../utils'\nimport { ErrorFocus } from '../../utils/formikErrorFocus'\nimport { emailRegex } from '../../validators'\nimport { AddonsContainter, IAddonContainterProps } from '../addonsContainer'\nimport SimpleAddonsContainer from '../addonsContainer/SimpleAddonsContainer'\nimport SnackbarAlert from '../common/SnackbarAlert'\nimport { ForgotPasswordModal } from '../forgotPasswordModal'\nimport { VerificationPendingModal } from '../idVerificationContainer/VerificationPendingModal'\nimport { LoginModal } from '../loginModal'\nimport { IPaymentPage, PaymentContainer } from '../paymentContainer'\nimport { SignupModal } from '../signupModal'\nimport TimerWidget from '../timerWidget'\nimport { usePaymentRedirect, useStripePayment } from './hooks'\nimport {\n assingUniqueIds,\n createCheckoutDataBody,\n filterBillingInfoFields,\n getFieldComponent,\n getFieldLabel,\n getInitialValues,\n getValidateFunctions,\n ICheckoutBody,\n renderComponentWithProps,\n} from './utils'\n\nexport interface IBillingInfoPage {\n data?: IBillingInfoData[];\n ticketHoldersFields?: IBillingInfoData;\n handleSubmit?: (\n values: FormikValues,\n formikHelpers: FormikHelpers<FormikValues>,\n eventId: any,\n res: any,\n checkoutUpdateResponse?: any,\n paymentResponse?: any\n ) => void;\n onRegisterSuccess?: (value: any) => void;\n onRegisterError?: (e: AxiosError, email: string) => void;\n onSubmitError?: (e: AxiosError) => void;\n onGetCartSuccess?: (res: any) => void;\n onGetCartError?: (e: AxiosError) => void;\n onGetCountriesSuccess?: (res: any) => void;\n onGetCountriesError?: (e: AxiosError) => void;\n onGetStatesSuccess?: (res: any) => void;\n onGetStatesError?: (e: AxiosError) => void;\n onGetProfileDataSuccess?: (res: any) => void;\n onGetProfileDataError?: (e: AxiosError) => void;\n onGetCheckoutConfigsSuccess?: (res: any) => void;\n onGetCheckoutConfigsError?: (e: AxiosError) => void;\n onLogin?: () => void;\n onLoginSuccess?: () => void;\n onErrorClose?: () => void;\n onCheckoutUpdateSuccess?: (res: any) => void;\n onCheckoutUpdateError?: (e: AxiosError) => void;\n initialValues?: FormikValues;\n buttonName?: string;\n freeOrderButtonName?: string;\n theme?: 'light' | 'dark';\n isLoggedIn?: boolean;\n accountInfoTitle?: string | JSX.Element;\n hideLogo?: boolean;\n themeOptions?: ThemeOptions & {\n input?: CSSProperties;\n checkbox?: CSSProperties;\n };\n hideErrorsAlertSection?: boolean;\n onSkipBillingPage: (data: any) => void;\n skipPage?: boolean;\n canSkipHolderNames?: boolean;\n shouldFetchCountries?: boolean;\n onForgotPasswordSuccess?: (res: any) => void;\n onForgotPasswordError?: (e: AxiosError) => void;\n onCountdownFinish?: () => void;\n enableTimer?: boolean;\n logo?: string;\n showForgotPasswordButton?: boolean;\n showSignUpButton?: boolean;\n brandOptIn?: boolean;\n showPoweredByImage?: boolean;\n isCountryCodeEditable?: boolean;\n customFieldsOrderKeys?: string[];\n customFieldsTicketHolderKeys?: string[];\n onPendingVerification?: () => void;\n includeAddons?: boolean;\n addonsProps?: IAddonContainterProps;\n addOnDataWithCustomFields?: any;\n isSinglePageCheckout?: boolean;\n paymentProps?: Partial<IPaymentPage>;\n paymentSectionAddon?: React.ReactNode;\n}\n\nconst LogicRunner: FC<{\n brandOptIn?: boolean;\n values: any;\n errors: any;\n setStates: React.Dispatch<any>;\n setFieldValue: any;\n setValues: any;\n setUserValues: any;\n onGetStatesSuccess: any;\n onGetStatesError: any;\n shouldFetchCountries: boolean;\n}> = ({\n values,\n setStates,\n setFieldValue,\n setValues,\n setUserValues,\n onGetStatesSuccess,\n onGetStatesError,\n shouldFetchCountries,\n brandOptIn,\n}) => {\n const prevCountry = useRef(values.country)\n const prevBuyerData = useRef({\n firstName: '',\n lastName: '',\n email: '',\n phone: '',\n })\n const hasLoadedUserData = useRef(false)\n useEffect(() => {\n const fetchStates = async () => {\n try {\n const res = await getStates(values.country)\n const mappedStates = _map(res.data, (item, key) => ({\n label: item,\n value: key,\n }))\n setStates(mappedStates)\n if (prevCountry.current !== values.country) {\n const stateExists = mappedStates.find(\n state => state.value === values.state\n )?.value\n setFieldValue('state', stateExists ?? mappedStates[0]?.value ?? '')\n prevCountry.current = values.country\n }\n onGetStatesSuccess(res.data)\n } catch (e) {\n if (axios.isAxiosError(e)) {\n onGetStatesError(e)\n }\n }\n }\n shouldFetchCountries && fetchStates()\n }, [values.country, setStates, setFieldValue])\n\n // Auto-fill first holder with buyer data\n useEffect(() => {\n const buyerFirstName = values.firstName || ''\n const buyerLastName = values.lastName || ''\n const buyerEmail = values.email || ''\n const buyerPhone = values.phone || ''\n\n // Check if any buyer data has changed\n const firstNameChanged = prevBuyerData.current.firstName !== buyerFirstName\n const lastNameChanged = prevBuyerData.current.lastName !== buyerLastName\n const emailChanged = prevBuyerData.current.email !== buyerEmail\n const phoneChanged = prevBuyerData.current.phone !== buyerPhone\n\n // Update holder fields individually based on what changed\n if (firstNameChanged) {\n setFieldValue('holderFirstName-0', buyerFirstName, false)\n prevBuyerData.current.firstName = buyerFirstName\n }\n\n if (lastNameChanged) {\n setFieldValue('holderLastName-0', buyerLastName, false)\n prevBuyerData.current.lastName = buyerLastName\n }\n\n if (emailChanged) {\n setFieldValue('holderEmail-0', buyerEmail, false)\n prevBuyerData.current.email = buyerEmail\n }\n\n if (phoneChanged) {\n setFieldValue('holderPhone-0', buyerPhone, false)\n prevBuyerData.current.phone = buyerPhone\n }\n }, [values.firstName, values.lastName, values.email, values.phone, setFieldValue])\n\n const userDataEncoded = isBrowser ? window.localStorage.getItem('user_data') : ''\n useEffect(() => {\n // set user data from local storage only on initial load\n const getStoredUserData = () => {\n if (isBrowser && userDataEncoded && !hasLoadedUserData.current) {\n try {\n const parsedData = JSON.parse(userDataEncoded)\n const mappedValues = {\n firstName: parsedData?.first_name || parsedData?.firstName || '',\n lastName: parsedData?.last_name || parsedData?.lastName || '',\n email: parsedData?.email || '',\n phone: parsedData?.phone || '',\n confirmEmail: parsedData?.email || '',\n state: parsedData?.state || '',\n street_address: parsedData?.street_address || '',\n country: parsedData?.country || '1',\n zip: parsedData?.zip || '',\n brand_opt_in: brandOptIn ? brandOptIn : parsedData?.brand_opt_in || false,\n city: parsedData?.city || '',\n confirmPassword: '',\n password: '',\n 'holderFirstName-0': parsedData?.first_name || parsedData?.firstName || '',\n 'holderLastName-0': parsedData?.last_name || parsedData?.lastName || '',\n 'holderEmail-0': parsedData?.email || '',\n 'holderPhone-0': parsedData?.phone || '',\n }\n\n const extraDataJSON = window.localStorage.getItem('extraData')\n const extraData = extraDataJSON ? JSON.parse(extraDataJSON) : null\n\n setValues({ ...values, ...mappedValues, ...(extraData ?? {}) })\n setUserValues(mappedValues)\n hasLoadedUserData.current = true\n } catch (e) {}\n }\n }\n getStoredUserData()\n // Only run on mount or when userDataEncoded first becomes available\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n return null\n}\n\n// Component to check if email exists\n/**\n * A utility component that checks if an email address already exists in the system.\n *\n * Performs debounced validation and existence checking for user email addresses.\n * Only checks when both email and confirmEmail match, are valid, and user is not logged in.\n *\n * @param email - The primary email address to check\n * @param confirmEmail - The confirmation email address (must match email)\n * @param isLoggedIn - Whether the user is currently logged in\n * @param setEmailExists - Callback function to update the email existence state\n *\n * @remarks\n * - Uses a 500ms debounce to avoid excessive API calls\n * - Validates email format using regex before checking existence\n * - Automatically returns false if user is logged in\n * - Returns null as it's a logic-only component with no UI\n */\nconst EmailExistenceChecker: FC<{\n email: string;\n confirmEmail: string;\n isLoggedIn: boolean;\n setEmailExists: (exists: boolean) => void;\n}> = ({ email, confirmEmail, isLoggedIn, setEmailExists }) => {\n useEffect(() => {\n const checkEmail = async () => {\n // Don't check if user is logged in\n if (isLoggedIn) {\n setEmailExists(false)\n return\n }\n\n // Only check if both emails exist, match, and are valid\n if (!email || !confirmEmail || email !== confirmEmail || !emailRegex.test(email)) {\n setEmailExists(false)\n return\n }\n\n // Check if email exists\n try {\n const result = await checkEmailExists(email)\n setEmailExists(result.exists)\n } catch {\n setEmailExists(false)\n }\n }\n\n // Debounce the check\n const timeoutId = setTimeout(() => {\n checkEmail()\n }, 800)\n\n return () => clearTimeout(timeoutId)\n }, [email, confirmEmail, isLoggedIn, setEmailExists])\n\n return null\n}\n\nconst BillingInfoContainer = React.memo(\n ({\n data = [],\n ticketHoldersFields = {\n id: 1,\n fields: [],\n },\n initialValues = {},\n buttonName = 'Submit',\n freeOrderButtonName = 'Complete Registration',\n handleSubmit = _identity,\n theme = 'light',\n onRegisterSuccess = _identity,\n onRegisterError = _identity,\n onSubmitError = _identity,\n onGetCartSuccess = _identity,\n onGetCartError = _identity,\n onGetCountriesSuccess = _identity,\n onGetCountriesError = _identity,\n onGetStatesSuccess = _identity,\n onGetStatesError = _identity,\n onGetProfileDataSuccess = _identity,\n onGetProfileDataError = _identity,\n onLogin,\n onLoginSuccess = _identity,\n onCheckoutUpdateSuccess = _identity,\n onCheckoutUpdateError = _identity,\n isLoggedIn: pIsLoggedIn = false,\n accountInfoTitle = '',\n hideLogo,\n themeOptions,\n onErrorClose = _identity,\n hideErrorsAlertSection = false,\n onSkipBillingPage = _identity,\n skipPage = false,\n canSkipHolderNames = false,\n onForgotPasswordSuccess = _identity,\n onForgotPasswordError = _identity,\n shouldFetchCountries = true,\n onCountdownFinish = _identity,\n enableTimer = false,\n logo,\n showForgotPasswordButton = true,\n showSignUpButton = false,\n brandOptIn = false,\n showPoweredByImage = false,\n customFieldsOrderKeys,\n customFieldsTicketHolderKeys,\n isCountryCodeEditable = true,\n onPendingVerification = _identity,\n onGetCheckoutConfigsSuccess = _identity,\n onGetCheckoutConfigsError = _identity,\n includeAddons = false,\n addonsProps,\n addOnDataWithCustomFields,\n isSinglePageCheckout = false,\n paymentProps = {},\n paymentSectionAddon,\n }: IBillingInfoPage) => {\n const [extraData, setExtraData] = useState(null)\n const [isConfigLoading, setIsConfigLoading] = useState(true)\n const [configs, setConfigs] = useState<null | AttributesConfig>(null)\n const isNewUser = false\n const themeMui = createTheme(themeOptions)\n const elementsRef = useRef<any>(null)\n const stripeRef = useRef<Stripe | null>(null)\n\n useEffect(() => {\n if (isBrowser) {\n const extraData = window.localStorage.getItem('extraData')\n if (extraData) {\n setExtraData(JSON.parse(extraData))\n }\n }\n getCheckoutPageConfigs()\n .then(data => {\n if (data?.data?.attributes) {\n setConfigs(data.data.attributes)\n setIsConfigLoading(false)\n }\n onGetCheckoutConfigsSuccess(data)\n })\n .catch(e => {\n setIsConfigLoading(false)\n onGetCheckoutConfigsError(e)\n })\n }, [isBrowser])\n\n const defaultCountry = isBrowser ? window.localStorage.getItem('eventCountry') : ''\n const userData =\n isBrowser && window.localStorage.getItem('user_data')\n ? JSON.parse(window.localStorage.getItem('user_data') || '{}')\n : {}\n const additionalConfigs =\n isBrowser && window.localStorage.getItem('checkoutAdditionalConfigs')\n ? JSON.parse(\n window.localStorage.getItem('checkoutAdditionalConfigs') ||\n '{\"resale\": false, \"resaleWithAddons\": false}'\n )\n : { resale: false, resaleWithAddons: false }\n const [dataWithUniqueIds, setDataWithUniqueIds] = useState<IBillingInfoData[]>(\n assingUniqueIds(data)\n )\n const xtfCookie = getCookieByName('X-TF-ECOMMERCE')\n const [isLoggedIn, setIsLoggedIn] = useState(!!(pIsLoggedIn || xtfCookie))\n const [cartInfoData, setCartInfo] = useState<any>({})\n const [countries, setCountries] = useState<any>([])\n const [states, setStates] = useState<any>([])\n const [showModalLogin, setShowModalLogin] = useState(false)\n const alreadyHasUser= false\n const [userExpired, setUserExpired] = useState(false)\n const [showModalSignup, setShowModalSignup] = useState(false)\n const [showModalForgotPassword, setShowModalForgotPassword] = useState(false)\n const [ticketsQuantity, setTicketsQuantity] = useState<string[]>([])\n const [userValues, setUserValues] = useState<any>({\n firstName: '',\n lastName: '',\n email: '',\n phone: '',\n confirmEmail: '',\n holderFirstName: '',\n holderLastName: '',\n holderAge: '',\n city: '',\n country: '',\n street_address: '',\n state: '',\n zip: '',\n })\n const [loading, setLoading] = useState(true)\n const [cardLoading, setCardLoading] = useState(false)\n const [isCountriesLoading, setIsCountriesLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n const [phoneValidationIsLoading, setPhoneValidationIsLoading] = useState(false)\n const [emailExists, setEmailExists] = useState(false)\n const emailLogged = _get(userData, 'email', '') || _get(userValues, 'email', '')\n const firstNameLogged =\n _get(userData, 'first_name', '') || _get(userValues, 'first_name', '')\n const lastNameLogged =\n _get(userData, 'last_name', '') || _get(userValues, 'last_name', '')\n const phoneLogged = _get(userData, 'phone', '') || _get(userValues, 'phone', '')\n const showDOB = configs?.age_required\n const showTicketHolders = configs?.names_required\n const eventId = configs?.event_id\n const optedInFieldValue: boolean = brandOptIn\n ? brandOptIn\n : _get(cartInfoData, 'optedIn', false)\n const ttfOptIn = Boolean(_get(cartInfoData, 'ttfOptIn', false))\n const isTable = Boolean(_get(cartInfoData, 'is_table', false))\n const hideTtfOptIn: boolean = _get(cartInfoData, 'hide_ttf_opt_in', true)\n const expirationTime = _get(cartInfoData, 'expiresAt')\n const flagRequirePhone = configs?.phone_required\n const collectMandatoryWalletAddress = configs?.collect_mandatory_wallet_address\n const collectOptionalWalletAddress = configs?.collect_optional_wallet_address\n const flagFreeTicket = configs?.free_ticket\n const hidePhoneField = configs?.hide_phone_field\n const hideWalletAddressField =\n !collectOptionalWalletAddress && !collectMandatoryWalletAddress\n const collectMandatoryCompany = configs?.collect_mandatory_company\n const collectOptionalCompany = configs?.collect_optional_company\n const hideCompanyField = !collectOptionalCompany && !collectMandatoryCompany\n const collectMandatoryJobTitle = configs?.collect_mandatory_job_title\n const collectOptionalJobTitle = configs?.collect_optional_job_title\n const hideJobTitleField = !collectMandatoryJobTitle && !collectOptionalJobTitle\n const collectMandatoryInstagram = configs?.collect_mandatory_instagram\n const collectOptionalInstagram = configs?.collect_optional_instagram\n const hideInstagramField = !collectMandatoryInstagram && !collectOptionalInstagram\n const collectMandatoryBusinessCategory = configs?.collect_mandatory_business_category\n const collectOptionalBusinessCategory = configs?.collect_optional_business_category\n const eventHasAddons = configs?.has_add_on\n const hideBusinessCategoryField =\n !collectMandatoryBusinessCategory && !collectOptionalBusinessCategory\n\n const [pendingVerificationMessage, setPendingVerificationMessage] = useState<string>()\n const [reviewData, setReviewData] = useState<any>({})\n const [checkoutData, setCheckoutData] = useState<any>({})\n const [checkoutUpdateData, setCheckoutUpdateData] =\n useState<ICheckoutResponseData | null>(null)\n const prevData = useRef(data)\n\n const addAddOnsInAttributes = useCallback((checkoutBody: any) => {\n const selectedAddOns = window.localStorage.getItem('add_ons') || '{}'\n const addOnDataCapture = window.localStorage.getItem('add_on_data_capture') || '{}'\n\n checkoutBody.attributes.add_ons = JSON.parse(selectedAddOns)\n checkoutBody.attributes.add_on_data_capture = JSON.parse(addOnDataCapture)\n }, [])\n const [singleCheckoutAddons, setSingleCheckoutAddOns] = useState<any>({})\n\n const orderIsFree = !Number(checkoutData?.total)\n\n useEffect(() => {\n const hasUniqueId = _get(dataWithUniqueIds, '[0].uniqueId')\n const isEqualData = _isEqual(prevData.current, data)\n if (!hasUniqueId || !isEqualData) {\n setDataWithUniqueIds(assingUniqueIds(data))\n if (!isEqualData) {\n prevData.current = data\n }\n }\n }, [dataWithUniqueIds, data])\n\n const getQuantity = useCallback((cart: any = []) => {\n let qty = 0\n cart.forEach((item: any) => {\n qty += +item.quantity\n })\n return qty\n }, [])\n\n useEffect(() => {\n if (pIsLoggedIn !== isLoggedIn || xtfCookie) {\n setIsLoggedIn(!!(pIsLoggedIn || xtfCookie))\n }\n }, [pIsLoggedIn, isLoggedIn, xtfCookie])\n\n //just once\n useEffect(() => {\n // fetch countries data\n const fetchCountries = async () => {\n try {\n const res = await getCountries()\n setCustomHeader(res)\n setCountries(res.data)\n setIsCountriesLoading(false)\n onGetCountriesSuccess(res.data)\n } catch (e) {\n if (axios.isAxiosError(e)) {\n onGetCountriesError(e)\n }\n setIsCountriesLoading(false)\n }\n }\n shouldFetchCountries && fetchCountries()\n fetchCart()\n\n // Initialize checkout with event_id on first load\n if (isSinglePageCheckout && eventId) {\n updateCheckoutWithAddOns()\n }\n\n return () => {\n isBrowser && localStorage.removeItem('selectedTicketsQuantity')\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n eventId,\n isSinglePageCheckout,\n shouldFetchCountries,\n onGetCountriesSuccess,\n onGetCountriesError,\n ])\n\n // fetch cart data\n const fetchCart = async () => {\n try {\n setCardLoading(true)\n const res = await getCart()\n setCustomHeader(res)\n const cartInfo = res.data.attributes\n setCartInfo(cartInfo)\n const { cart = [] } = cartInfo\n setTicketsQuantity(new Array(getQuantity(cart)).fill(null).map(() => nanoid()))\n onGetCartSuccess(res.data)\n } catch (e) {\n if (axios.isAxiosError(e)) {\n onGetCartError(e)\n }\n } finally {\n setCardLoading(false)\n }\n }\n\n // fetch user data\n const fetchUserData = async () => {\n try {\n if (isLoggedIn) {\n const userDataResponse = await getProfileData()\n const profileSpecifiedData = _get(userDataResponse, 'data')\n const profileDataObj = setLoggedUserData(profileSpecifiedData)\n setUserValues({\n ...profileDataObj,\n firstName: profileDataObj.first_name,\n lastName: profileDataObj.last_name,\n })\n window.localStorage.setItem('user_data', JSON.stringify(profileDataObj))\n onGetProfileDataSuccess(userDataResponse.data)\n }\n } catch (e) {\n if (axios.isAxiosError(e)) {\n onGetProfileDataError(e)\n }\n }\n }\n\n useEffect(() => {\n fetchUserData()\n fetchCart()\n }, [isLoggedIn])\n\n useEffect(() => {\n const fetchCheckoutUpdate = async () => {\n if (!eventId) return\n\n try {\n const checkoutUpdateResponse = await updateCheckout({\n attributes: {\n event_id: eventId,\n is_from_resale: additionalConfigs?.resale,\n },\n })\n console.log('Stripe in [useEffect] fetchCheckoutUpdate', checkoutUpdateResponse)\n\n if (checkoutUpdateResponse.success) {\n const checkoutAttributes = checkoutUpdateResponse.data.attributes\n const cartPriceBreakdown = _get(\n checkoutAttributes,\n 'cart_price_breakdown',\n {}\n )\n localStorage.setItem(\n 'checkoutData',\n JSON.stringify({ hash: '', total: _get(cartPriceBreakdown, 'total', 0) })\n )\n console.log(\n 'Stripe in [useEffect] fetchCheckoutUpdate | checkoutAttributes',\n checkoutAttributes\n )\n setCheckoutUpdateData(checkoutAttributes)\n onCheckoutUpdateSuccess({ expires_at: expirationTime, ...cartPriceBreakdown })\n }\n } catch (error) {\n console.error('Failed to fetch checkout update:', error)\n }\n }\n\n fetchCheckoutUpdate()\n }, [eventId, additionalConfigs?.resale])\n\n useEffect(() => {\n const collectPaymentData = async () => {\n if (\n skipPage &&\n !_isEmpty(ticketsQuantity) &&\n !showDOB &&\n !loading &&\n !isNewUser\n ) {\n setLoading(true)\n const checkoutBody = createCheckoutDataBodyWithDefaultHolder(\n ticketsQuantity.length,\n userData\n )\n\n try {\n if (isBrowser) {\n addAddOnsInAttributes(checkoutBody)\n }\n\n const checkoutResponse = await postOnCheckout(checkoutBody, flagFreeTicket)\n removeReferralKey()\n removeAdditionalConfigs()\n onSkipBillingPage(checkoutResponse.data.attributes)\n setLoading(false)\n } catch (e) {\n onSubmitError(e as AxiosError)\n if (_get(e, 'response.data.data.hasUnverifiedOrder')) {\n setPendingVerificationMessage(_get(e, 'response.data.message'))\n }\n }\n } else {\n setLoading(false)\n }\n }\n collectPaymentData()\n }, [skipPage, ticketsQuantity])\n\n const collectCheckoutBody = useCallback(\n (values: Record<string, any>, profileData?: any): Record<string, any> => {\n let checkoutBody = {} as ICheckoutBody\n\n // Auto collect ticket holders name when it was skipped optionally\n if (showDOB && !showTicketHolders && canSkipHolderNames) {\n checkoutBody = createCheckoutDataBodyWithDefaultHolder(\n ticketsQuantity.length,\n values,\n true,\n { emailLogged, firstNameLogged, lastNameLogged, phoneLogged }\n )\n } else {\n checkoutBody = createCheckoutDataBody(\n ticketsQuantity.length,\n values,\n {\n emailLogged: emailLogged || profileData.email,\n firstNameLogged:\n firstNameLogged || profileData.first_name || profileData.firstName,\n lastNameLogged:\n lastNameLogged || profileData.last_name || profileData.lastName,\n phoneLogged: phoneLogged || profileData.phone,\n },\n showDOB\n )\n }\n\n // Collect data_capture for Order Custom Fields\n const data_capture: Record<string, any> = {}\n _forEach(customFieldsOrderKeys, (key: string) => {\n data_capture[key] = values[key]\n\n // Delete from values list\n delete checkoutBody.attributes[key]\n })\n\n // Temp solution for hardcoded data capture values, to be deleted in the future\n const captureKeys = [\n 'businessCategory',\n 'company',\n 'instagram',\n 'jobTitle',\n 'wallet_address',\n ]\n\n captureKeys.forEach(key => {\n const path = `data_capture.${key}`\n const value = _get(values, path, '')\n\n if (value !== '') {\n data_capture[key] = value\n }\n\n const attributeKey = `data_capture[${key}]`\n delete checkoutBody.attributes?.[attributeKey]\n })\n\n // Collect data_capture for Ticket Holders Fields\n _forEach(checkoutBody.attributes.ticket_holders, (holder, holderIndex) => {\n const holderDataCapture: Record<string, any> = {}\n\n _forEach(customFieldsTicketHolderKeys, customFieldKey => {\n const customFieldHolderName = `${customFieldKey}-${holderIndex}`\n const customFieldHolderKey = values[customFieldHolderName] || ''\n holderDataCapture[customFieldKey] = customFieldHolderKey\n\n // Delete holder specific value from values list\n delete checkoutBody.attributes[customFieldHolderName]\n })\n\n // Assign Ticket Holder data_capture final value\n if (!_isEmpty(holderDataCapture)) {\n holder.ticket_data_capture = holderDataCapture\n }\n })\n\n // Collect add_on_data_capture for Add-on Custom Fields\n const add_on_data_capture: Record<string, any> = {}\n _forEach(values, (val: any, key: string) => {\n // Matches keys like: `${addonId}-${groupId}-${fieldKey}` created in AddonComponent\n const match = key.match(/^(\\d+)-\\d+-(.+)$/)\n if (match) {\n const addonId = match[1]\n const fieldKey = match[2]\n\n // Initialize addon bucket\n if (!add_on_data_capture[addonId]) {\n add_on_data_capture[addonId] = {}\n }\n\n add_on_data_capture[addonId][fieldKey] = val\n\n // Remove the raw form key from attributes to avoid leaking internals\n delete checkoutBody.attributes[key]\n }\n })\n\n // Also include add_on_data_capture from localStorage for single-page checkout\n if (isBrowser) {\n const storedAddOnDataCapture = localStorage.getItem('add_on_data_capture')\n if (storedAddOnDataCapture) {\n const parsed = JSON.parse(storedAddOnDataCapture)\n Object.keys(parsed).forEach(addonId => {\n if (!add_on_data_capture[addonId]) {\n add_on_data_capture[addonId] = {}\n }\n Object.keys(parsed[addonId]).forEach(fieldKey => {\n add_on_data_capture[addonId][fieldKey] = parsed[addonId][fieldKey]\n })\n })\n }\n }\n\n const mergedAttributes: Record<string, any> = {\n ...checkoutBody.attributes,\n data_capture,\n }\n\n if (!_isEmpty(add_on_data_capture)) {\n mergedAttributes.add_on_data_capture = add_on_data_capture\n }\n\n return { attributes: mergedAttributes }\n },\n [\n showDOB,\n showTicketHolders,\n canSkipHolderNames,\n customFieldsOrderKeys,\n ticketsQuantity.length,\n emailLogged,\n firstNameLogged,\n lastNameLogged,\n phoneLogged,\n customFieldsTicketHolderKeys,\n ]\n )\n\n const removeReferralKey = useCallback(() => {\n localStorage.removeItem('referral_key')\n }, [])\n\n const removeAdditionalConfigs = useCallback(() => {\n localStorage.removeItem('checkoutAdditionalConfigs')\n }, [])\n\n useEffect(() => {\n onCheckoutUpdateSuccess({ expires_at: expirationTime, ...checkoutData })\n }, [checkoutData, cartInfoData])\n\n // Initialize payment hooks\n usePaymentRedirect({\n stripeRef,\n setError,\n setLoading,\n removeReferralKey,\n removeAdditionalConfigs,\n handleSubmit,\n isBrowser,\n })\n\n const { processPayment } = useStripePayment({\n stripeRef,\n elementsRef,\n setError,\n isBrowser,\n })\n\n const updateCheckoutWithAddOns = useCallback(\n async (addOns: { [key: string]: number } = {}) => {\n if (!isSinglePageCheckout) return\n\n const mergedAddOns = { ...singleCheckoutAddons }\n\n // Update existing entries and add new ones\n Object.entries(addOns).forEach(([key, value]) => {\n const amount = Number(value)\n if (amount) {\n mergedAddOns[key] = amount\n } else {\n delete mergedAddOns[key]\n }\n })\n\n try {\n const checkoutUpdateData = {\n attributes: {\n event_id: eventId,\n add_ons: mergedAddOns,\n is_from_resale: additionalConfigs?.resale,\n },\n }\n\n const checkoutResponse = await updateCheckout(checkoutUpdateData)\n\n if (checkoutResponse.success) {\n const checkoutDataObj = _get(\n checkoutResponse,\n 'data.attributes.cart_price_breakdown',\n {}\n )\n setCheckoutData(checkoutDataObj)\n setSingleCheckoutAddOns(mergedAddOns)\n }\n } catch (error) {\n const errorMessage = _get(\n error,\n 'response.data.message',\n 'Failed to update add-ons'\n )\n setError(errorMessage)\n onCheckoutUpdateError(error as AxiosError)\n }\n },\n [eventId, isSinglePageCheckout, onCheckoutUpdateError, onCheckoutUpdateSuccess]\n )\n console.log({ checkoutData })\n\n const handleAddOnSelect = useCallback(\n async (selectedAddOns: { [key: string]: number }) => {\n await updateCheckoutWithAddOns(selectedAddOns)\n },\n [updateCheckoutWithAddOns]\n )\n\n const onAddOnSelect = useCallback(\n (id: string, value: string, addon: any, fieldUpdates: Record<string, any> = {}) => {\n const quantity = parseInt(value) || 0\n const addonId = addon.id || id\n\n // Get current add-ons and their custom fields\n const currentAddOns = JSON.parse(localStorage.getItem('add_ons') || '{}')\n const currentDataCapture = JSON.parse(\n localStorage.getItem('add_on_data_capture') || '{}'\n )\n\n // Update quantities\n const updatedAddOns = { ...currentAddOns }\n updatedAddOns[addonId] = quantity\n\n // Update custom fields if any\n const updatedDataCapture = { ...currentDataCapture }\n if (Object.keys(fieldUpdates).length > 0) {\n updatedDataCapture[addonId] = {\n ...(updatedDataCapture[addonId] || {}),\n ...fieldUpdates,\n }\n }\n\n if (quantity === 0 && updatedDataCapture[addonId]) {\n delete updatedDataCapture[addonId]\n }\n // Save to localStorage\n localStorage.setItem('add_ons', JSON.stringify(updatedAddOns))\n localStorage.setItem('add_on_data_capture', JSON.stringify(updatedDataCapture))\n\n // Call handleAddOnSelect with the updated addons object\n handleAddOnSelect(updatedAddOns)\n },\n [handleAddOnSelect]\n )\n if (loading || (enableTimer && !expirationTime && isBrowser)) {\n if (expirationTime === 0) {\n // Redirect to homepage (countdown finished and browser reloaded case)\n window.location.href = '/'\n }\n }\n\n const selectedCountry =\n _find(countries, item => item.code.toLowerCase() === defaultCountry) || {}\n const initialCountry = selectedCountry.id || _get(userData, 'countryId', '') || '1'\n\n const pageUrl = isBrowser ? window.location.href.split('?')[0] : ''\n usePixel(eventId || cartInfoData?.eventId, { page: 'billing', pageUrl })\n if (isTable) {\n dataWithUniqueIds[0].label = 'Get Your Tables'\n }\n\n const stripePublishableKey =\n reviewData?.payment_method?.stripe_publishable_key ||\n checkoutUpdateData?.additional_payment_information?.basic_config?.apiKey\n const stripeAccountId =\n reviewData?.payment_method?.stripe_connected_account ||\n checkoutUpdateData?.additional_payment_information?.basic_config?.accountId\n const addOnsIncludedOnInvitation =\n additionalConfigs.resale && additionalConfigs.resaleWithAddons\n\n const elementsOptions: StripeElementsOptions = {\n ...checkoutUpdateData?.additional_payment_information?.elements_config,\n }\n\n if (loading || cardLoading || isCountriesLoading || isConfigLoading || !eventId) {\n return (\n <Backdrop\n sx={{ color: '#fff', backgroundColor: '#000000bd', zIndex: 1205 }}\n open={true}\n >\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n )\n }\n\n return (\n <ThemeProvider theme={themeMui}>\n {!!expirationTime && enableTimer && (\n <TimerWidget\n expires_at={expirationTime}\n onCountdownFinish={onCountdownFinish}\n container={isSinglePageCheckout ? 'body' : ''}\n />\n )}\n {!isCountriesLoading && !isConfigLoading && (\n <Formik\n initialValues={getInitialValues(\n dataWithUniqueIds,\n {\n country: initialCountry,\n state:\n _get(userData, 'stateId', '') || _get(userData, 'state', '') || '1',\n brand_opt_in: Boolean(optedInFieldValue),\n ttf_opt_in: ttfOptIn,\n data_capture: {\n instagram: _get(extraData, 'data_capture.instagram', ''),\n company: _get(extraData, 'data_capture.company', ''),\n businessCategory: _get(extraData, 'data_capture.businessCategory', ''),\n jobTitle: _get(extraData, 'data_capture.jobTitle', ''),\n },\n ...initialValues,\n },\n userValues,\n ticketHoldersFields,\n ticketsQuantity\n )}\n enableReinitialize={false}\n onSubmit={async (values, formikHelpers) => {\n try {\n // Validation: if phone is required for ticket holders, mark errors and stop submit\n const flagRequirePhoneLocal = Boolean(configs?.phone_required)\n if (flagRequirePhoneLocal) {\n const holdersCount = ticketsQuantity.length\n let hasHolderPhoneError = false\n for (let i = 0; i < holdersCount; i++) {\n const fieldName = `holderPhone-${i}`\n const value = _get(values, fieldName, '')\n if (!value) {\n hasHolderPhoneError = true\n formikHelpers.setFieldTouched(fieldName, true, false)\n formikHelpers.setFieldError(fieldName, 'This field is required')\n }\n }\n if (hasHolderPhoneError) {\n // Do not proceed with submit; Formik will show errors and our PhoneNumberField now shows errors when submitCount > 0\n return\n }\n }\n\n if ((!elementsRef.current || !stripeRef.current) && !orderIsFree) {\n setError('Fill in the payment details')\n return\n }\n\n if (isSinglePageCheckout && !orderIsFree) {\n // For PaymentElement, we'll use confirmPayment directly\n // No need to create payment method separately\n }\n\n if (isBrowser) {\n window.localStorage.setItem(\n 'extraData',\n JSON.stringify({\n data_capture: {\n instagram: _get(values, 'data_capture.instagram', ''),\n company: _get(values, 'data_capture.company', ''),\n businessCategory: _get(\n values,\n 'data_capture.businessCategory',\n ''\n ),\n jobTitle: _get(values, 'data_capture.jobTitle', ''),\n },\n })\n )\n }\n\n // Guest checkout: no need to register, just get profile if logged in\n let userDataObj = userData\n if (isLoggedIn) {\n try {\n const profileData = await getProfileData()\n const profileSpecifiedData = _get(profileData, 'data')\n userDataObj = setLoggedUserData(profileSpecifiedData)\n } catch (e) {\n // If profile fetch fails, use values from form\n userDataObj = {\n email: values.email,\n first_name: values.firstName,\n last_name: values.lastName,\n phone: values.phone,\n }\n }\n } else {\n // For guest checkout, use form values\n userDataObj = {\n email: values.email,\n first_name: values.firstName,\n last_name: values.lastName,\n phone: values.phone,\n }\n }\n\n if (isBrowser) {\n window.localStorage.setItem('user_data', JSON.stringify(userDataObj))\n }\n\n const checkoutBody = collectCheckoutBody(values, userDataObj)\n\n if (isBrowser && !isSinglePageCheckout) {\n addAddOnsInAttributes(checkoutBody)\n }\n\n if (isSinglePageCheckout) {\n checkoutBody.attributes.add_ons = singleCheckoutAddons\n // Include add_on_data_capture for single-page checkout\n const storedAddOnDataCapture =\n localStorage.getItem('add_on_data_capture')\n if (storedAddOnDataCapture) {\n checkoutBody.attributes.add_on_data_capture =\n JSON.parse(storedAddOnDataCapture)\n }\n }\n\n const checkoutResponse = await postOnCheckout(\n checkoutBody,\n flagFreeTicket\n )\n\n const checkoutUpdateResponse = await updateCheckout({\n attributes: {\n event_id: eventId,\n add_ons: checkoutBody?.attributes?.add_ons ?? [],\n is_from_resale: additionalConfigs?.resale,\n },\n })\n console.log(\n 'Stripe checkoutUpdateResponse in billing-info-container',\n checkoutUpdateResponse\n )\n\n setCheckoutUpdateData(checkoutUpdateResponse.data.attributes)\n\n let paymentResponse = null\n\n if (isSinglePageCheckout) {\n const { hash, total } = checkoutResponse.data.attributes\n localStorage.setItem('checkoutData', JSON.stringify({ hash, total }))\n\n const paymentDataResponse = await getPaymentData(String(hash))\n\n if (paymentDataResponse.success) {\n const { attributes } = paymentDataResponse.data\n console.log('Stripe confirmPayment success in billing-info-container')\n setReviewData(attributes)\n\n const { order_details, cart } = attributes\n const {\n tickets: [ticket],\n } = order_details\n\n const updatedOrderData = {\n add_ons: order_details.add_ons || [],\n total: order_details.total,\n subtotal: order_details.subtotal,\n fees: order_details.fees,\n pay_now: order_details.pay_now || '',\n\n id: order_details?.id,\n product_name: cart[0]?.product_name,\n ticketType: ticket?.name,\n quantity: ticket?.quantity,\n price: ticket?.price,\n currency: order_details?.currency,\n guest_count: order_details?.guest_count || '',\n debt: order_details?.debt || null,\n cost: ticket?.cost,\n }\n\n const isFreeTickets =\n (!Number(total) && !Number(updatedOrderData.total)) ||\n !Number(updatedOrderData?.pay_now || 0)\n const paymentMethod = attributes.payment_method || {}\n const paymentPlanAvailable = paymentMethod.stripe_payment_plan_enabled\n console.log({ paymentPlanAvailable })\n // Process payment using the hook\n paymentResponse = await processPayment(\n paymentDataResponse,\n values,\n formikHelpers,\n checkoutResponse,\n checkoutUpdateResponse,\n {\n attributes,\n isFreeTickets,\n updatedOrderData,\n eventId,\n }\n )\n\n if (!paymentResponse && !isFreeTickets) {\n // Payment failed or redirected, don't continue\n return\n }\n }\n }\n\n removeReferralKey()\n removeAdditionalConfigs()\n handleSubmit(\n values,\n formikHelpers as FormikHelpers<any>,\n eventId,\n checkoutResponse,\n checkoutUpdateResponse,\n paymentResponse\n )\n } catch (e) {\n setLoading(false)\n onSubmitError(e as AxiosError)\n const hasUnverifiedOrder = _get(\n e,\n 'response.data.data.hasUnverifiedOrder'\n )\n const message = _get(e, 'response.data.message', {}) as\n | { password?: string | null, email?: string | null }\n | string\n\n if (hasUnverifiedOrder && typeof message === 'string') {\n setPendingVerificationMessage(message)\n } else if (axios.isAxiosError(e)) {\n if (\n (e as any).response?.status === 401 ||\n _get(e, 'response.data.error') === 'invalid_token'\n ) {\n if (isBrowser) {\n window.localStorage.removeItem('user_data')\n setUserExpired(true)\n setShowModalLogin(true)\n setIsLoggedIn(false)\n setShowModalSignup(false)\n setShowModalForgotPassword(false)\n const event = new window.CustomEvent('tf-logout')\n deleteCookieByName('X-TF-ECOMMERCE')\n window.document.dispatchEvent(event)\n }\n }\n if (message && !hideErrorsAlertSection && typeof message === 'string') {\n setError(message)\n }\n onSubmitError(e)\n }\n\n // Keep form values intact - don't reset\n formikHelpers.setSubmitting(false)\n } finally {\n setLoading(false)\n }\n }}\n >\n {(props: FormikProps<any>) => (\n <Form onSubmit={props.handleSubmit}>\n <ErrorFocus />\n <LogicRunner\n brandOptIn={brandOptIn}\n values={props.values}\n errors={props.errors}\n setStates={setStates}\n setFieldValue={props.setFieldValue}\n setValues={props.setValues}\n setUserValues={setUserValues}\n onGetStatesSuccess={onGetStatesSuccess}\n onGetStatesError={onGetStatesError}\n shouldFetchCountries={shouldFetchCountries}\n />\n <EmailExistenceChecker\n email={props.values.email || ''}\n confirmEmail={props.values.confirmEmail || ''}\n isLoggedIn={isLoggedIn}\n setEmailExists={setEmailExists}\n />\n <div className={`billing-info-container ${theme}`}>\n {!!error && (\n <SnackbarAlert\n type=\"error\"\n isOpen={!!error}\n message={error || ''}\n onClose={() => {\n setError(null)\n onErrorClose()\n }}\n />\n )}\n {!isLoggedIn && !isSinglePageCheckout && (\n <div className=\"account-actions-block\">\n <div className=\"action-item\">\n <div>{accountInfoTitle}</div>\n <div>Login & skip ahead:</div>\n </div>\n <div className=\"action-item login-block\">\n <button\n className=\"login-register-button\"\n type=\"button\"\n onClick={() => {\n // If outside login needed to skip package login functionallity\n if (onLogin) {\n onLogin()\n } else {\n setShowModalLogin(true)\n }\n }}\n >\n Login\n </button>\n {!hideLogo && (\n <div className=\"logo-image-container\">\n <img\n src={\n theme === 'dark'\n ? 'https://www.ticketfairy.com/resources/images/logo-ttf.svg'\n : 'https://www.ticketfairy.com/resources/images/logo-ttf-black.svg'\n }\n alt=\"nodata\"\n />\n </div>\n )}\n </div>\n </div>\n )}\n {isSinglePageCheckout &&\n !addOnsIncludedOnInvitation &&\n eventHasAddons &&\n eventId ? (\n <SimpleAddonsContainer\n {...(addonsProps ?? {})}\n eventId={eventId}\n addOnDataWithCustomFields={addOnDataWithCustomFields}\n configs={configs}\n onAddOnSelect={onAddOnSelect}\n />\n ) : !addOnsIncludedOnInvitation &&\n includeAddons &&\n !isSinglePageCheckout ? (\n <AddonsContainter\n {...(addonsProps ?? {})}\n addOnDataWithCustomFields={addOnDataWithCustomFields}\n configs={configs}\n onAddOnSelect={onAddOnSelect}\n />\n ) : null}\n {!cardLoading &&\n _map(dataWithUniqueIds, item => {\n const { label, labelClassName, fields } = item\n return (\n <div key={item.uniqueId} className=\"billing-info-fields\">\n <p className={labelClassName}>{label}</p>\n {_map(fields, group => {\n const { groupClassname, groupItems } = group\n const filteredGroupItems = filterBillingInfoFields(\n groupItems,\n {\n showDOB: Boolean(showDOB),\n hideTtfOptIn: Boolean(hideTtfOptIn),\n hidePhoneField: Boolean(hidePhoneField),\n flagRequirePhone: Boolean(flagRequirePhone),\n collectMandatoryWalletAddress: Boolean(\n collectMandatoryWalletAddress\n ),\n collectMandatoryJobTitle: Boolean(\n collectMandatoryJobTitle\n ),\n collectMandatoryBusinessCategory: Boolean(\n collectMandatoryBusinessCategory\n ),\n collectMandatoryCompany: Boolean(collectMandatoryCompany),\n collectMandatoryInstagram: Boolean(\n collectMandatoryInstagram\n ),\n flagFreeTicket: Boolean(flagFreeTicket),\n hideWalletAddressField: Boolean(hideWalletAddressField),\n hideJobTitleField: Boolean(hideJobTitleField),\n hideBusinessCategoryField: Boolean(\n hideBusinessCategoryField\n ),\n hideCompanyField: Boolean(hideCompanyField),\n hideInstagramField,\n }\n )\n return (\n <React.Fragment key={group.uniqueId}>\n <div className={groupClassname}>\n {_map(filteredGroupItems, element => {\n // Hide password fields in single-page checkout or when user is logged in\n const shouldHidePasswordFields =\n ['password', 'confirmPassword', 'password-info'].includes(\n element.name\n ) &&\n (isLoggedIn || isSinglePageCheckout)\n\n return shouldHidePasswordFields ? null : (\n <React.Fragment key={element.uniqueId}>\n <div\n className={`${element.className} ${\n props?.errors[element.name] || ''\n }`}\n >\n {element.component ? (\n typeof element.component === 'function' ? (\n renderComponentWithProps(\n element.component as React.ComponentType<any>,\n element.name === 'payment_info'\n ? { reviewData }\n : {}\n )\n ) : (\n element.component\n )\n ) : (\n <Field\n {...element}\n type={\n element.type === 'radio' ||\n element.type === 'checkbox'\n ? undefined\n : element.type\n }\n setPhoneValidationIsLoading={\n element.type === 'phone'\n ? setPhoneValidationIsLoading\n : undefined\n }\n fill={element.type === 'phone' ? true : undefined}\n label={getFieldLabel(element, configs)}\n validate={getValidateFunctions(\n element,\n states,\n props.values,\n props.errors\n )}\n setFieldValue={props.setFieldValue}\n onBlur={props.handleBlur}\n component={getFieldComponent(element)}\n selectOptions={\n element.name === 'country'\n ? _map(countries, item => ({\n value: item.id,\n label: item.name,\n }))\n : element.name === 'state'\n ? [\n {\n label: element.label,\n value: '',\n disabled: true,\n },\n ...states,\n ]\n : element.selectOptions || []\n }\n theme={theme}\n defaultCountry={\n defaultCountry || element.defaultCountry\n }\n dateFormat={element.format}\n isCountryCodeEditable={\n isCountryCodeEditable\n }\n />\n )}\n </div>\n </React.Fragment>\n )\n })}\n </div>\n {/* Show login suggestion if email is registered */}\n {group.groupItems.some(el => el.name === 'confirmEmail') &&\n emailExists &&\n !isLoggedIn && (\n <div className=\"email-registered-message\">\n <p className=\"email-registered-text\">\n ✓ This email is already registered. Log in to\n auto-fill your information\n </p>\n <Button\n type=\"button\"\n variant=\"contained\"\n className=\"email-login-button\"\n onClick={() => {\n if (onLogin) {\n onLogin()\n } else {\n setShowModalLogin(true)\n }\n }}\n >\n Log in\n </Button>\n </div>\n )}\n </React.Fragment>\n )\n })}\n </div>\n )\n })}\n {!_isEmpty(ticketHoldersFields.fields) && (\n <div className=\"ticket-holders-fields\">\n <h2>{ticketHoldersFields.label}</h2>\n {_map(ticketsQuantity, (_item, index) => (\n <div key={_item}>\n <h5>Ticket {index + 1}</h5>\n {_map(ticketHoldersFields.fields, group => {\n const { id, groupClassname, groupItems } = group\n return (\n <div key={id}>\n <div className={groupClassname}>\n {_map(groupItems, element => (\n <div className={element.className} key={element.name}>\n <Field\n {...element}\n type={\n element.type === 'radio' ||\n element.type === 'checkbox'\n ? undefined\n : element.type\n }\n name={`${element.name}-${index}`}\n label={getFieldLabel(element, configs)}\n component={getFieldComponent(element)}\n validate={getValidateFunctions(\n element,\n states,\n props.values,\n props.errors\n )}\n setPhoneValidationIsLoading={\n setPhoneValidationIsLoading\n }\n fill={element.type === 'phone' ? true : undefined}\n defaultCountry={\n defaultCountry || element.defaultCountry\n }\n isCountryCodeEditable={isCountryCodeEditable}\n />\n </div>\n ))}\n </div>\n </div>\n )\n })}\n </div>\n ))}\n </div>\n )}\n <div className=\"payment-section\">\n {isSinglePageCheckout && !orderIsFree && stripePublishableKey && (\n <PaymentContainer\n stripePublishableKey={stripePublishableKey}\n stripeAccountId={stripeAccountId}\n formTitle=\"Payment Information\"\n orderInfoLabel=\"\"\n enableTimer={false}\n checkoutData={checkoutData}\n elementsOptions={elementsOptions}\n paymentElementOptions={{\n wallets: {\n applePay:\n checkoutUpdateData?.additional_payment_information\n ?.stripe_wallets?.applePay || 'never',\n googlePay:\n checkoutUpdateData?.additional_payment_information\n ?.stripe_wallets?.googlePay || 'never',\n },\n }}\n onStripeReady={(stripe, elements) => {\n stripeRef.current = stripe\n elementsRef.current = elements\n }}\n paymentFields={paymentProps.paymentFields || []}\n onPaymentError={paymentProps.onPaymentError || _identity}\n handlePayment={paymentProps.handlePayment || _identity}\n onGetPaymentDataSuccess={\n paymentProps.onGetPaymentDataSuccess || _identity\n }\n onGetPaymentDataError={\n paymentProps.onGetPaymentDataError || _identity\n }\n themeOptions={themeOptions}\n paymentInfoLabel=\"\"\n displayPaymentButton={false}\n hidePaymentForm={false}\n hideFieldsBlock={true}\n isSinglePageCheckout={true}\n />\n )}\n {paymentSectionAddon}\n </div>\n <div className=\"button-container\">\n <Button\n type=\"submit\"\n variant=\"contained\"\n className=\"login-register-button\"\n disabled={props.isSubmitting || phoneValidationIsLoading}\n >\n {props.isSubmitting ? (\n <CircularProgress size={26} />\n ) : orderIsFree ? (\n freeOrderButtonName\n ) : (\n buttonName\n )}\n </Button>\n </div>\n </div>\n </Form>\n )}\n </Formik>\n )}\n {showModalLogin && (\n <LoginModal\n logo={logo}\n onClose={() => {\n setShowModalLogin(false)\n }}\n onLogin={() => {\n setShowModalLogin(false)\n setUserExpired(false)\n onLoginSuccess()\n }}\n alreadyHasUser={alreadyHasUser}\n userExpired={userExpired}\n onGetProfileDataSuccess={(data: any) => {\n fetchCart()\n onGetProfileDataSuccess(data)\n }}\n onGetProfileDataError={onGetProfileDataError}\n showSignUpButton={showSignUpButton}\n showForgotPasswordButton={showForgotPasswordButton}\n onForgotPassword={() => {\n setShowModalLogin(false)\n setShowModalForgotPassword(true)\n }}\n onSignup={() => {\n setShowModalLogin(false)\n setShowModalSignup(true)\n }}\n showPoweredByImage={showPoweredByImage}\n />\n )}\n {showModalSignup && (\n <SignupModal\n onClose={() => {\n setShowModalSignup(false)\n }}\n onLogin={() => {\n setShowModalSignup(false)\n setShowModalLogin(true)\n }}\n onRegisterSuccess={onRegisterSuccess}\n onRegisterError={onRegisterError}\n showPoweredByImage={showPoweredByImage}\n />\n )}\n {showModalForgotPassword && (\n <ForgotPasswordModal\n onClose={() => {\n setShowModalForgotPassword(false)\n }}\n onLoginButtonClick={() => {\n setShowModalForgotPassword(false)\n setShowModalLogin(true)\n }}\n onForgotPasswordSuccess={onForgotPasswordSuccess}\n onForgotPasswordError={onForgotPasswordError}\n showPoweredByImage={showPoweredByImage}\n displaySuccessMessage\n />\n )}\n <VerificationPendingModal\n message={pendingVerificationMessage}\n onClose={() => {\n onPendingVerification()\n }}\n />\n </ThemeProvider>\n )\n }\n)\n\nconst WithCustomFieldsBillingInfoContainer = withCustomFields(BillingInfoContainer)\n\nexport { WithCustomFieldsBillingInfoContainer as BillingInfoContainer }\n","import { Stripe } from '@stripe/stripe-js'\nimport { FormikHelpers } from 'formik'\nimport _identity from 'lodash/identity'\nimport { useEffect } from 'react'\n\nimport { handlePaymentMiddleWare } from '../../paymentContainer/handlePayment'\n\ninterface PaymentContext {\n attributes: any\n isFreeTickets: boolean\n updatedOrderData: any\n eventId: string\n values: any\n formikHelpers: FormikHelpers<any>\n checkoutResponse: any\n checkoutUpdateResponse: any\n timestamp: number\n}\n\ninterface UsePaymentRedirectProps {\n stripeRef: React.MutableRefObject<Stripe | null>\n setError: (error: string | null) => void\n setLoading: (loading: boolean) => void\n removeReferralKey: () => void\n removeAdditionalConfigs: () => void\n handleSubmit: (\n values: any,\n formikHelpers: FormikHelpers<any>,\n eventId: any,\n checkoutResponse: any,\n checkoutUpdateResponse: any,\n paymentResponse: any\n ) => void\n isBrowser: boolean\n}\n\nexport const usePaymentRedirect = ({\n stripeRef,\n setError,\n setLoading,\n removeReferralKey,\n removeAdditionalConfigs,\n handleSubmit,\n isBrowser,\n}: UsePaymentRedirectProps) => {\n useEffect(() => {\n const handlePaymentReturn = async () => {\n const urlParams = new URLSearchParams(window.location.search)\n const isPaymentReturn = urlParams.get('payment_return')\n const clientSecret = urlParams.get('payment_intent_client_secret')\n\n if (isPaymentReturn && clientSecret && stripeRef.current) {\n console.log('Detected payment redirect return, checking status')\n setLoading(true)\n\n try {\n // Get stored payment context\n const storedContext = localStorage.getItem('stripe_payment_context')\n if (!storedContext) {\n setError('Payment context not found')\n setLoading(false)\n return\n }\n\n const paymentContext: PaymentContext = JSON.parse(storedContext)\n const { paymentIntent } = await stripeRef.current.retrievePaymentIntent(\n clientSecret\n )\n\n if (paymentIntent?.status === 'succeeded') {\n console.log('Payment succeeded after redirect, continuing flow')\n\n // Clean up stored context\n localStorage.removeItem('stripe_payment_context')\n\n // Continue with the success flow using stored context\n let paymentResponse = null\n await handlePaymentMiddleWare(\n null,\n {},\n {\n reviewData: paymentContext.attributes,\n isFreeTickets: paymentContext.isFreeTickets,\n paymentPlanIsAvailable: false,\n showPaymentPlanSection: false,\n handlePayment: (data: any) => {\n paymentResponse = data\n },\n setPaymentIsLoading: _identity,\n setError: _identity,\n orderData: paymentContext.updatedOrderData,\n eventId: paymentContext.eventId,\n isBrowser,\n onPaymentError: (error: any) => {\n throw error\n },\n }\n )\n\n // Complete the flow with cleanup and handleSubmit\n removeReferralKey()\n removeAdditionalConfigs()\n handleSubmit(\n paymentContext.values,\n paymentContext.formikHelpers,\n paymentContext.eventId,\n paymentContext.checkoutResponse,\n paymentContext.checkoutUpdateResponse,\n paymentResponse\n )\n\n // Clean URL parameters\n window.history.replaceState({}, document.title, window.location.pathname)\n } else if (paymentIntent?.status === 'requires_action') {\n setError('Payment requires additional action')\n // Clean up stored context and URL to prevent infinite loop\n localStorage.removeItem('stripe_payment_context')\n window.history.replaceState({}, document.title, window.location.pathname)\n } else {\n setError(`Payment failed or was cancelled.`)\n // Clean up stored context and URL to prevent infinite loop\n localStorage.removeItem('stripe_payment_context')\n window.history.replaceState({}, document.title, window.location.pathname)\n }\n } catch (error) {\n console.error('Error handling payment return:', error)\n setError('Error processing payment return')\n // Clean up stored context and URL to prevent infinite loop\n localStorage.removeItem('stripe_payment_context')\n window.history.replaceState({}, document.title, window.location.pathname)\n } finally {\n setLoading(false)\n }\n }\n }\n\n handlePaymentReturn()\n }, [\n stripeRef.current,\n setError,\n setLoading,\n removeReferralKey,\n removeAdditionalConfigs,\n handleSubmit,\n isBrowser,\n ])\n}\n","import { FormikHelpers } from 'formik'\nimport _identity from 'lodash/identity'\n\nimport { handlePaymentMiddleWare } from '../../paymentContainer/handlePayment'\n\ninterface PaymentData {\n attributes: any\n isFreeTickets: boolean\n updatedOrderData: any\n eventId: string\n}\n\ninterface UseStripePaymentProps {\n stripeRef: any\n elementsRef: React.MutableRefObject<any>\n setError: (error: string | null) => void\n isBrowser: boolean\n}\n\nexport const useStripePayment = ({\n stripeRef,\n elementsRef,\n setError,\n isBrowser,\n}: UseStripePaymentProps) => {\n const processPayment = async (\n paymentDataResponse: any,\n values: any,\n formikHelpers: FormikHelpers<any>,\n checkoutResponse: any,\n checkoutUpdateResponse: any,\n paymentData: PaymentData\n ) => {\n const { attributes, isFreeTickets, updatedOrderData, eventId } = paymentData\n\n if (!isFreeTickets) {\n if (!stripeRef.current) {\n setError('Stripe is not ready')\n console.log('Stripe is not ready in billing-info-container')\n return null\n }\n\n console.log('Stripe confirmPayment in billing-info-container')\n\n // Step 1: Submit elements first\n const { error: submitError } = await elementsRef.current.submit()\n if (submitError) {\n setError('' + submitError?.message)\n console.log(\n 'Stripe elements.submit() error in billing-info-container',\n submitError\n )\n return null\n }\n\n // Step 2: Store payment context before potential redirect\n const paymentContext = {\n attributes,\n isFreeTickets,\n updatedOrderData,\n eventId,\n values,\n formikHelpers,\n checkoutResponse,\n checkoutUpdateResponse,\n timestamp: Date.now(),\n }\n localStorage.setItem('stripe_payment_context', JSON.stringify(paymentContext))\n\n // Step 3: Confirm payment with current page return URL\n const { error: confirmError } = await stripeRef.current.confirmPayment({\n clientSecret:\n paymentDataResponse.data.attributes.payment_method.stripe_client_secret,\n elements: elementsRef.current,\n confirmParams: {\n return_url:\n window.location.href +\n (window.location.href.includes('?') ? '&' : '?') +\n 'payment_return=true',\n },\n redirect: 'if_required',\n })\n\n if (confirmError) {\n setError('' + confirmError?.message)\n console.log('Stripe confirmPayment error in billing-info-container')\n return null\n }\n }\n\n console.log('Stripe confirmPayment success in billing-info-container')\n\n // Handle payment middleware for non-redirect payments\n let paymentResponse = null\n await handlePaymentMiddleWare(\n null,\n {},\n {\n reviewData: attributes,\n isFreeTickets,\n paymentPlanIsAvailable: false,\n showPaymentPlanSection: false,\n handlePayment: (data: any) => {\n paymentResponse = data\n },\n setPaymentIsLoading: _identity,\n setError: _identity,\n orderData: updatedOrderData,\n eventId,\n isBrowser,\n onPaymentError: (error: any) => {\n throw error\n },\n }\n )\n\n return paymentResponse\n }\n\n return { processPayment }\n}\n","export const getImage = (name: string = ''): any => {\n let image: any = ''\n\n if (!name.trim().length) {\n return image\n }\n\n if (process.env.NODE_ENV === 'production') {\n image = require(`./images/${name}`)\n return image.default\n }\n\n return image\n}\n","import _identity from 'lodash/identity'\nimport React from 'react'\nimport SVG from 'react-inlinesvg'\n\nimport { getImage } from '../../utils/getImage'\n\ninterface IShareButtonProps {\n url: string;\n disabled: boolean;\n children: Node;\n}\n\nexport const SpotifyIcon = () => <SVG src={getImage('spotify.svg')} />\n\nexport const InstagramIcon = () => <SVG src={getImage('instagram.svg')} />\n\nexport const SocialButton = (props: IShareButtonProps) => {\n const { children, url, disabled } = props\n\n const handleClick = () => {\n window.open(url)\n }\n\n return (\n <button\n className={`react-share__ShareButton ${disabled ? 'disabled-action' : ''}`}\n type=\"button\"\n onClick={!disabled ? handleClick : _identity}\n >\n {children}\n </button>\n )\n}\n","import {\n EmailIcon,\n EmailShareButton,\n FacebookIcon,\n FacebookMessengerIcon,\n FacebookMessengerShareButton,\n FacebookShareButton,\n HatenaIcon,\n HatenaShareButton,\n InstapaperIcon,\n InstapaperShareButton,\n LineIcon,\n LineShareButton,\n LinkedinIcon,\n LinkedinShareButton,\n LivejournalIcon,\n LivejournalShareButton,\n MailruIcon,\n MailruShareButton,\n OKIcon,\n OKShareButton,\n PinterestIcon,\n PinterestShareButton,\n PocketIcon,\n PocketShareButton,\n RedditIcon,\n RedditShareButton,\n TelegramIcon,\n TelegramShareButton,\n TumblrIcon,\n TumblrShareButton,\n TwitterShareButton,\n ViberIcon,\n ViberShareButton,\n VKIcon,\n VKShareButton,\n WeiboIcon,\n WeiboShareButton,\n WhatsappIcon,\n WhatsappShareButton,\n WorkplaceIcon,\n WorkplaceShareButton,\n XIcon,\n} from 'react-share'\n\nimport { InstagramIcon, SocialButton, SpotifyIcon } from '../common/socials'\n\nconst config: any = {\n facebook: { component: FacebookShareButton, icon: FacebookIcon },\n messenger: {\n component: FacebookMessengerShareButton,\n icon: FacebookMessengerIcon,\n },\n twitter: { component: TwitterShareButton, icon: XIcon },\n linkedin: { component: LinkedinShareButton, icon: LinkedinIcon },\n pinterest: { component: PinterestShareButton, icon: PinterestIcon },\n vk: { component: VKShareButton, icon: VKIcon },\n ok: { component: OKShareButton, icon: OKIcon },\n telegram: { component: TelegramShareButton, icon: TelegramIcon },\n whatsapp: { component: WhatsappShareButton, icon: WhatsappIcon },\n reddit: { component: RedditShareButton, icon: RedditIcon },\n tumblr: { component: TumblrShareButton, icon: TumblrIcon },\n mailru: { component: MailruShareButton, icon: MailruIcon },\n email: { component: EmailShareButton, icon: EmailIcon },\n livejournal: { component: LivejournalShareButton, icon: LivejournalIcon },\n viber: { component: ViberShareButton, icon: ViberIcon },\n workplace: { component: WorkplaceShareButton, icon: WorkplaceIcon },\n line: { component: LineShareButton, icon: LineIcon },\n pocket: { component: PocketShareButton, icon: PocketIcon },\n instapaper: { component: InstapaperShareButton, icon: InstapaperIcon },\n weibo: { component: WeiboShareButton, icon: WeiboIcon },\n hatena: { component: HatenaShareButton, icon: HatenaIcon },\n instagram: { component: SocialButton, icon: InstagramIcon },\n spotify: { component: SocialButton, icon: SpotifyIcon },\n}\n\nexport default function (key: string) {\n return config[key]\n}\n","import _identity from 'lodash/identity'\nimport React, { ReactElement } from 'react'\n\nimport { isValidNumber } from '../../utils/isValidNumber'\nimport config from './config'\nimport { IShareButton } from './index'\n\nconst SocialComponent = ({\n mainLabel,\n subLabel,\n platform,\n shareData,\n points,\n onAfterShare,\n alreadyApplied,\n oneTimeAction,\n btnClassName = '',\n}: IShareButton) => {\n const Component = config(platform)?.component\n const Icon = config(platform)?.icon\n const isActionDisabled = alreadyApplied && oneTimeAction\n return (\n <>\n {Component && (\n <Component {...shareData} disabled={isActionDisabled} className={btnClassName}>\n <div\n onKeyDown={_identity}\n onClick={!isActionDisabled ? onAfterShare : _identity}\n className={`social-media-sharing ${platform}`}\n >\n <div className=\"share-icon\">\n <Icon size={32} round />\n </div>\n <span className=\"share-text\">\n <span className=\"main-label\">{mainLabel} </span>\n <span className=\"sub-label\">{subLabel}</span>\n </span>\n {isValidNumber(points) && (\n <div className=\"share-points\">\n <span className=\"points-count\">{points}</span>\n <span className=\"points-text\">Points</span>\n </div>\n )}\n </div>\n </Component>\n )}\n </>\n )\n}\n\ninterface SocialButtonsTypes {\n shareLink: string;\n name: string;\n appId: string;\n showDefaultShareButtons: boolean;\n shareButtons: IShareButton[];\n titleText?: string;\n footerText?: string | ReactElement;\n clientLabel?: string;\n showReferralsInfoText?: boolean;\n onAfterShare?: (eventActionId: string | undefined) => void;\n}\n\nconst SocialButtons = ({\n showDefaultShareButtons,\n shareLink,\n name,\n appId,\n shareButtons,\n titleText = 'or use one of these convenient buttons:',\n footerText = (\n <p>\n We <strong>never</strong> post on Facebook without your permission!\n </p>\n ) as ReactElement,\n clientLabel,\n onAfterShare = _identity,\n showReferralsInfoText = false,\n}: SocialButtonsTypes) => (\n <>\n {titleText && <div className=\"convenient_buttons\">{titleText}</div>}\n <div className=\"social-media-btns\">\n {showDefaultShareButtons && (\n <>\n <SocialComponent\n mainLabel=\"Share on\"\n subLabel=\"Facebook\"\n platform=\"facebook\"\n shareData={{\n quote: name,\n url: shareLink,\n }}\n />\n <SocialComponent\n mainLabel=\"Post on\"\n subLabel=\"X\"\n platform=\"twitter\"\n shareData={{\n title: name,\n url: shareLink,\n }}\n btnClassName=\"twitter-btn\"\n />\n <SocialComponent\n mainLabel=\"Message friends on\"\n subLabel=\"Facebook\"\n platform=\"messenger\"\n shareData={{\n appId,\n url: shareLink,\n }}\n />\n <SocialComponent\n mainLabel=\"Message friends on\"\n subLabel=\"Whatsapp\"\n platform=\"whatsapp\"\n shareData={{\n title: name,\n url: shareLink,\n }}\n />\n </>\n )}\n {shareButtons.map((shareButton: IShareButton, index: number) => (\n <SocialComponent\n onAfterShare={() => onAfterShare(shareButton.eventActionId)}\n key={index}\n {...shareButton}\n />\n ))}\n </div>\n {showDefaultShareButtons || shareButtons.length ? footerText : null}\n {(showReferralsInfoText || Boolean(clientLabel)) && (\n <p className=\"note-message\">\n <span>\n *Please note, only purchases made from a different{' '}\n {clientLabel || 'Ticket Fairy'} account can count towards your referrals\n </span>\n <span>\n {' '}\n so please make sure you ask your friends to buy their own tickets using their\n own {clientLabel || 'Ticket Fairy'} account!\n </span>\n </p>\n )}\n </>\n)\n\nexport default SocialButtons\n","import _isNumber from 'lodash/isNumber'\n\nexport const isValidNumber = (value?: number | string): boolean => {\n if (isNaN(Number(value))) {\n return false\n }\n return _isNumber(Number(value))\n}\n","import { AxiosRequestConfig, AxiosResponse } from 'axios'\n\nimport { publicRequest } from '../api/publicRequest'\n\nexport const getPreRegistrationInfluencers = async (\n data: IInfluancersRequestData\n): Promise<IInfluancersResponseData> => {\n const response: AxiosResponse<IInfluancersResponseData, AxiosRequestConfig> =\n await publicRequest.get(`v1/event/${data.eventId}/pre-registration/influencers`)\n return response.data\n}\n\nexport const getPreRegistrationShareOptions = async (\n data: IShareOptionsRequestData\n): Promise<IShareOptionsResponseData> => {\n const response: AxiosResponse<IShareOptionsResponseData, AxiosRequestConfig> =\n await publicRequest.get(`/v1/pre-registration/${data.hash}/confirmation-page`)\n return response.data\n}\n\nexport const submitShareAction = async (\n data: ISubmitShareActionRequestData\n): Promise<ISubmitShareActionResponseData> => {\n const { eventActionId, accessToken, hash } = data\n\n const response: AxiosResponse<ISubmitShareActionResponseData, AxiosRequestConfig> =\n await publicRequest.post(`/v1/pre-registration/${hash}/submit-action`, {\n data: {\n attributes: {\n phase: 'pre-registration',\n eventActionId: Number(eventActionId),\n accessToken,\n },\n },\n })\n return response.data\n}\n","import { useEffect, useRef, useState } from 'react'\n\nimport { getCookieByName } from '../utils'\n\nexport const useCookieListener = (\n key: string,\n handler: (value: string | null) => void\n) => {\n const getCookie = () => getCookieByName(key)\n const [intervalValue, setIntervalValue] = useState<NodeJS.Timeout>()\n const cookieRef = useRef<string>(getCookie())\n\n const handleCookieChange = () => {\n const currentCookie = getCookie()\n const prevCookie = cookieRef.current\n\n if (currentCookie !== prevCookie) {\n cookieRef.current = getCookie()\n handler(cookieRef.current)\n }\n }\n\n useEffect(() => {\n const interval = setInterval(handleCookieChange, 500)\n setIntervalValue(interval)\n\n return () => {\n intervalValue && clearInterval(intervalValue)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n}\n","import Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport CircularProgress from '@mui/material/CircularProgress'\nimport Modal from '@mui/material/Modal'\nimport _identity from 'lodash/identity'\nimport React, { FC } from 'react'\n\ninterface Props {\n message: string;\n loading?: boolean;\n hideCancelBtn?: boolean;\n onClose?: () => void;\n onConfirm?: () => void;\n}\n\nconst style: React.CSSProperties = {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n minWidth: 480,\n backgroundColor: '#e3e3e3',\n border: '1px solid white',\n outline: 'none',\n padding: '14px',\n maxHeight: '85vh',\n overflow: 'auto',\n}\n\nconst ConfirmModal: FC<Props> = ({\n message = '',\n loading = false,\n hideCancelBtn = false,\n onClose = _identity,\n onConfirm = _identity,\n}) => (\n <Modal\n open={true}\n onClose={onClose}\n aria-labelledby=\"modal-modal-title\"\n aria-describedby=\"modal-modal-description\"\n className=\"confirm-modal\"\n >\n <Box style={style}>\n <p>{message}</p>\n <div className=\"footer\">\n {!hideCancelBtn && (\n <Button onClick={onClose} disabled={loading}>\n Cancel\n </Button>\n )}\n <Button onClick={onConfirm}>\n {loading ? <CircularProgress size=\"22px\" /> : 'OK'}\n </Button>\n </div>\n </Box>\n </Modal>\n)\n\nexport default ConfirmModal\n","import './style.css'\n\nimport moment from 'moment-timezone'\nimport React, { useEffect, useState } from 'react'\n\ninterface CountdownTypes {\n startDate: string;\n timezone?: string;\n title?: string;\n message?: string;\n showMessage?: boolean;\n disableLeadingZero?: boolean;\n callback?: () => void;\n isLoggedIn?: boolean;\n}\n\nconst isTimeExpired = (startDate: string, timezone: string) =>\n !moment(startDate).isAfter(moment.tz(moment(), timezone).format('YYYY-MM-DD HH:mm:ss'))\n\nfunction Countdown({\n startDate,\n timezone = moment.tz.guess(),\n title = '',\n message = '',\n showMessage = false,\n disableLeadingZero = false,\n callback = () => {},\n isLoggedIn,\n}: CountdownTypes) {\n const [duration, setDuration] = useState('')\n const [timeExpired, setTimeExpired] = useState(false)\n\n useEffect(() => {\n setTimeExpired(isTimeExpired(startDate, timezone))\n }, [])\n\n useEffect(() => {\n let timer: any\n\n if (!timeExpired) {\n timer = setInterval(() => {\n if (isTimeExpired(startDate, timezone)) {\n clearInterval(timer)\n setTimeExpired(true)\n callback()\n return\n }\n\n const currentDate = moment.tz(moment(), timezone).format('YYYY-MM-DD HH:mm:ss')\n const diffTime = moment(startDate).diff(currentDate)\n const duration = moment.duration(diffTime)\n const dateArr: any = {\n year: duration.years(),\n month: duration.months(),\n day: duration.days(),\n hour: duration.hours(),\n minute: duration.minutes(),\n second: duration.seconds(),\n }\n let timeLeft = ''\n\n for (const date in dateArr) {\n const unit = dateArr[date] === 1 ? date : date + 's'\n let val = dateArr[date]\n\n if (!disableLeadingZero && String(dateArr[date]).length === 1) {\n val = '0' + dateArr[date]\n }\n\n if (timeLeft) {\n timeLeft += `, ${val} ${unit}`\n } else if (dateArr[date]) {\n timeLeft += `${val} ${unit}`\n }\n }\n\n setDuration(timeLeft)\n }, 1000)\n }\n return () => {\n clearInterval(timer)\n }\n }, [timeExpired])\n\n return (\n <>\n {!timeExpired && duration && (\n <div className={`countdown ${!isLoggedIn ? 'countdown-on-bottom' : ''}`}>\n <div>\n <p className=\"title\">{title}</p>\n <p>{duration}</p>\n </div>\n {showMessage && <p className=\"message\">{message}</p>}\n </div>\n )}\n </>\n )\n}\n\nexport default Countdown\n","import React from 'react'\n\nimport { emailValidator } from '../../validators'\n\nexport const getFormFieldsNotLoggedIn = (\n clientName?: string | number\n): IFormFieldsSection[] => [\n {\n name: 'basic-info',\n groupLabel: (\n <>\n <span>\n If you want to enter your details manually, please type them below to create an\n account, then click on\n </span>\n <b> Confirm Registration:</b>\n </>\n ),\n groupLabelClassName: '',\n groupClassName: '',\n fields: [\n {\n className: 'half-width',\n name: 'firstName',\n label: 'First Name',\n type: 'text',\n required: true,\n onValidate: null,\n },\n {\n className: 'half-width',\n name: 'lastName',\n label: 'Last Name',\n type: 'text',\n required: true,\n onValidate: null,\n },\n {\n name: 'email',\n label: 'Email',\n type: 'email',\n required: true,\n onValidate: emailValidator,\n },\n {\n name: 'confirmEmail',\n label: 'Confirm Email',\n type: 'email',\n required: true,\n onValidate: emailValidator,\n },\n ],\n },\n {\n name: 'billing-info',\n groupLabel: '',\n groupLabelClassName: '',\n groupClassName: '',\n fields: [\n {\n className: 'half-width',\n name: 'zip',\n label: 'Post Code/Zip',\n type: 'text',\n required: true,\n onValidate: null,\n },\n {\n className: 'half-width',\n name: 'country',\n label: 'Country',\n type: 'select',\n required: true,\n onValidate: null,\n },\n ],\n },\n {\n name: 'password-info',\n groupLabel: (\n <div className=\"email-info-block\">\n <span>Choose a password for your new</span>\n <b> {clientName || 'Mana Common'} </b>\n <span>account</span>\n </div>\n ),\n groupLabelClassName: '',\n groupClassName: '',\n fields: [\n {\n className: 'half-width',\n name: 'password',\n label: 'Password',\n type: 'password',\n required: true,\n onValidate: null,\n },\n {\n className: 'half-width',\n name: 'confirmPassword',\n label: 'Confirm Password',\n type: 'password',\n required: true,\n onValidate: null,\n },\n ],\n },\n]\n\nexport const getFormFieldsLoggedIn = (\n clientName?: string | number\n): IFormFieldsSection[] => [\n {\n name: 'basic-info-logged-in',\n groupLabel:\n 'To confirm your pre-registration for {event_name} simply click on the confirmation button below.',\n groupLabelClassName: '',\n groupClassName: '',\n fields: [\n {\n name: 'email',\n label: 'Email',\n type: 'email',\n required: true,\n onValidate: emailValidator,\n },\n {\n name: 'confirmEmail',\n label: 'Confirm Email',\n type: 'email',\n required: true,\n onValidate: emailValidator,\n },\n ],\n },\n {\n name: 'billing-info-logged-in',\n groupLabel: '',\n groupLabelClassName: '',\n groupClassName: '',\n fields: [\n {\n name: 'numTickets',\n label: 'How many tickets do you want to buy?',\n type: 'select',\n required: true,\n options: new Array(10).fill(null).map((_, index) => ({\n label: index + 1,\n value: index + 1,\n })),\n onValidate: null,\n },\n {\n name: 'holderAge',\n label: 'Ticket Holder Age',\n type: 'date',\n required: true,\n onValidate: null,\n },\n {\n name: 'brandOptIn',\n label: `I would like to be updated on ${\n clientName || 'Mana Common'\n } news, events and offers.`,\n type: 'checkbox',\n },\n ],\n },\n]\n","import { FormikValues } from 'formik'\nimport _forEach from 'lodash/forEach'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport _isEmpty from 'lodash/isEmpty'\nimport _map from 'lodash/map'\nimport _split from 'lodash/split'\n\nimport {\n combineValidators,\n passwordValidator,\n requiredValidator,\n} from '../../validators'\nimport { IShareButton } from '../confirmationContainer'\n\nexport const getValidateFunctions = ({\n element,\n values,\n}: {\n element: IFormField;\n values: FormikValues;\n}) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const validationFunctions: any[] = []\n if (element.required) {\n validationFunctions.push(requiredValidator)\n }\n\n if (element.onValidate) {\n validationFunctions.push(element.onValidate)\n }\n\n if (element.name === 'password') {\n validationFunctions.push(passwordValidator)\n }\n\n if (element.name === 'confirmEmail') {\n const isSameEmail = (confirmEmail?: string) =>\n values.email !== confirmEmail ? 'Please confirm your email address correctly' : null\n validationFunctions.push(isSameEmail)\n }\n\n if (element.name === 'confirmPassword') {\n const isSame = (confirmPassword?: string) =>\n values.password !== confirmPassword ? 'Password confirmation does not match' : null\n validationFunctions.push(isSame)\n }\n\n return combineValidators(...validationFunctions)\n}\n\nexport const getFormInitialValues = (fieldsSections: IFormFieldsSection[]) => {\n const initialValues: { [key: string]: string | number | boolean } = {}\n const isWindowDefined = typeof window !== 'undefined'\n const userData = JSON.parse(\n isWindowDefined ? window.localStorage.getItem('user_data') || '{}' : '{}'\n ) as IProfileData\n\n _forEach(fieldsSections, item => {\n _forEach(item.fields, fieldItem => {\n switch (fieldItem.name) {\n case 'country':\n case 'numTickets':\n initialValues[fieldItem.name] = 1\n break\n case 'brandOptIn':\n initialValues[fieldItem.name] = true\n break\n case 'confirmEmail':\n initialValues[fieldItem.name] =\n _get(userData, fieldItem.name) || _get(userData, 'email') || ''\n break\n default:\n initialValues[fieldItem.name] = _get(userData, fieldItem.name) || ''\n break\n }\n })\n })\n\n return initialValues\n}\n\nexport const updateFormFieldsAttributes = (\n formFields: IFormFieldsSection[],\n attributes?: IFieldAttribute\n) => {\n if (attributes && !_isEmpty(attributes)) {\n const updatedFormFields = _map(formFields, fieldSection => {\n const fieldSectionAttributes = attributes[fieldSection.name] || {}\n\n const updatedFields = _map(fieldSection.fields, fieldItem => {\n const fieldItemAttributes = attributes[fieldItem.name] || {}\n return { ...fieldItem, ...fieldItemAttributes }\n })\n\n return {\n ...fieldSection,\n ...fieldSectionAttributes,\n fields: updatedFields,\n }\n })\n\n return updatedFormFields\n }\n return formFields\n}\n\nexport const shareOptionsAdapter = (\n data: Array<IShareOptionsActionData>,\n shareUrl: string\n) => {\n const adaptedData: Array<IShareButton> = []\n _forEach(data, option => {\n if (option.action !== 'shared_url') {\n const [platform, method] = _split(option.action, '_')\n const mainLabel = method ? method[0].toUpperCase() + method.substring(1) : 'Share'\n adaptedData.push({\n mainLabel: option.action === 'twitter' ? 'Tweet' : mainLabel + ' on',\n subLabel:\n option.action === 'twitter'\n ? ' to your followers'\n : platform[0].toUpperCase() + platform.substring(1),\n platform,\n shareData: {\n quote: 'as',\n url: option.socialUrl || shareUrl,\n },\n points: option.point,\n eventActionId: option.id,\n oneTimeAction: option.oneTimeAction,\n alreadyApplied: option.alreadyApplied,\n })\n }\n })\n return adaptedData\n}\n\nexport const getShuffleMethodByName = (\n tokenShuffleMethod: string\n): ((value: string) => string) => {\n const reverseString = (value: string) => value.split('').reverse().join('')\n const symmetricShuffleString = (value: string) => {\n const lengthOfStr = value.length\n const part1 = value.substring(0, lengthOfStr / 2)\n return value.substring(lengthOfStr / 2) + part1\n }\n const shuffleEveryTwoSymbolsInString = (value: string): string => {\n const words = value.split('')\n let shuffledStr = ''\n for (let i = 0; i < words.length; i += 2) {\n shuffledStr = shuffledStr.concat(words[i + 1], words[i])\n }\n return shuffledStr\n }\n\n if (tokenShuffleMethod === 'reverse_string') {\n return reverseString\n } else if (tokenShuffleMethod === 'symmetric_shuffle_string') {\n return symmetricShuffleString\n } else if (tokenShuffleMethod === 'shuffle_every_two_symbols_in_string')\n return shuffleEveryTwoSymbolsInString\n return _identity\n}\n","import { Field, FormikValues } from 'formik'\nimport _map from 'lodash/map'\nimport React, { FC } from 'react'\n\nimport { replaceVarInString } from '../../utils'\nimport {\n CheckboxField,\n CustomField,\n NativeSelectField,\n PhoneNumberField,\n} from '../common'\nimport { DatePickerField } from '../common/DatePickerField'\nimport { getValidateFunctions } from './utils'\nimport {ThemeOptions} from \"@mui/material\";\nimport {CSSProperties} from \"@mui/styles\";\n\nconst isDocumentDefined = typeof document !== 'undefined'\n\nexport interface IFieldsSectionProps {\n formFields?: IFormFieldsSection[];\n values: FormikValues;\n setFieldValue: (\n field: string,\n value: FormikValues,\n shouldValidate?: boolean | undefined\n ) => void;\n\n countries?: { [key: string]: string | number }[];\n theme?: 'dark' | 'light';\n themeOptions?: ThemeOptions & {\n input?: CSSProperties;\n checkbox?: CSSProperties;\n };\n containerClass?: string;\n}\n\nconst SectionContainer: FC<{ className: string }> = ({\n children,\n className,\n}) => <div className={className}>{children}</div>\n\nconst insertHTML = (elementId: string, text = '') => {\n if (isDocumentDefined) {\n const elem = document && document.getElementById(elementId)\n\n if (!elem?.childNodes.length) {\n elem?.insertAdjacentHTML('afterbegin', text)\n }\n }\n\n return null\n}\n\nconst getFieldClassNames = (id: string, existingClassNames: string) => {\n if (isDocumentDefined) {\n const elem = document && document.getElementById(id)\n\n if ((elem?.parentElement?.clientWidth || 0) < 375) {\n return existingClassNames + ' full-width'\n }\n }\n\n return existingClassNames\n}\n\nexport const FieldsSection = ({\n formFields = [],\n\n countries = [],\n\n values,\n setFieldValue,\n theme,\n containerClass = '',\n themeOptions,\n}: IFieldsSectionProps) => (\n <>\n {_map(formFields, (item, index) => {\n const {\n name,\n groupLabel,\n groupLabelVars = [],\n groupLabelClassName,\n groupClassName = '',\n fields,\n } = item\n return (\n <SectionContainer key={name} className={groupClassName}>\n <span id={`group_label_${index}`} className={groupLabelClassName}>\n {typeof groupLabel === 'string'\n ? insertHTML(\n `group_label_${index}`,\n replaceVarInString(groupLabel, groupLabelVars)\n )\n : groupLabel}\n </span>\n <div className={`fields-container ${groupClassName}`}>\n {_map(fields, (fieldData, fieldIndex) => {\n const {\n name,\n label,\n className = 'full-width',\n type,\n component,\n options = [],\n } = fieldData\n const id = `${name}-${fieldIndex}`\n const classNames = `${containerClass}-container__field ${className}`\n\n return (\n component || (\n <div\n key={name}\n id={id}\n className={getFieldClassNames(id, classNames)}\n >\n <Field\n name={name}\n label={label}\n type={type}\n validate={getValidateFunctions({\n element: fieldData,\n values,\n })}\n setFieldValue={setFieldValue}\n component={\n type === 'checkbox'\n ? CheckboxField\n : type === 'select'\n ? NativeSelectField\n : type === 'phone'\n ? PhoneNumberField\n : type === 'date'\n ? DatePickerField\n : CustomField\n }\n selectOptions={name === 'country' ? countries : options}\n theme={theme}\n themeOptions={themeOptions}\n />\n </div>\n )\n )\n })}\n </div>\n </SectionContainer>\n )\n })}\n </>\n)\n","import _isEmpty from 'lodash/isEmpty'\nimport _map from 'lodash/map'\nimport React from 'react'\n\nexport const Prewards = (props: IPrewardsProps) => {\n const {\n data,\n classNamePrefix = '',\n headerNode = (\n <>\n PRE\n <span>WARDS™</span>\n </>\n ),\n } = props\n return (\n <div className={`${classNamePrefix}_prewards`}>\n {!_isEmpty(data) && (\n <div className={`${classNamePrefix}_prewards_heder`}>{headerNode}</div>\n )}\n <div className={`${classNamePrefix}_prizes`}>\n {_map(data, prize => {\n const { description, name, image, id } = prize\n return (\n <div className={`${classNamePrefix}_prize`} key={id}>\n {image && <img className={`${classNamePrefix}_image`} alt=\"\" src={image} />}\n <div className={`${classNamePrefix}_info`}>\n <h4 className={`${classNamePrefix}_name`}>{name}</h4>\n {description && (\n <article className={`${classNamePrefix}_description`}>\n {description}\n </article>\n )}\n </div>\n </div>\n )\n })}\n </div>\n </div>\n )\n}\n","import _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport React, { useRef } from 'react'\n\ninterface ICopyFieldProps {\n copyValue: string;\n onLinkCopied?: () => void;\n copyIconSrc?: string;\n copyTitle?: string;\n hasCopyIcon: boolean;\n classNamePrefix?: string;\n messageText?: string;\n}\n\nexport const CopyField = (props: ICopyFieldProps) => {\n const {\n copyValue,\n copyIconSrc = 'https://img.icons8.com/office/50/000000/copy.png',\n copyTitle = 'Copy',\n hasCopyIcon = false,\n onLinkCopied = _identity,\n classNamePrefix = '',\n messageText = '',\n } = props\n\n const inputRef = useRef(null)\n\n return (\n <>\n {messageText && <span className=\"message-text\">{messageText}</span>}\n <input\n ref={inputRef}\n className={`${classNamePrefix}_share-input`}\n defaultValue={copyValue}\n readOnly={true}\n />\n <div\n className={`${classNamePrefix}_share-by-link-copy-icon`}\n aria-hidden={true}\n onClick={() => {\n navigator.clipboard.writeText(_get(inputRef, 'current.value'))\n onLinkCopied()\n }}\n >\n {hasCopyIcon ? (\n <img src={copyIconSrc} alt=\"copy\" />\n ) : (\n <span className={`${classNamePrefix}_copy-icon`}>{copyTitle}</span>\n )}\n </div>\n </>\n )\n}\n","import _identity from 'lodash/identity'\nimport _isEmpty from 'lodash/isEmpty'\nimport _some from 'lodash/some'\nimport React from 'react'\n\nimport { submitShareAction } from '../../api/preRegistrationComplete'\nimport { CopyField } from '../common/CopyField'\nimport SocialButtons from '../confirmationContainer/social-buttons'\nimport { getShuffleMethodByName, shareOptionsAdapter } from './utils'\n\nexport const ShareOptions = (props: IShareOptionsProps) => {\n const {\n classNamePrefix,\n data,\n hasCopyIcon = true,\n onLinkCopied = _identity,\n headerText = 'Share with your friends here ...',\n hash,\n updateShareActionData,\n shareActionData,\n } = props\n\n const {\n attributes: { actions, shareUrl },\n } = data\n\n const shareButtons = shareOptionsAdapter(actions, shareUrl)\n const isShareLinkEnabled = _some(\n actions,\n (item: IShareOptionsActionData) => item.action === 'shared_url'\n )\n const onAfterShare = async (eventActionId: string | undefined) => {\n const { shareActionToken, tokenShuffleMethod } = shareActionData\n const accessToken = getShuffleMethodByName(tokenShuffleMethod)(shareActionToken)\n if (typeof eventActionId === 'string') {\n await submitShareAction({\n eventActionId,\n accessToken,\n hash,\n })\n updateShareActionData()\n }\n }\n\n return (\n <div className={`${classNamePrefix}_share_options`}>\n {!_isEmpty(actions) && (\n <>\n <div className={`${classNamePrefix}_share_header`}>{headerText}</div>\n <SocialButtons\n shareLink={data.attributes.shareUrl}\n name=\"\"\n appId=\"\"\n showDefaultShareButtons={false}\n shareButtons={shareButtons}\n titleText=\"\"\n footerText=\"\"\n onAfterShare={(eventActionId: string | undefined) =>\n onAfterShare(eventActionId)\n }\n />\n {isShareLinkEnabled && (\n <div className={`${classNamePrefix}_share_btn_inner`}>\n <CopyField\n copyValue={shareUrl}\n onLinkCopied={onLinkCopied}\n hasCopyIcon={hasCopyIcon}\n classNamePrefix={classNamePrefix}\n messageText=\"Share your link\"\n />\n </div>\n )}\n </>\n )}\n </div>\n )\n}\n","import \"./style.css\"\n\nimport { ThemeOptions } from '@mui/material'\nimport { createTheme, ThemeProvider } from '@mui/material/styles'\nimport { CSSProperties } from '@mui/styles'\nimport axios, { AxiosError } from 'axios'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport _isEmpaty from 'lodash/isEmpty'\nimport React, { FC, useEffect, useState } from 'react'\n\nimport {\n getPreRegistrationInfluencers,\n getPreRegistrationShareOptions,\n} from '../../api/preRegistrationComplete'\nimport { X_TF_ECOMMERCE } from '../../constants'\nimport { useCookieListener } from '../../hooks'\nimport { getCookieByName, getQueryVariable } from '../../utils'\nimport { CopyMessageModal } from '../common'\nimport ConfirmModal from '../confirmModal'\nimport { LoginModal } from '../loginModal'\nimport { Prewards } from './Prewards'\nimport { ShareOptions } from './ShareOptions'\n\nconst isWindowDefined = typeof window !== 'undefined'\n\nexport const PreRegistrationComplete: FC<\n IPreRegistrationCompleteProps & {\n onGetConfirmationDataError?: (error: AxiosError) => void;\n skipInitialValidation?: boolean;\n themeOptions?: ThemeOptions & {\n input?: CSSProperties;\n checkbox?: CSSProperties;\n };\n }\n> = ({\n eventId: pEventId,\n classNamePrefix = '',\n onLinkCopied = _identity,\n hasCopyIcon = false,\n pageHeader = 'Pre-Registration Confirmation',\n onGetConfirmationDataError = _identity,\n onGetConfirmationDataSuccess = _identity,\n pageMessage = 'Pre registration was successful!',\n onLoginSuccess = _identity,\n logo,\n themeOptions,\n skipInitialValidation = false,\n}) => {\n const themeMui = createTheme(themeOptions)\n\n const localStorageHash = isWindowDefined\n ? localStorage.getItem('pre-registration-hash')\n : ''\n const queryHash = getQueryVariable('hash') || ''\n queryHash &&\n isWindowDefined &&\n window.localStorage.setItem('pre-registration-hash', queryHash)\n const hash = queryHash || localStorageHash\n const [isLoggedIn, setIsLoggedIn] = useState(Boolean(getCookieByName(X_TF_ECOMMERCE)))\n const [showModalLogin, setShowModalLogin] = useState(!isLoggedIn)\n const [showCopyModal, setShowCopyModal] = useState(false)\n const [prizes, setPrizes] = useState([] as Array<IPrizeData>)\n const [shareOptions, setShareOptions] = useState({} as IShareOptionsData)\n const [shareActionData, setShareActionData] = useState(\n {} as ISubmitShareActionAttributes\n )\n const [error, setError] = useState({} as AxiosError)\n useCookieListener(X_TF_ECOMMERCE, value => setIsLoggedIn(Boolean(value)))\n useEffect(() => {\n const fetchConfirmationData = async () => {\n // Skip validation if this is a freshly completed pre-registration\n if (skipInitialValidation) {\n onGetConfirmationDataSuccess()\n return\n }\n\n try {\n if (hash && isLoggedIn) {\n const shareOptionsData = await getPreRegistrationShareOptions({\n hash,\n })\n const { attributes } = shareOptionsData.data\n setShareOptions(shareOptionsData.data)\n setShareActionData({\n shareActionToken: attributes.shareActionToken,\n tokenShuffleMethod: attributes.tokenShuffleMethod,\n })\n const eventId = _get(shareOptionsData, 'data.attributes.eventId')\n if (eventId || pEventId) {\n const influencersData = await getPreRegistrationInfluencers({\n eventId: eventId || pEventId,\n })\n setPrizes(influencersData.data.attributes.prizes)\n }\n onGetConfirmationDataSuccess()\n }\n } catch (error) {\n if (axios.isAxiosError(error)) {\n setError(error.response?.data as AxiosError)\n }\n }\n }\n fetchConfirmationData()\n }, [\n pEventId,\n hash,\n onGetConfirmationDataError,\n onGetConfirmationDataSuccess,\n isLoggedIn,\n skipInitialValidation,\n ])\n\n const onClose = () => {\n setShowCopyModal(false)\n }\n\n const updateShareActionData = async () => {\n if (hash) {\n const shareOptionsData = await getPreRegistrationShareOptions({\n hash,\n })\n setShareOptions(shareOptionsData.data)\n setShareActionData({\n shareActionToken: shareOptionsData.data.attributes.shareActionToken,\n tokenShuffleMethod: shareOptionsData.data.attributes.tokenShuffleMethod,\n })\n }\n }\n return (\n <ThemeProvider theme={themeMui}>\n {isLoggedIn && _isEmpaty(error) ? (\n <div className={`${classNamePrefix}_pre_registration_complete_container`}>\n <CopyMessageModal showCopyModal={showCopyModal} onClose={onClose} />\n <h2 className={`${classNamePrefix}_pre_registration_complete_header preregistration_confirmation_header`}>\n {pageHeader}\n </h2>\n <div className={`${classNamePrefix}_pre_registration_complete_message`}>\n {pageMessage}\n </div>\n <div className={`${classNamePrefix}_pre_registration_complete_body`}>\n {!_isEmpaty(prizes) && (\n <Prewards classNamePrefix={classNamePrefix} data={prizes} />\n )}\n\n {!_isEmpaty(shareOptions) && (\n <ShareOptions\n classNamePrefix={classNamePrefix}\n data={shareOptions}\n onLinkCopied={() => {\n setShowCopyModal(true)\n onLinkCopied()\n }}\n shareActionData={shareActionData}\n updateShareActionData={updateShareActionData}\n hasCopyIcon={hasCopyIcon}\n hash={hash}\n />\n )}\n </div>\n </div>\n ) : (\n showModalLogin && (\n <LoginModal\n logo={logo}\n onClose={() => {\n setShowModalLogin(false)\n }}\n onLogin={res => {\n setShowModalLogin(false)\n onLoginSuccess(res)\n }}\n showForgotPasswordButton\n />\n )\n )}\n {!_isEmpaty(error) && (\n <ConfirmModal\n hideCancelBtn\n message={error.message}\n onConfirm={() => onGetConfirmationDataError(error)}\n />\n )}\n </ThemeProvider>\n )\n }\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Button, CircularProgress, ThemeOptions } from '@mui/material'\nimport { createTheme, ThemeProvider } from '@mui/material/styles'\nimport { CSSProperties } from '@mui/styles'\nimport axios, { AxiosError } from 'axios'\nimport { Form, Formik, FormikValues } from 'formik'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport _map from 'lodash/map'\nimport React, { FC, useEffect, useState } from 'react'\n\nimport { confirmPreRegistration, getCountries, getProfileData, register } from '../../api'\nimport { useCookieListener } from '../../hooks/useCookieListener'\nimport { CONFIGS, getCookieByName, getQueryVariable } from '../../utils'\nimport SnackbarAlert from '../common/SnackbarAlert'\nimport ConfirmModal from '../confirmModal'\nimport { ForgotPasswordModal, IForgotPasswordProps } from '../forgotPasswordModal'\nimport { LoginModal, Props } from '../loginModal'\nimport { getFormFieldsLoggedIn, getFormFieldsNotLoggedIn } from './constants'\nimport { FieldsSection } from './FieldsSection'\nimport { PreRegistrationComplete } from './PreRegistrationComplete'\nimport { getFormInitialValues, updateFormFieldsAttributes } from './utils'\n\nconst X_TF_ECOMMERCE = 'X-TF-ECOMMERCE'\nconst isWindowDefined = typeof window !== 'undefined'\n\ninterface IPreRegistrationProps extends Props, IForgotPasswordProps {\n eventId: string | number;\n formFields?: IFormFieldsSection[];\n additionalFieldAttribute?: IFieldAttribute;\n isPreregistrationStarted: boolean;\n onGetCountriesSuccess?: (res: any) => void;\n onGetCountriesError?: (e: AxiosError) => void;\n onConfirmationSuccess?: (res: any) => void;\n onConfirmationError?: (e: AxiosError) => void;\n onLoginSuccess?: (res: any) => void;\n\n themeOptions?: ThemeOptions & {\n input?: CSSProperties;\n checkbox?: CSSProperties;\n };\n}\n\nexport const PreRegistration: FC<IPreRegistrationProps> = ({\n eventId,\n formFields: pFormFields,\n additionalFieldAttribute,\n isPreregistrationStarted,\n logo,\n showForgotPasswordButton,\n onLoginSuccess = _identity,\n onForgotPasswordSuccess = _identity,\n onForgotPasswordError = _identity,\n onGetCountriesSuccess = _identity,\n onGetCountriesError = _identity,\n onConfirmationSuccess = _identity,\n onConfirmationError = _identity,\n themeOptions,\n}) => {\n const [error, setError] = useState('')\n const [showModalLogin, setShowModalLogin] = useState(false)\n const [alreadyHasUser, setAlreadyHasUser] = useState(false)\n const [showModalForgotPassword, setShowModalForgotPassword] = useState(false)\n const [countries, setCountries] = useState<{ [key: string]: string | number }[]>([])\n const [isLoggedIn, setIsLoggedIn] = useState(Boolean(getCookieByName(X_TF_ECOMMERCE)))\n const [confirmModalState, setConfirmModalState] = useState({ show: false, message: '' })\n const [, setUserData] = useState({} as IProfileData)\n const [isPreRegistrationComplete, setIsPreRegistrationComplete] = useState(false)\n useCookieListener(X_TF_ECOMMERCE, value => setIsLoggedIn(Boolean(value)))\n\n // Check if user already has a pre-registration when logged in\n useEffect(() => {\n if (!isLoggedIn || !isWindowDefined) return\n\n const savedHash = window.localStorage.getItem(`pre-registration-hash-${eventId}`)\n if (savedHash) {\n setIsPreRegistrationComplete(true)\n }\n }, [isLoggedIn, eventId])\n\n const themeMui = createTheme(themeOptions)\n\n const formFieldsLoggedIn = getFormFieldsLoggedIn(CONFIGS.CLIENT_NAME)\n const formFieldsNotLoggedIn = getFormFieldsNotLoggedIn(CONFIGS.CLIENT_NAME)\n\n const formFields = updateFormFieldsAttributes(\n pFormFields || isLoggedIn ? formFieldsLoggedIn : formFieldsNotLoggedIn,\n additionalFieldAttribute\n )\n\n useEffect(() => {\n // fetch countries data\n const fetchCountries = async () => {\n try {\n const res = await getCountries()\n setCountries(\n _map(_get(res, 'data'), item => ({\n label: item.name,\n value: Number(item.id),\n }))\n )\n onGetCountriesSuccess(res.data)\n } catch (e) {\n if (axios.isAxiosError(e)) {\n const error = 'Error'\n setError(error)\n onGetCountriesError(e)\n }\n }\n }\n fetchCountries()\n }, [])\n\n const localStorageHash = isWindowDefined\n ? window.localStorage.getItem('pre-registration-hash') || ''\n : ''\n const hash = getQueryVariable('hash') || localStorageHash\n const referrerId = getQueryVariable('referrer_id') || ''\n return (\n <ThemeProvider theme={themeMui}>\n <div className=\"pre-registration-container\">\n <SnackbarAlert\n type=\"error\"\n isOpen={!!error}\n message={error || ''}\n onClose={() => {\n setError('')\n }}\n />\n {confirmModalState.show && (\n <ConfirmModal\n hideCancelBtn\n onConfirm={() => setConfirmModalState({ show: false, message: '' })}\n message={confirmModalState.message}\n />\n )}\n {!isLoggedIn && (\n <div className=\"account-actions-block\">\n <div className=\"action-item\">\n <div>\n <span>\n Create (or log in to) your account, then click on Confirm Registration.\n </span>\n <span> If you have a</span>\n <b> {CONFIGS.CLIENT_NAME || 'Mana Common'} </b>\n <span>account and password already</span>\n </div>\n </div>\n <div className=\"action-item login-block\">\n <button\n className=\"login-register-button\"\n type=\"button\"\n onClick={() => {\n setShowModalLogin(true)\n }}\n >\n Login\n </button>\n </div>\n </div>\n )}\n {showModalLogin && (\n <LoginModal\n logo={logo}\n onClose={() => {\n setShowModalLogin(false)\n }}\n onLogin={res => {\n setShowModalLogin(false)\n onLoginSuccess(res)\n }}\n showForgotPasswordButton={showForgotPasswordButton}\n onForgotPassword={() => {\n setShowModalLogin(false)\n setShowModalForgotPassword(true)\n }}\n alreadyHasUser={alreadyHasUser}\n />\n )}\n {showModalForgotPassword && (\n <ForgotPasswordModal\n onClose={() => {\n setShowModalForgotPassword(false)\n }}\n onLoginButtonClick={() => {\n setShowModalForgotPassword(false)\n setShowModalLogin(true)\n }}\n onForgotPasswordSuccess={onForgotPasswordSuccess}\n onForgotPasswordError={onForgotPasswordError}\n displaySuccessMessage\n />\n )}\n {isPreRegistrationComplete ? (\n <PreRegistrationComplete\n eventId={eventId}\n logo={logo}\n themeOptions={themeOptions}\n onLoginSuccess={onLoginSuccess}\n data={{} as IShareOptionsData}\n classNamePrefix=\"\"\n onLinkCopied={_identity}\n updateShareActionData={_identity}\n hash={hash}\n shareActionData={{} as ISubmitShareActionAttributes}\n skipInitialValidation={true}\n />\n ) : (\n <>\n <h2>Pre-Registration</h2>\n <Formik\n initialValues={getFormInitialValues(formFields)}\n enableReinitialize={true}\n onSubmit={async (values: FormikValues) => {\n try {\n if (isLoggedIn) {\n if (isPreregistrationStarted) {\n const updatedValues = { ...values }\n const holderAgeDate = new Date(values.holderAge)\n updatedValues.dobDay = holderAgeDate.getDate()\n updatedValues.dobMonth = holderAgeDate.getMonth() + 1\n updatedValues.dobYear = holderAgeDate.getFullYear()\n updatedValues.referrerId = referrerId\n updatedValues.shareHash = hash\n // remove date picker string value\n delete updatedValues.holderAge\n\n const confirmationData = await confirmPreRegistration(\n eventId,\n updatedValues as IConfirmPreRegistrationRequestData\n )\n if (isWindowDefined) {\n window.localStorage.setItem(\n `pre-registration-hash-${eventId}`,\n _get(confirmationData, 'attributes.hash')\n )\n }\n\n setIsPreRegistrationComplete(true)\n onConfirmationSuccess(confirmationData)\n } else {\n setConfirmModalState({\n show: true,\n message: 'The preregistration has not started',\n })\n }\n } else {\n const bodyFormData = new FormData()\n bodyFormData.append('first_name', values.firstName)\n bodyFormData.append('last_name', values.lastName)\n bodyFormData.append('email', values.email)\n bodyFormData.append('confirm_email', values.confirmEmail)\n bodyFormData.append('zip', values.zip)\n bodyFormData.append('country', values.country)\n bodyFormData.append('password', values.password)\n bodyFormData.append('password_confirmation', values.confirmPassword)\n bodyFormData.append('client_id', CONFIGS.CLIENT_ID)\n bodyFormData.append('client_secret', CONFIGS.CLIENT_SECRET)\n bodyFormData.append('register_for', 'prereg')\n\n const res = await register(bodyFormData)\n const profileRes = await getProfileData()\n onLoginSuccess(res.data)\n if (isWindowDefined) {\n window.localStorage.setItem(\n 'user_data',\n JSON.stringify(_get(profileRes, 'data'))\n )\n setUserData(_get(profileRes, 'data'))\n }\n }\n } catch (e) {\n const error = e as AxiosError\n let errorMessage = error?.message || 'Error'\n const emailErrors = _get(error, 'response.data.message.email') || ''\n const errorDataMessage = _get(error, 'response.data.message')\n\n if (typeof errorDataMessage === 'string') {\n errorMessage = errorDataMessage\n }\n if (emailErrors?.length > 0) {\n if (emailErrors[0] === 'The email is already used') {\n setShowModalLogin(true)\n setAlreadyHasUser(true)\n }\n } else {\n setError(errorMessage)\n }\n\n onConfirmationError(error)\n }\n }}\n >\n {props => (\n <Form>\n <div className=\"login-modal-body\">\n <FieldsSection\n formFields={formFields}\n values={props.values}\n setFieldValue={props.setFieldValue}\n containerClass=\"pre-registration\"\n countries={countries}\n themeOptions={themeOptions}\n />\n </div>\n <div className=\"button-container\">\n <Button\n type=\"submit\"\n variant=\"contained\"\n className=\"login-register-button\"\n disabled={props.isSubmitting}\n >\n {props.isSubmitting ? (\n <CircularProgress size={26} />\n ) : isLoggedIn ? (\n 'Confirm Pre-Registration'\n ) : (\n 'Create Account'\n )}\n </Button>\n </div>\n </Form>\n )}\n </Formik>\n </>\n )}\n </div>\n </ThemeProvider>\n )\n}\n","import './style.css'\n\nimport Button from '@mui/material/Button'\nimport CircularProgress from '@mui/material/CircularProgress'\nimport { Field, Form, Formik } from 'formik'\nimport _find from 'lodash/find'\nimport React, { useState } from 'react'\n\nimport { addToWaitingList } from '../../api'\nimport { isBrowser } from '../../utils'\nimport { ErrorFocus } from '../../utils/formikErrorFocus'\nimport {\n combineValidators,\n emailValidator,\n requiredValidator,\n} from '../../validators'\nimport { CustomField } from '../common/index'\n\ninterface WaitingListProps {\n tickets: any;\n eventId: number;\n defaultMaxQuantity: number;\n}\n\ninterface WaitingListFields {\n ticketTypeId: string;\n quantity: string;\n firstName: string;\n lastName: string;\n email: string;\n}\n\nconst generateQuantity = (n: number) => {\n const quantityList = []\n for (let i = 1; i <= n; i++) {\n quantityList.push({ label: i, value: i })\n }\n return quantityList\n}\n\nconst WaitingList = ({\n tickets = {},\n eventId,\n defaultMaxQuantity = 10,\n}: WaitingListProps) => {\n const userData =\n isBrowser && window.localStorage.getItem('user_data')\n ? JSON.parse(window.localStorage.getItem('user_data') || '')\n : {}\n\n const [showSuccessMessage, setShowSuccessMessage] = useState(false)\n const [loading, setLoading] = useState(false)\n const ticketTypesList = Object.values(tickets).map((d: any) => ({\n label: d.displayName,\n value: d.id,\n }))\n\n const showTicketsField = Boolean(ticketTypesList.length)\n\n const handleSubmit = async (values: WaitingListFields) => {\n try {\n setLoading(true)\n const response = await addToWaitingList(eventId, { attributes: values })\n\n if (response.success) {\n setShowSuccessMessage(true)\n }\n } catch (error) {\n } finally {\n setLoading(false)\n }\n }\n\n return (\n <div className=\"waiting-list\">\n {showSuccessMessage ? (\n <div className=\"success-message\">\n <p className=\"added-success-message\">You've been added to the waiting list!</p>\n <p>You'll be notified if tickets become available.</p>\n </div>\n ) : (\n <>\n <h2>WAITING LIST</h2>\n <Formik\n initialValues={{\n ticketTypeId: '',\n quantity: '',\n firstName: userData.first_name || '',\n lastName: userData.last_name || '',\n email: userData.email || '',\n }}\n onSubmit={handleSubmit}\n >\n {({ values, setFieldValue }) => {\n const selectedTicket = _find(tickets, n => n.id === values.ticketTypeId)\n return (\n <Form>\n <ErrorFocus />\n {showTicketsField && (\n <>\n <div className=\"field-item\">\n <Field\n name=\"ticketTypeId\"\n label=\"Type of Ticket\"\n type=\"select\"\n component={CustomField}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n setFieldValue('ticketTypeId', e.target.value)\n setFieldValue('quantity', '')\n }}\n selectOptions={[\n { label: 'Type of Ticket', value: '', disabled: true },\n ...ticketTypesList,\n ]}\n />\n </div>\n <div className=\"field-item\">\n <Field\n name=\"quantity\"\n label=\"Quantity Requested\"\n type=\"select\"\n component={CustomField}\n selectOptions={[\n {\n label: 'Quantity Requested',\n value: '',\n disabled: true,\n },\n ...generateQuantity(selectedTicket?.waitingListMaxQuantity || (defaultMaxQuantity ?? 10)\n ),\n ]}\n />\n </div>\n </>\n )}\n <div className=\"field-item\">\n <Field\n name=\"firstName\"\n label=\"First name\"\n validate={(value: string) =>\n requiredValidator(value, 'Please enter your First name')\n }\n component={CustomField}\n />\n </div>\n <div className=\"field-item\">\n <Field\n name=\"lastName\"\n label=\"Last name\"\n validate={(value: string) =>\n requiredValidator(value, 'Please enter your Last name')\n }\n component={CustomField}\n />\n </div>\n <div className=\"field-item\">\n <Field\n name=\"email\"\n label=\"Email\"\n validate={combineValidators(\n (value: string) =>\n requiredValidator(value, 'Please enter your Email'),\n (value: string) => emailValidator(value)\n )}\n component={CustomField}\n />\n </div>\n\n <Button\n type=\"submit\"\n variant=\"contained\"\n className=\"waiting-list-button\"\n >\n {loading ? (\n <CircularProgress size=\"22px\" />\n ) : (\n 'ADD TO WAITING LIST'\n )}\n </Button>\n </Form>\n )\n }}\n </Formik>\n </>\n )}\n </div>\n )\n}\n\nexport default WaitingList\n","import React from 'react'\nimport Button from 'react-bootstrap/Button'\n\nexport interface IAccessCodeSectionProps {\n code: string;\n setCode: (value: string) => void;\n updateTickets: (value: boolean) => void;\n}\n\n// This section is seperate because additional changes layter may be applied to Access Code\n\nexport const AccessCodeSection = ({\n code,\n setCode,\n updateTickets\n}: IAccessCodeSectionProps) => {\n const isAccessCodeHasValue = !!code.trim()\n\n return (\n <div className=\"access-code-block\">\n <div className=\"access-code-block\">\n <p className=\"access-code-text\">\n Access code required\n </p>\n </div>\n <input\n className=\"access-code-input\"\n placeholder=\"\"\n onChange={e => {\n setCode(e.target.value)\n }}\n onKeyPress={event => {\n if (event.key === 'Enter' && isAccessCodeHasValue) {\n updateTickets(true)\n }\n }}\n />\n <Button\n className=\"access-submit-button\"\n onClick={() => {\n if (isAccessCodeHasValue) {\n updateTickets(true)\n }\n }}\n >\n ENTER\n </Button>\n </div>\n )\n}\n","import React from 'react'\nimport Button from 'react-bootstrap/Button'\nimport SVG from 'react-inlinesvg'\n\nimport DoneSvg from '../../assets/images/done.svg'\nimport XmarkSvg from '../../assets/images/xmark.svg'\n\nexport interface IPromoCodeSectionProps {\n code: string;\n codeIsApplied: boolean;\n showPromoInput: boolean;\n setCode: (value: string) => void;\n setShowPromoInput: (value: boolean) => void;\n updateTickets: (value: boolean, type: string) => void;\n setCodeIsApplied: (value: boolean) => void;\n codeIsInvalid: boolean;\n setCodeIsInvalid: (value: boolean) => void;\n promoText?: string;\n showAlertIcons?: boolean;\n}\n\nexport const PromoCodeSection = ({\n code,\n codeIsApplied,\n showPromoInput,\n setCode,\n setShowPromoInput,\n updateTickets,\n setCodeIsApplied,\n codeIsInvalid,\n setCodeIsInvalid,\n promoText,\n showAlertIcons\n}: IPromoCodeSectionProps) => {\n const isPromoCodeHasValue = !!code.trim()\n const appliedPromoCode = window?.localStorage?.getItem('appliedPromoCode')\n\n const renderInputField = () => (\n <div className=\"promo-code-block\">\n <div className=\"promo-code-block\">\n <p className=\"promo-code-text\">Promo code</p>\n </div>\n <input\n className=\"promo-code-input\"\n placeholder=\"\"\n onChange={e => {\n setCode(e.target.value)\n }}\n onKeyPress={event => {\n if (event.key === 'Enter' && isPromoCodeHasValue) {\n setShowPromoInput(false)\n updateTickets(true, 'promo')\n }\n }}\n />\n <Button\n className=\"promo-submit-button\"\n onClick={() => {\n if (isPromoCodeHasValue) {\n setShowPromoInput(false)\n updateTickets(true, 'promo')\n }\n }}\n >\n APPLY\n </Button>\n </div>\n )\n\n return (\n <div>\n {codeIsApplied ? (\n <div className=\"alert-info\">\n {showAlertIcons && (\n <SVG\n src={DoneSvg}\n preProcessor={code =>\n code.replace(/fill=\".*?\"/g, 'fill=\"currentColor\"')\n }\n />\n )}\n <p className=\"promo-code-success\">PROMO CODE APPLIED SUCCESSFULLY</p>\n </div>\n ) : null}\n {codeIsApplied ? (\n <div className=\"alert-info\">\n <p className=\"promo-code-success\">PROMO CODE: {appliedPromoCode}</p>\n </div>\n ) : null}\n {codeIsInvalid ? (\n <div className=\"alert-info fail\">\n {showAlertIcons && (\n <SVG\n src={XmarkSvg}\n />\n )}\n <p className=\"promo-code-fail\">Invalid Promo Code</p>\n </div>\n ) : null}\n {!showPromoInput && (\n <Button\n className=\"promo-code-button\"\n placeholder=\"Promo Codes\"\n onClick={() => {\n setCodeIsApplied(false)\n setShowPromoInput(true)\n setCodeIsInvalid(false)\n }}\n >\n {promoText ?? 'Got a promo code? Click here'}\n </Button>\n )}\n {showPromoInput && renderInputField()}\n </div>\n )\n}","import { useEffect } from 'react'\n\nimport { postReferralVisits } from '../../api'\n\ninterface IReferralLogicProps {\n eventId: string | number;\n}\n\nexport const ReferralLogic = (props: IReferralLogicProps) => {\n const { eventId } = props\n\n useEffect(() => {\n const isWindowDefined = typeof window !== 'undefined'\n\n if (isWindowDefined) {\n const params: URLSearchParams = new URL(`${window.location}`).searchParams\n const referralId = params.get('ttf_r') || params.get('referrer_id') || ''\n const referralValue = [eventId, '.', referralId].join('')\n const isAlreadyCounted = localStorage.getItem('referral_key') === referralValue\n\n if (referralId && eventId && !isAlreadyCounted) {\n (async () => {\n try {\n await postReferralVisits(`${eventId}`, referralId)\n localStorage.setItem('referral_key', referralValue)\n } catch (error) {}\n })()\n }\n }\n }, [eventId])\n\n return null\n}\n","export const getTicketSelectOptions = (maxCount = 10, minCount = 1, multiplier = 1) => {\n const options = [{ label: 0, value: 0 }]\n for (let i = minCount || 1; i <= Math.min(50, maxCount); i += multiplier) {\n options.push({ label: i, value: i })\n }\n return options\n}\n\ninterface eventDatesInfo {\n salesStarted: boolean;\n salesEnded: boolean;\n presalesStarted: boolean;\n presalesEnded: boolean;\n presalesEnabled: boolean;\n}\n\nexport const defineIsSalesClosed = (eventDatesInfo: eventDatesInfo): boolean => {\n const { salesStarted, salesEnded, presalesStarted, presalesEnded, presalesEnabled } =\n eventDatesInfo\n let isSalesClosed = false\n if (!salesStarted || (salesStarted && salesEnded)) {\n isSalesClosed = true\n }\n if (presalesEnabled) {\n if (\n (!presalesStarted && !presalesEnded) ||\n (presalesStarted && presalesEnded && !salesStarted)\n ) {\n isSalesClosed = true\n } else {\n isSalesClosed = false\n }\n }\n return isSalesClosed\n}\n","import './style.css'\n\nimport Box from '@mui/material/Box'\nimport FormControl from '@mui/material/FormControl'\nimport MenuItem from '@mui/material/MenuItem'\nimport Select from '@mui/material/Select'\nimport _get from 'lodash/get'\nimport React from 'react'\n\nimport { defineIsSalesClosed, getTicketSelectOptions } from './utils'\n\ninterface ITicketRowProps {\n ticketTier: any;\n prevTicketTier: any;\n selectedTickets: any;\n handleTicketSelect: any;\n event: any;\n isSeatMapAllowed?: boolean;\n tableType?: boolean;\n}\n\nexport const TicketRow = ({\n ticketTier,\n prevTicketTier,\n selectedTickets,\n handleTicketSelect,\n event,\n isSeatMapAllowed,\n tableType,\n}: ITicketRowProps) => {\n const soldOutMessage = ticketTier.soldOutMessage\n ? `${ticketTier.soldOutMessage}`.toUpperCase()\n : 'SOLD OUT'\n const isSalesClosed = defineIsSalesClosed({\n salesStarted: ticketTier.salesStarted,\n salesEnded: ticketTier.salesEnded,\n presalesStarted: event?.presalesStarted,\n presalesEnded: event?.presalesEnded,\n presalesEnabled: event?.presales_enabled,\n })\n const maxCount = tableType ? ticketTier.maxGuests : ticketTier.maxQuantity\n const minCount = tableType ? ticketTier.minGuests : ticketTier.minQuantity\n const { multiplier } = ticketTier\n const options = getTicketSelectOptions(maxCount, minCount, multiplier)\n\n const ticketsClosedMessage = !ticketTier.salesStarted\n ? 'Sales not started'\n : 'Sales Ended'\n const canPurchaseTicket = ticketTier.displayTicket && ticketTier.maxQuantity\n const isDirectPurchaseAllowed = _get(ticketTier, 'allowDirectPurchase', false)\n\n const onSaleContent = (\n <div className=\"get-tickets\">\n {ticketTier.isTable && <span>GUESTS</span>}\n <Box className=\"get-tickets__selectbox\">\n <FormControl fullWidth>\n <Select\n sx={{ borderRadius: 0 }}\n value={selectedTickets[ticketTier.id] ? selectedTickets[ticketTier.id] : 0}\n onChange={handleTicketSelect}\n displayEmpty\n inputProps={{ 'aria-label': 'Without label' }}\n MenuProps={{\n PaperProps: {\n sx: { maxHeight: 150 },\n className: 'get-tickets-paper',\n },\n }}\n >\n {options.map((option, index) => (\n <MenuItem key={index} value={option.value}>\n {option.value}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </Box>\n </div>\n )\n\n let returnValue: any = ''\n\n // ticketTier.soldOut === false --> means that ticket is in the stock\n const isSoldOut =\n ticketTier.sold_out ||\n !(ticketTier.displayTicket || ticketTier.slotGroupId) ||\n ticketTier.soldOut ||\n ticketTier.soldOut === false\n\n if (isSoldOut) {\n returnValue = soldOutMessage\n } else if (isSalesClosed) {\n returnValue = ticketsClosedMessage\n } else if (canPurchaseTicket && isSeatMapAllowed && !isDirectPurchaseAllowed) {\n // Seat Map Tickets renderer logic\n returnValue = null\n } else if (\n canPurchaseTicket ||\n (canPurchaseTicket && event?.presalesStarted && !event?.presalesEnded)\n ) {\n returnValue = onSaleContent\n } else if (_get(prevTicketTier, 'in_stock')) {\n returnValue = 'SOON'\n }\n\n return <>{returnValue} </>\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport './style.css'\n\nimport _get from 'lodash/get'\nimport _sortBy from 'lodash/sortBy'\nimport React, { ReactNode, useState } from 'react'\nimport { Tooltip } from 'react-tooltip'\n\nimport { FEES_STYLES } from '../../constants'\nimport { CONFIGS } from '../../utils'\nimport InfoIcon from './InfoIcon'\nimport { TicketRow } from './TicketRow'\n\nfunction decodeHTML(html: string): string {\n const textArea = document.createElement('textarea')\n textArea.innerHTML = html\n return textArea.value\n}\n\ninterface ITicketsSectionProps {\n event: any;\n ticketsList: any;\n selectedTickets: any;\n handleTicketSelect: any;\n sortBySoldOut: boolean;\n hideTicketsHeader: boolean;\n hideTableTicketsHeader: boolean;\n tableTickets: any;\n ticketsHeaderComponent?: ReactNode;\n tableTicketsHeaderComponent?: ReactNode;\n showGroupNameBlock?: boolean;\n currencySymbol?: string;\n isSeatMapAllowed?: boolean;\n descriptionTrigger?: 'click' | 'hover';\n}\n\nexport const TicketsSection = ({\n event,\n ticketsList,\n selectedTickets,\n handleTicketSelect,\n sortBySoldOut,\n ticketsHeaderComponent,\n tableTicketsHeaderComponent,\n hideTicketsHeader,\n hideTableTicketsHeader,\n showGroupNameBlock,\n currencySymbol,\n isSeatMapAllowed,\n tableTickets,\n descriptionTrigger = 'click',\n}: ITicketsSectionProps) => {\n const symbol = _get(event, 'currency.symbol')\n const sortedTicketsList = sortBySoldOut\n ? _sortBy(_sortBy(ticketsList, 'sortOrder'), 'soldOut')\n : _sortBy(ticketsList, 'sortOrder')\n const showGroup = !!sortedTicketsList.find(ticket => ticket.groupName)\n const priceSymbol = currencySymbol || symbol\n\n const [visibleDescription, setVisibleDescription] = useState<string | null>(null)\n\n const handleDescriptionToggle = (ticketId: string) => {\n setVisibleDescription(current => (current === ticketId ? null : ticketId))\n }\n\n return (\n <>\n {!hideTicketsHeader && ticketsHeaderComponent}\n {sortedTicketsList.map((ticket, i, arr) => {\n const ticketPriceWithoutFees = `${priceSymbol} ${(+ticket.cost).toFixed(2)}`\n const ticketPriceWithFees = `${priceSymbol} ${(+ticket.basePrice).toFixed(2)}`\n const ticketOldPriceWithFees = `${priceSymbol} ${(+ticket.oldBasePrice).toFixed(2)}`\n const ticketOldPriceWithoutFees = `${priceSymbol} ${(+ticket.oldCost).toFixed(2)}`\n\n const isSoldOut =\n ticket.sold_out ||\n !(ticket.displayTicket || ticket.slotGroupId) ||\n ticket.soldOut\n const ticketSelect = (event: any) => {\n const { value } = event.target\n handleTicketSelect(ticket.id, value)\n }\n\n let ticketIsDiscounted = false\n if (ticket.oldPrice && !isSoldOut && ticket.oldPrice !== ticket.price) {\n ticketIsDiscounted = true\n }\n\n const ticketIsFree = +ticket.price === 0\n const discountTicketPriceElem = CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH || !ticket.feeIncluded ?\n ticketOldPriceWithoutFees : ticketOldPriceWithFees\n const ticketPriceElem = isSoldOut\n ? 'SOLD OUT'\n : ticketIsFree\n ? 'FREE'\n : (CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH || !ticket.feeIncluded)\n ? ticketPriceWithoutFees\n : ticketPriceWithFees\n const isNewGroupTicket = ticket?.groupName !== arr[i - 1]?.groupName\n\n return (\n <React.Fragment key={ticket.id || ticket.name}>\n {showGroupNameBlock && showGroup && isNewGroupTicket ? (\n <div className=\"event-detail__tier group-title\">\n {ticket.groupName || ''}\n </div>\n ) : null}\n <div\n className={`event-detail__tier ${isSoldOut ? 'disabled' : ''}`}\n id={ticket.id || ticket.name}\n >\n <div className=\"event-detail__tier-name\">\n {ticket.displayName || ticket.name}\n {ticket.descriptionRich && (\n <>\n <span\n aria-hidden\n className=\"info-icon\"\n onClick={\n descriptionTrigger === 'click'\n ? () => handleDescriptionToggle(ticket.id)\n : undefined\n }\n onMouseEnter={\n descriptionTrigger === 'hover'\n ? () => setVisibleDescription(ticket.id)\n : undefined\n }\n onMouseLeave={\n descriptionTrigger === 'hover'\n ? () => setVisibleDescription(null)\n : undefined\n }\n data-tooltip-id={`tooltip-${ticket.id}`}\n data-tooltip-content=\"View ticket info\"\n style={{\n marginLeft: 8,\n cursor: 'pointer',\n display: 'flex',\n }}\n >\n <InfoIcon />\n </span>\n\n <Tooltip id={`tooltip-${ticket.id}`} place=\"top\">\n {ticket.description || 'No description available'}\n </Tooltip>\n </>\n )}\n </div>\n <div className=\"event-tickets-container\">\n <div className=\"event-detail__tier-price\">\n {ticketIsDiscounted && <p className=\"old-price\">{discountTicketPriceElem}</p>}\n <p className={isSoldOut ? 'sold-out' : ''}>{ticketPriceElem}</p>\n {!isSoldOut && !ticketIsFree && (\n <p className=\"fees\">\n {CONFIGS.FEES_STYLE === FEES_STYLES.TRADITIONAL &&\n (ticket.feeIncluded ? '(incl. Fees)' : '(excl. Fees)')}\n {CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH &&\n `(${ticketPriceWithFees} with fees)`}\n </p>\n )}\n </div>\n <div className=\"event-detail__tier-state\" style={{ minWidth: 55 }}>\n <TicketRow\n ticketTier={ticket}\n prevTicketTier={arr[i - 1]}\n selectedTickets={selectedTickets}\n handleTicketSelect={ticketSelect}\n event={event}\n />\n </div>\n </div>\n {visibleDescription === ticket.id && (\n <div className=\"ticket-description\">\n <div\n dangerouslySetInnerHTML={{\n __html: decodeHTML(ticket.descriptionRich),\n }}\n />\n </div>\n )}\n </div>\n </React.Fragment>\n )\n })}\n {!hideTableTicketsHeader && tableTicketsHeaderComponent}\n {tableTickets.map((ticket: any, i: any, arr: any) => {\n const ticketPriceWithoutFees = `${priceSymbol} ${(+ticket.cost).toFixed(2)}`\n const ticketPriceWithFees = `${priceSymbol} ${(+ticket.basePrice).toFixed(2)}`\n const ticketOldPriceWithFees = `${priceSymbol} ${(+ticket.oldBasePrice).toFixed(2)}`\n const ticketOldPriceWithoutFees = `${priceSymbol} ${(+ticket.oldCost).toFixed(2)}`\n\n const isSoldOut =\n ticket.sold_out ||\n !(ticket.displayTicket || ticket.slotGroupId) ||\n ticket.soldOut\n const ticketSelect = (event: any) => {\n const { value } = event.target\n handleTicketSelect(ticket.id, value, true)\n }\n\n let ticketIsDiscounted = false\n if (ticket.oldPrice && !isSoldOut && ticket.oldPrice !== ticket.price) {\n ticketIsDiscounted = true\n }\n\n const ticketIsFree = +ticket.price === 0\n const discountTicketPriceElem = CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH || !ticket.feeIncluded ?\n ticketOldPriceWithoutFees : ticketOldPriceWithFees\n const ticketPriceElem = isSoldOut\n ? 'SOLD OUT'\n : ticketIsFree\n ? 'FREE'\n : (CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH || !ticket.feeIncluded)\n ? ticketPriceWithoutFees\n : ticketPriceWithFees\n const isNewGroupTicket = ticket?.groupName !== arr[i - 1]?.groupName\n\n return (\n <React.Fragment key={ticket.id || ticket.name}>\n {showGroupNameBlock && showGroup && isNewGroupTicket ? (\n <div className=\"event-detail__tier group-title\">\n {ticket.groupName || ''}\n </div>\n ) : null}\n <div\n className={`event-detail__tier ${isSoldOut ? 'disabled' : ''}`}\n id={ticket.id || ticket.name}\n >\n <div className=\"event-detail__tier-name\">\n {ticket.displayName || ticket.name}\n {ticket.descriptionRich && (\n <>\n <span\n aria-hidden\n className=\"info-icon\"\n onClick={\n descriptionTrigger === 'click'\n ? () => handleDescriptionToggle(ticket.id)\n : undefined\n }\n onMouseEnter={\n descriptionTrigger === 'hover'\n ? () => setVisibleDescription(ticket.id)\n : undefined\n }\n onMouseLeave={\n descriptionTrigger === 'hover'\n ? () => setVisibleDescription(null)\n : undefined\n }\n style={{ marginLeft: 8, cursor: 'pointer', display: 'flex' }}\n data-tooltip-id={`tooltip-${ticket.id}`}\n data-tooltip-content=\"View ticket info\"\n >\n <InfoIcon />\n </span>\n <Tooltip id={`tooltip-${ticket.id}`} place=\"top\">\n {ticket.description || 'No description available'}\n </Tooltip>\n </>\n )}\n </div>\n <div className=\"event-tickets-container\">\n <div className=\"event-detail__tier-price\">\n {ticketIsDiscounted && <p className=\"old-price\">{discountTicketPriceElem}</p>}\n <p className={isSoldOut ? 'sold-out' : ''}>{ticketPriceElem}</p>\n {!isSoldOut && !ticketIsFree && (\n <p className=\"fees\">\n {CONFIGS.FEES_STYLE === FEES_STYLES.TRADITIONAL &&\n (ticket.feeIncluded ? '(incl. Fees)' : '(excl. Fees)')}\n {CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH &&\n `(${ticketPriceWithFees} with fees)`}\n </p>\n )}\n {ticket.depositPercent && (\n <p className=\"deposits\">{ticket.depositPercent + '% DEPOSIT'}</p>\n )}\n </div>\n <div className=\"event-detail__tier-state\" style={{ minWidth: 55 }}>\n <TicketRow\n tableType={true}\n ticketTier={ticket}\n prevTicketTier={arr[i - 1]}\n selectedTickets={selectedTickets}\n handleTicketSelect={ticketSelect}\n isSeatMapAllowed={isSeatMapAllowed}\n event={event}\n />\n </div>\n </div>\n {visibleDescription === ticket.id && (\n <div className=\"ticket-description\">\n <div\n dangerouslySetInnerHTML={{\n __html: decodeHTML(ticket.descriptionRich),\n }}\n />\n </div>\n )}\n </div>\n </React.Fragment>\n )\n })}\n </>\n )\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport './style.css'\n\nimport Box from '@mui/material/Box'\nimport FormControl from '@mui/material/FormControl'\nimport MenuItem from '@mui/material/MenuItem'\nimport Select from '@mui/material/Select'\nimport moment from 'moment-timezone'\nimport React, { useState } from 'react'\nimport { Tooltip } from 'react-tooltip'\n\nimport { FEES_STYLES } from '../../constants'\nimport { CONFIGS } from '../../utils'\nimport InfoIcon from './InfoIcon'\nimport { getTicketSelectOptions } from './utils'\n\nfunction decodeHTML(html: string): string {\n const textArea = document.createElement('textarea')\n textArea.innerHTML = html\n return textArea.value\n}\n\ninterface TimeSlotOption {\n timeKey: string;\n ticketInstance: any;\n}\n\ninterface ITimeSlotTicketRowProps {\n ticketKey: string;\n ticket: any;\n availableTimeSlots: TimeSlotOption[];\n selectedTickets: any;\n selectedTimeSlots: any;\n handleTicketSelect: (ticketKey: string, quantity: number, ticketInstance: any) => void;\n handleTimeSlotSelect: (ticketKey: string, timeKey: string, ticketInstance: any) => void;\n priceSymbol: string;\n isSoldOut: boolean;\n}\n\nexport const TimeSlotTicketRow = ({\n ticketKey,\n ticket,\n availableTimeSlots,\n selectedTickets,\n selectedTimeSlots,\n handleTicketSelect,\n handleTimeSlotSelect,\n priceSymbol,\n isSoldOut,\n}: ITimeSlotTicketRowProps) => {\n const [visibleDescription, setVisibleDescription] = useState<boolean>(false)\n\n const currentSelectedTimeKey = selectedTimeSlots[ticketKey] || ''\n const currentTicketInstance = availableTimeSlots.find(slot => slot.timeKey === currentSelectedTimeKey)?.ticketInstance\n const currentSelectedQuantity = currentTicketInstance ? (selectedTickets[currentTicketInstance.id] || 0) : 0\n\n const maxCount = ticket.maxQuantity\n const minCount = ticket.minQuantity\n const { multiplier } = ticket\n const options = getTicketSelectOptions(maxCount, minCount, multiplier)\n\n const ticketPriceWithoutFees = `${priceSymbol} ${(+ticket.cost).toFixed(2)}`\n const ticketPriceWithFees = `${priceSymbol} ${(+ticket.basePrice).toFixed(2)}`\n const ticketOldPriceWithFees = `${priceSymbol} ${(+ticket.oldBasePrice).toFixed(2)}`\n const ticketOldPriceWithoutFees = `${priceSymbol} ${(+ticket.oldCost).toFixed(2)}`\n\n let ticketIsDiscounted = false\n if (ticket.oldPrice && !isSoldOut && ticket.oldPrice !== ticket.price) {\n ticketIsDiscounted = true\n }\n\n const ticketIsFree = +ticket.price === 0\n const discountTicketPriceElem =\n CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH || !ticket.feeIncluded\n ? ticketOldPriceWithoutFees\n : ticketOldPriceWithFees\n const ticketPriceElem = isSoldOut\n ? 'SOLD OUT'\n : ticketIsFree\n ? 'FREE'\n : CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH || !ticket.feeIncluded\n ? ticketPriceWithoutFees\n : ticketPriceWithFees\n\n const handleTimeChange = (event: any) => {\n const selectedTimeKey = event.target.value\n const selectedOption = availableTimeSlots.find(slot => slot.timeKey === selectedTimeKey)\n if (selectedOption) {\n handleTimeSlotSelect(ticketKey, selectedOption.timeKey, selectedOption.ticketInstance)\n }\n }\n\n const handleQuantityChange = (event: any) => {\n const { value } = event.target\n // Only allow quantity selection if a time slot is selected\n if (!currentSelectedTimeKey && value > 0) {\n return\n }\n if (currentTicketInstance) {\n handleTicketSelect(ticketKey, value, currentTicketInstance)\n }\n }\n\n const handleDescriptionToggle = () => {\n setVisibleDescription(current => !current)\n }\n\n return (\n <>\n <div className={`event-detail__tier ${isSoldOut ? 'disabled' : ''}`} id={ticketKey}>\n <div className=\"event-detail__tier-name\">\n {ticket.displayName || ticket.name}\n {ticket.descriptionRich && (\n <>\n <span\n aria-hidden\n className=\"info-icon\"\n onClick={handleDescriptionToggle}\n data-tooltip-id={`tooltip-${ticketKey}`}\n data-tooltip-content=\"View ticket info\"\n style={{\n marginLeft: 8,\n cursor: 'pointer',\n display: 'flex',\n }}\n >\n <InfoIcon />\n </span>\n\n <Tooltip id={`tooltip-${ticketKey}`} place=\"top\">\n {ticket.description || 'No description available'}\n </Tooltip>\n </>\n )}\n </div>\n <div className=\"event-tickets-container\">\n <div className=\"event-detail__tier-price\">\n {ticketIsDiscounted && <p className=\"old-price\">{discountTicketPriceElem}</p>}\n <p className={isSoldOut ? 'sold-out' : ''}>{ticketPriceElem}</p>\n {!isSoldOut && !ticketIsFree && (\n <p className=\"fees\">\n {CONFIGS.FEES_STYLE === FEES_STYLES.TRADITIONAL &&\n (ticket.feeIncluded ? '(incl. Fees)' : '(excl. Fees)')}\n {CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH &&\n `(${ticketPriceWithFees} with fees)`}\n </p>\n )}\n </div>\n {!isSoldOut && (\n <div className=\"event-detail__tier-state time-slot-selectors-container\">\n {/* Time Slot Selector */}\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 2,\n marginTop: 2,\n }}\n >\n <FormControl>\n <Select\n sx={{ borderRadius: 0, minWidth: 120 }}\n value={currentSelectedTimeKey}\n onChange={handleTimeChange}\n displayEmpty\n inputProps={{ 'aria-label': 'Select time slot' }}\n MenuProps={{\n PaperProps: {\n className: 'get-tickets-paper',\n },\n }}\n >\n <MenuItem value=\"\" disabled>\n Time\n </MenuItem>\n {availableTimeSlots.map((slot, index) => (\n <MenuItem key={index} value={slot.timeKey}>\n {moment(slot.ticketInstance.slotStartDate).format('hh:mm A')}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n {/* Quantity Selector */}\n <FormControl>\n <Select\n sx={{ borderRadius: 0, minWidth: 60 }}\n value={currentSelectedQuantity}\n onChange={handleQuantityChange}\n displayEmpty\n disabled={!currentSelectedTimeKey}\n inputProps={{ 'aria-label': 'Select quantity' }}\n MenuProps={{\n PaperProps: {\n sx: { maxHeight: 150 },\n className: 'get-tickets-paper',\n },\n }}\n >\n {options.map((option, index) => (\n <MenuItem key={index} value={option.value}>\n {option.value}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </Box>\n </div>\n )}\n </div>\n {visibleDescription && ticket.descriptionRich && (\n <div className=\"ticket-description\">\n <div\n dangerouslySetInnerHTML={{\n __html: decodeHTML(ticket.descriptionRich),\n }}\n />\n </div>\n )}\n </div>\n </>\n )\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Box, CircularProgress, TextField } from '@mui/material'\nimport { LocalizationProvider, StaticDatePicker as DatePicker } from '@mui/x-date-pickers'\nimport { AdapterMoment } from '@mui/x-date-pickers/AdapterMoment'\nimport _get from 'lodash/get'\nimport _map from 'lodash/map'\nimport _sortBy from 'lodash/sortBy'\nimport moment from 'moment-timezone'\nimport React, { ReactNode, useMemo, useState } from 'react'\n\nimport { TimeSlotTicketRow } from './TimeSlotTicketRow'\n\ninterface Props {\n event: any;\n eventId: number;\n availableDates: string[];\n selectedDate: string | null;\n timeSlotGroups: { [key: string]: any[] };\n setTimeSlotGroups: (value: { [key: string]: any[] }) => void;\n setSelectedDate: (value: string | null) => void;\n getTimeSlots: (date: string | null, type?: string) => Promise<void>;\n\n selectedTickets: any;\n handleTicketSelect: any;\n sortBySoldOut: boolean;\n hideTicketsHeader: boolean;\n ticketsHeaderComponent?: ReactNode;\n showGroupNameBlock?: boolean;\n currencySymbol?: string;\n isSeatMapAllowed?: boolean;\n}\n\ninterface TimeSlotOption {\n timeKey: string;\n ticketInstance: any;\n}\n\ninterface UniqueTicket {\n ticket: any;\n availableTimeSlots: TimeSlotOption[];\n}\n\nconst TimeSlotsSection: React.FC<Props> = ({\n event,\n availableDates,\n selectedDate,\n timeSlotGroups,\n setSelectedDate,\n getTimeSlots,\n selectedTickets,\n handleTicketSelect,\n sortBySoldOut,\n hideTicketsHeader,\n ticketsHeaderComponent,\n currencySymbol,\n}) => {\n const [loading, setLoading] = useState(false)\n const [selectedTimeSlots, setSelectedTimeSlots] = useState<{ [key: string]: string }>({})\n\n const handleDateChange = async (date: string | null) => {\n setSelectedDate(date)\n setSelectedTimeSlots({}) // Reset time slot selections when date changes\n if (date) {\n setLoading(true)\n try {\n await getTimeSlots(date)\n } catch (error) {\n console.error('Error fetching time slots:', error)\n } finally {\n setLoading(false)\n }\n }\n }\n\n const isDateDisabled = (date: string) => {\n const formattedDate = moment(date).format('YYYY-MM-DD')\n return !availableDates.includes(formattedDate)\n }\n\n // Group tickets by unique ticket type using displayName + price\n const uniqueTickets = useMemo(() => {\n const ticketMap: { [key: string]: UniqueTicket } = {}\n\n // Iterate through all time slots\n _map(timeSlotGroups, (tickets, timeKey) => {\n tickets.forEach((ticket: any) => {\n // Use displayName + price as the unique identifier for ticket types\n // This handles cases where multiple ticket types share the same optionName\n const ticketKey = `${ticket.displayName || ticket.name}_${ticket.price}`\n\n if (!ticketMap[ticketKey]) {\n ticketMap[ticketKey] = {\n ticket: { ...ticket },\n availableTimeSlots: [],\n }\n }\n\n // Store both the time key and the ticket instance for this slot\n if (!ticketMap[ticketKey].availableTimeSlots.find((slot: any) => slot.timeKey === timeKey)) {\n ticketMap[ticketKey].availableTimeSlots.push({\n timeKey,\n ticketInstance: ticket,\n })\n }\n })\n })\n\n // Convert to array and sort\n const ticketsArray = Object.values(ticketMap)\n return sortBySoldOut\n ? _sortBy(_sortBy(ticketsArray, t => t.ticket.sortOrder), t => t.ticket.soldOut)\n : _sortBy(ticketsArray, t => t.ticket.sortOrder)\n }, [timeSlotGroups, sortBySoldOut])\n\n const handleTimeSlotSelect = (ticketKey: string, timeKey: string, ticketInstance: any) => {\n setSelectedTimeSlots(prev => ({\n ...prev,\n [ticketKey]: timeKey,\n }))\n\n // Reset quantity when time slot changes\n if (selectedTickets[ticketInstance.id]) {\n handleTicketSelect(ticketInstance.id, 0)\n }\n }\n\n const handleTicketSelectWithTimeSlot = (ticketKey: string, quantity: number, ticketInstance: any) => {\n const timeSlot = selectedTimeSlots[ticketKey]\n if (!timeSlot && quantity > 0) {\n return // Don't allow quantity selection without time slot\n }\n\n if (ticketInstance) {\n handleTicketSelect(ticketInstance.id, quantity)\n }\n }\n\n const symbol = _get(event, 'currency.symbol')\n const priceSymbol = currencySymbol || symbol\n\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', alignItems: 'center' }}>\n <LocalizationProvider dateAdapter={AdapterMoment}>\n <DatePicker\n value={selectedDate}\n onChange={handleDateChange}\n shouldDisableDate={isDateDisabled}\n renderInput={params => <TextField {...params} />}\n showToolbar={false}\n componentsProps={{ actionBar: { actions: [] } }}\n disablePast\n />\n </LocalizationProvider>\n {loading ? (\n <CircularProgress sx={{ marginTop: 2 }} />\n ) : (\n <Box\n sx={{\n marginTop: 2,\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n {!hideTicketsHeader && ticketsHeaderComponent}\n {uniqueTickets.map(({ ticket, availableTimeSlots }) => {\n const ticketKey = `${ticket.displayName || ticket.name}_${ticket.price}`\n const isSoldOut =\n ticket.sold_out ||\n !(ticket.displayTicket || ticket.slotGroupId) ||\n ticket.soldOut\n\n return (\n <TimeSlotTicketRow\n key={ticketKey}\n ticketKey={ticketKey}\n ticket={ticket}\n availableTimeSlots={availableTimeSlots}\n selectedTickets={selectedTickets}\n selectedTimeSlots={selectedTimeSlots}\n handleTicketSelect={handleTicketSelectWithTimeSlot}\n handleTimeSlotSelect={handleTimeSlotSelect}\n priceSymbol={priceSymbol}\n isSoldOut={isSoldOut}\n />\n )\n })}\n </Box>\n )}\n </Box>\n )\n}\n\nexport default TimeSlotsSection\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport './style.css'\n\nimport { ThemeOptions } from '@mui/material'\nimport Alert from '@mui/material/Alert'\nimport { createTheme, ThemeProvider } from '@mui/material/styles'\nimport { CSSProperties } from '@mui/styles'\nimport axios, { AxiosError } from 'axios'\nimport _filter from 'lodash/filter'\nimport _find from 'lodash/find'\nimport _flatten from 'lodash/flatten'\nimport _forEach from 'lodash/forEach'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport _includes from 'lodash/includes'\nimport _isEmpty from 'lodash/isEmpty'\nimport _map from 'lodash/map'\nimport _some from 'lodash/some'\nimport moment from 'moment-timezone'\nimport React, { ReactNode, useEffect, useRef, useState } from 'react'\nimport Button from 'react-bootstrap/Button'\n\nimport {\n addToCart,\n getCheckoutPageConfigs,\n getEvent,\n getProfileData,\n getTickets,\n postOnCheckout,\n} from '../../api'\nimport { getTimeSlotsByDate } from '../../api/common'\nimport { getPreRegistrationInfluencers } from '../../api/preRegistrationComplete'\nimport { X_TF_ECOMMERCE } from '../../constants'\nimport { useCookieListener } from '../../hooks/useCookieListener'\nimport { useLocalStorageListener } from '../../hooks/useLocalStorageListener'\nimport { usePixel } from '../../hooks/usePixel'\nimport {\n createCheckoutDataBodyWithDefaultHolder,\n getCookieByName,\n getQueryVariable,\n isBrowser,\n setLoggedUserData,\n} from '../../utils'\nimport { logoutUser } from '../../utils/auth'\nimport { Loader } from '../common/index'\nimport { PoweredBy } from '../common/PoweredBy'\nimport ConfirmModal from '../confirmModal'\nimport Countdown from '../countdown'\nimport { VerificationPendingModal } from '../idVerificationContainer/VerificationPendingModal'\nimport { LoginModal } from '../loginModal'\nimport { PreRegistration } from '../preRegistration'\nimport WaitingList from '../waitingList'\nimport { AccessCodeSection } from './AccessCodeSection'\nimport { PromoCodeSection } from './PromoCodeSection'\nimport { ReferralLogic } from './ReferralLogic'\nimport { TicketsSection } from './TicketsSection'\nimport TimeSlotsSection from './TimeSlotsSection'\n\nconst checkUserPreregistration = (preregisteredUsers: IInfluencerData[]) => {\n const isWindowDefined = typeof window !== 'undefined'\n const userDataString = isWindowDefined ? window.localStorage.getItem('user_data') : ''\n let isPreregisteredUser = false\n if (userDataString) {\n const user = JSON.parse(userDataString)\n isPreregisteredUser = _some(preregisteredUsers, item => item.email === user?.email)\n }\n return isPreregisteredUser\n}\n\ninterface TimeSlotsAttributes {\n ValidPromoCode: boolean;\n is_access_code: boolean;\n isPromotionsEnabled: boolean;\n}\n\ninterface CartSuccess {\n skip_billing_page: boolean;\n event_id: string;\n hash?: string | number;\n total?: string | number;\n hasAddOn?: boolean;\n eventSlug?: string;\n cart?: ICart[];\n currencySymbol?: string;\n}\n\nexport interface IGetTickets {\n eventId: number;\n onAddToCartSuccess: (response: CartSuccess) => void;\n getTicketsLabel?: string;\n contentStyle?: React.CSSProperties;\n onAddToCartError: (e: AxiosError) => void;\n onGetTicketsSuccess: (response: {\n data: { attributes: { tickets: ITicketData[] } };\n }) => void;\n onGetTicketsPress: () => void;\n onGetTicketsError: (e: AxiosError) => void;\n onLogoutSuccess: () => void;\n onLogoutError: (e: AxiosError) => void;\n onGetProfileDataSuccess: (response: {\n data: { attributes: { [key: string]: string | number | boolean | null } };\n }) => void;\n onGetProfileDataError: (e: AxiosError) => void;\n onLoginSuccess: () => void;\n handleNotInvitedModalClose: () => void;\n handleInvalidLinkModalClose: () => void;\n theme?: 'light' | 'dark';\n queryPromoCode?: string;\n isPromotionsEnabled?: boolean;\n themeOptions?: ThemeOptions & {\n input?: CSSProperties;\n checkbox?: CSSProperties;\n };\n isAccessCodeEnabled?: boolean;\n hideSessionButtons?: boolean;\n hideWaitingList?: boolean;\n enableBillingInfoAutoCreate?: boolean;\n isButtonScrollable?: boolean;\n sortBySoldOut?: boolean;\n disableCountdownLeadingZero?: boolean;\n isLoggedIn?: boolean;\n actionsSectionComponent?: ReactNode;\n ticketsHeaderComponent?: ReactNode;\n hideTicketsHeader?: boolean;\n tableTicketsHeaderComponent?: ReactNode;\n hideTableTicketsHeader?: boolean;\n enableInfluencersSection?: boolean;\n enableAddOns?: boolean;\n ordersPath?: string;\n showPoweredByImage?: boolean;\n promoText?: string;\n showGroupNameBlock?: boolean;\n currencySymbol?: string;\n onReserveButtonClick?: () => void;\n onPendingVerification?: () => void;\n showAlertIcons?: boolean;\n submitMode?: 'auto' | 'click';\n onPreRegistrationSuccess?: (response: any) => void;\n onPreRegistrationError?: (e: AxiosError) => void;\n onPreRegistrationGetCountriesSuccess?: (res: any) => void;\n onPreRegistrationGetCountriesError?: (e: AxiosError) => void;\n onForgotPasswordSuccess?: (res: any) => void;\n onForgotPasswordError?: (e: AxiosError) => void;\n showForgotPasswordButton?: boolean;\n logo?: string;\n}\n\nexport interface ITicket {\n id: string | number;\n [key: string]: string | number;\n}\n\ninterface IInfluencer {\n [key: string]: string | undefined;\n}\nexport interface ISelectedTickets {\n isTable: boolean;\n [key: string]: string | number | boolean;\n}\n\nexport const TicketsContainer = ({\n onLoginSuccess,\n getTicketsLabel,\n eventId,\n onAddToCartSuccess,\n contentStyle = {},\n onAddToCartError = _identity,\n onGetTicketsSuccess = _identity,\n onGetTicketsError = _identity,\n onLogoutSuccess = _identity,\n onLogoutError = _identity,\n onGetProfileDataSuccess = _identity,\n onGetProfileDataError = _identity,\n onGetTicketsPress = _identity,\n theme = 'light',\n queryPromoCode = '',\n isPromotionsEnabled = true,\n themeOptions,\n isAccessCodeEnabled = false,\n hideSessionButtons = false,\n hideWaitingList = false,\n enableBillingInfoAutoCreate = true,\n isButtonScrollable = false,\n sortBySoldOut = false,\n disableCountdownLeadingZero = false,\n isLoggedIn = false,\n actionsSectionComponent: ActionsSectionComponent,\n ticketsHeaderComponent,\n hideTicketsHeader = false,\n tableTicketsHeaderComponent,\n hideTableTicketsHeader = false,\n enableInfluencersSection = true,\n enableAddOns = true,\n handleNotInvitedModalClose = _identity,\n handleInvalidLinkModalClose = _identity,\n ordersPath,\n showPoweredByImage = false,\n promoText,\n showGroupNameBlock = false,\n currencySymbol = '',\n onReserveButtonClick = _identity,\n onPendingVerification = _identity,\n showAlertIcons = true,\n onPreRegistrationSuccess = _identity,\n onPreRegistrationError = _identity,\n onPreRegistrationGetCountriesSuccess = _identity,\n onPreRegistrationGetCountriesError = _identity,\n onForgotPasswordSuccess = _identity,\n onForgotPasswordError = _identity,\n showForgotPasswordButton = false,\n logo,\n}: IGetTickets) => {\n const [selectedTickets, setSelectedTickets] = useState({} as ISelectedTickets)\n const [isLogged, setIsLogged] = useState(Boolean(getCookieByName(X_TF_ECOMMERCE)))\n const [showLoginModal, setShowLoginModal] = useState(false)\n const [tickets, setTickets] = useState([] as ITicketData[])\n const [event, setEvent] = useState<any>(null)\n const [showWaitingList, setShowWaitingList] = useState(false)\n const [isLoading, setIsLoading] = useState(true)\n const [codeIsLoading, setCodeIsLoading] = useState(false)\n const [handleBookIsLoading, setHandleBookIsLoading] = useState(false)\n const [code, setCode] = useState(getQueryVariable('r') || queryPromoCode)\n const [showPromoInput, setShowPromoInput] = useState(false)\n const [codeIsApplied, setCodeIsApplied] = useState(false)\n const [codeIsInvalid, setCodeIsInvalid] = useState(false)\n const [showAccessCodeSection, setShowAccessCodeSection] = useState(isAccessCodeEnabled)\n const [showPromoCodeSection, setShowPromoCodeSection] = useState(isPromotionsEnabled)\n const [error, setError] = useState<string | null>(null)\n const [isNotInvitedError, setIsNotInvitedError] = useState('')\n const [isInvalidLinkError, setIsInvalidLinkError] = useState('')\n const [pendingVerificationMessage, setPendingVerificationMessage] = useState()\n const [preregisteredUsers, setPreregisteredUsers] = useState(\n [] as Array<IInfluencerData>\n )\n const [ticketsNotAvailableModalOpen, setTicketsNotAvailableModalOpen] = useState(false)\n const [isPreregistered, setIsPreregistered] = useState(\n checkUserPreregistration(preregisteredUsers)\n )\n const ticketsContainerRef = useRef<HTMLDivElement>(null)\n const pageUrl = isBrowser ? window.location.href.split('?')[0] : ''\n const isTimeSlotEvent = event?.isTimeSlotEvent\n const [availableDates, setAvailableDates] = useState<string[]>([])\n const [selectedDate, setSelectedDate] = useState<string | null>(null)\n const [timeSlotGroups, setTimeSlotGroups] = useState<{ [key: string]: any[] }>({})\n\n useCookieListener(X_TF_ECOMMERCE, value => setIsLogged(Boolean(value)))\n useLocalStorageListener('user_data', (user: any) => {\n const isPreregisteredUser = _some(\n preregisteredUsers,\n item => item.email === user?.email\n )\n setIsPreregistered(isPreregisteredUser)\n })\n usePixel(eventId, { pageUrl })\n\n useEffect(() => {\n window.localStorage.removeItem('extraData')\n }, [])\n\n useEffect(() => {\n if (eventId) {\n getTicketsApi()\n fetchPreregisteredData()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [eventId])\n\n useEffect(() => {\n setIsPreregistered(checkUserPreregistration(preregisteredUsers))\n }, [preregisteredUsers])\n\n useEffect(() => {\n if (isLogged) {\n fetchUserData()\n .then(res => {\n window.localStorage.setItem('user_data', JSON.stringify(res))\n onGetProfileDataSuccess({ data: { attributes: res } })\n })\n .catch(e => {\n if (axios.isAxiosError(e)) {\n onGetProfileDataError(e)\n }\n })\n }\n }, [isLogged])\n\n\n const handleLogout = () => {\n logoutUser({ onLogoutError, onLogoutSuccess, setIsLogged })\n }\n\n const handleExternalLogin = () => {\n setIsLogged(true)\n }\n\n const handleOnClose = () => {\n setShowLoginModal(false)\n }\n\n const handleOnLogin = () => {\n setShowLoginModal(false)\n setIsLogged(true)\n if (onLoginSuccess) {\n onLoginSuccess()\n }\n }\n\n const getTimeSlots = async (date: string | null, type?: string): Promise<void> => {\n if (!date) {\n setShowPromoCodeSection(false)\n return\n }\n\n try {\n const timeSlotsResponse = await getTimeSlotsByDate(\n eventId,\n moment(date).format('YYYY-MM-DD'),\n code\n )\n\n const groupedTickets: any = {}\n _map(timeSlotsResponse.data.attributes.timeslots, (timeslots, date) => {\n const dateKeyChunks = date.split('-')\n const dateKey = [dateKeyChunks[0], dateKeyChunks[1], dateKeyChunks[2]].join('-')\n\n _forEach(timeslots, ticketList => {\n if (!groupedTickets[dateKey]) {\n groupedTickets[dateKey] = []\n }\n groupedTickets[dateKey] = groupedTickets[dateKey].concat(ticketList)\n })\n })\n\n setTimeSlotGroups(groupedTickets)\n setShowPromoCodeSection(true)\n\n const attributes: TimeSlotsAttributes = timeSlotsResponse?.data?.attributes\n\n if (type === 'promo') {\n setCodeIsApplied(attributes.ValidPromoCode)\n setCodeIsInvalid(!attributes.ValidPromoCode)\n setCode('')\n window.localStorage.setItem('appliedPromoCode', code)\n setShowAccessCodeSection(attributes.is_access_code)\n setShowPromoCodeSection(attributes.isPromotionsEnabled)\n }\n } catch (error) {}\n }\n\n async function getTicketsApi(isUpdatingCode?: boolean, type?: string) {\n try {\n if (isUpdatingCode) {\n setCodeIsLoading(true)\n } else {\n setIsLoading(true)\n }\n\n const previewKey = getQueryVariable('pk') || undefined\n const eventResponse = await getEvent(eventId, previewKey)\n if (eventResponse.success) {\n const event = eventResponse.data.attributes\n setEvent(event)\n\n if (event.country && isBrowser) {\n window.localStorage.setItem('eventCountry', event.country)\n }\n\n if (event.isTimeSlotEvent) {\n getTimeSlots(selectedDate, code)\n // For timeslots we shouldn't fetch all tickets at once\n setAvailableDates(event?.timeslotSettings?.availableDates ?? [])\n return\n }\n }\n\n const response = await getTickets(eventId, code, previewKey)\n\n if (response.success) {\n const attributes = response?.data?.attributes\n type === 'promo' && setCodeIsApplied(attributes.ValidPromoCode)\n type === 'promo' && setCodeIsInvalid(!attributes.ValidPromoCode)\n setTickets(attributes.tickets)\n setShowWaitingList(attributes.showWaitingList)\n onGetTicketsSuccess({\n data: { attributes: { tickets: response.data.attributes.tickets } },\n })\n setCode('')\n window.localStorage.setItem('appliedPromoCode', code)\n setShowAccessCodeSection(attributes.is_access_code)\n setShowPromoCodeSection(attributes.isPromotionsEnabled)\n }\n } catch (e) {\n if (axios.isAxiosError(e)) {\n onGetTicketsError(e)\n setError(_get(e, 'response.data.message', ''))\n window.localStorage.removeItem('appliedPromoCode')\n }\n } finally {\n setIsLoading(false)\n setCodeIsLoading(false)\n }\n }\n\n async function fetchPreregisteredData() {\n try {\n const preregistrationData = await getPreRegistrationInfluencers({\n eventId,\n })\n setPreregisteredUsers(preregistrationData.data.attributes.influencers)\n } catch (error) {\n if (axios.isAxiosError(error)) {\n setError(_get(error, 'response.data.message', ''))\n }\n }\n }\n\n const handleTicketSelect = (key: string, value: number | string, isTable = false) => {\n localStorage.setItem('selectedTicketsQuantity', value.toString())\n setSelectedTickets(prevState => {\n // Allow multiple ticket types to be selected simultaneously when flag is enabled\n if (event?.allowMultipleTicketTypePurchases === true) {\n // Check if we're switching between tables and regular tickets\n const hasExistingSelection = Object.keys(prevState).some(k => k !== 'isTable')\n const switchingTicketType = hasExistingSelection && prevState.isTable !== isTable\n\n // If switching from tables to regular tickets or vice versa, clear all selections\n if (switchingTicketType && Number(value) > 0) {\n return {\n [key]: value,\n isTable,\n }\n }\n\n // If value is 0, remove this ticket from selection\n if (!value || Number(value) === 0) {\n const newState = { ...prevState }\n delete newState[key]\n // If no ticket keys remain (only isTable left), return empty state\n const ticketKeys = Object.keys(newState).filter(k => k !== 'isTable')\n if (ticketKeys.length === 0) {\n return { isTable: false } as ISelectedTickets\n }\n return { ...newState, isTable: prevState.isTable }\n }\n\n // If value > 0, add or update this ticket while keeping others of the same type selected\n return {\n ...prevState,\n [key]: value,\n isTable,\n }\n }\n\n // Default behavior: only one ticket type at a time\n if (Object.keys(prevState)[0] !== key && !value) {\n return prevState\n }\n return {\n [key]: value,\n isTable,\n }\n })\n }\n\n const handleOrdersClick = () => {\n if (isBrowser) {\n window.location.href = ordersPath ?? '/orders'\n }\n }\n\n const onErrorClose = () => {\n setError(null)\n }\n\n const handleBook = async () => {\n const timeSlotTickets = _flatten(_map(timeSlotGroups, slots => slots))\n\n setHandleBookIsLoading(true)\n\n // Unified flow: works for both single and multiple ticket types\n const ticketsList = event?.isTimeSlotEvent ? timeSlotTickets : tickets\n\n // Get all selected ticket IDs with quantity > 0 (excluding 'isTable' key)\n const selectedTicketIds = Object.keys(selectedTickets).filter(\n key => key !== 'isTable' && Number(selectedTickets[key]) > 0\n )\n\n // Build ticket_types object with all selected tickets (works for 1 or N tickets)\n const ticketTypesData: any = {}\n let totalProductCartQuantity = 0\n let firstTicket: ITicket | null = null\n\n selectedTicketIds.forEach(ticketId => {\n const ticket = _find(ticketsList || [], item => String(item.id) === ticketId) as ITicket\n if (ticket) {\n if (!firstTicket) firstTicket = ticket\n const optionName = _get(ticket, 'optionName')\n const quantity = +selectedTickets[ticketId]\n totalProductCartQuantity += quantity\n\n ticketTypesData[ticketId] = {\n product_options: {\n [optionName]: ticketId,\n ticket_price: ticket.price,\n },\n quantity,\n }\n }\n })\n\n if (!firstTicket) {\n setHandleBookIsLoading(false)\n return\n }\n\n const firstOptionName = _get(firstTicket, 'optionName')\n const firstTicketId = _get(firstTicket, 'id')\n\n const data: ICartRequestData = {\n attributes: {\n alternative_view_id: null,\n product_cart_quantity: totalProductCartQuantity,\n product_options: {\n [firstOptionName]: firstTicketId,\n },\n product_id: eventId,\n ticket_types: ticketTypesData,\n },\n }\n\n try {\n onGetTicketsPress()\n const result = await addToCart(eventId, data)\n const pageConfigsDataResponse = enableAddOns\n ? await getCheckoutPageConfigs()\n : {\n status: 200,\n data: { attributes: _get(result, 'data.attributes') },\n }\n\n if (pageConfigsDataResponse.status === 200) {\n const pageConfigsData: any =\n _get(pageConfigsDataResponse, 'data.attributes') || {}\n\n const skipBillingPage = pageConfigsData.skip_billing_page ?? false\n const hasAddOn = pageConfigsData.has_add_on ?? false\n const freeTicket = pageConfigsData.free_ticket ?? false\n\n let hash: string | number | undefined = ''\n let total: string | number | undefined = ''\n\n isBrowser && window.localStorage.removeItem('add_ons')\n isBrowser && window.localStorage.removeItem('checkoutAdditionalConfigs')\n\n if (skipBillingPage && !hasAddOn) {\n // Get user data for checkout data\n const userData =\n isBrowser && window.localStorage.getItem('user_data')\n ? JSON.parse(window.localStorage.getItem('user_data') || '{}')\n : {}\n\n const checkoutBody = createCheckoutDataBodyWithDefaultHolder(\n totalProductCartQuantity,\n userData\n )\n\n const checkoutResponse = enableBillingInfoAutoCreate\n ? await postOnCheckout(checkoutBody, freeTicket)\n : null\n\n hash = checkoutResponse?.data?.attributes?.hash || ''\n total = checkoutResponse?.data?.attributes?.total || ''\n }\n\n onAddToCartSuccess({\n skip_billing_page: skipBillingPage,\n event_id: String(eventId),\n hash,\n total,\n hasAddOn,\n eventSlug: event?.slug,\n cart: pageConfigsDataResponse.data.attributes.cart,\n currencySymbol: event?.currency.symbol,\n })\n }\n } catch (e) {\n const errorResponse: any = _get(e, 'response', {})\n if (errorResponse?.data?.data?.hasUnverifiedOrder) {\n setPendingVerificationMessage(errorResponse?.data?.message)\n } else if (axios.isAxiosError(e)) {\n onAddToCartError(e)\n const message = _get(e, 'response.data.message', '')\n const isInvalidLinkError = _includes(\n message,\n 'No more of this ticket type are available right now'\n )\n const isNotInvitedError = _includes(\n message,\n 'You must have been invited to this event to attend'\n )\n\n if (isInvalidLinkError) {\n setIsInvalidLinkError(message)\n } else if (isNotInvitedError) {\n setIsNotInvitedError(message)\n } else {\n setError(message)\n }\n }\n } finally {\n setHandleBookIsLoading(false)\n }\n }\n\n const updateTickets = (isUpdatingCode?: boolean, type?: string) => {\n getTicketsApi(isUpdatingCode, type)\n }\n\n const fetchUserData = async () => {\n const userDataResponse = await getProfileData()\n const profileData = _get(userDataResponse, 'data')\n const profileDataObj = setLoggedUserData(profileData)\n return profileDataObj\n }\n\n const isTicketOnSale = event?.isTimeSlotEvent\n ? true\n : _some(\n tickets,\n item =>\n (item.salesStarted || event?.presalesStarted) &&\n !item.salesEnded &&\n !item.soldOut\n )\n\n const eventHasTickets = !_isEmpty(tickets)\n const isSalesClosed = event?.salesEnded\n\n const themeMui = createTheme(themeOptions)\n\n useEffect(() => {\n window.document.addEventListener('custom-login', handleExternalLogin)\n window.document.addEventListener('custom-logout', handleLogout)\n\n return () => {\n window.document.removeEventListener('custom-login', handleExternalLogin)\n window.document.removeEventListener('custom-logout', handleLogout)\n }\n }, [])\n\n const handleGetTicketClick = () => {\n if (\n !handleBookIsLoading &&\n !_isEmpty(selectedTickets) &&\n Number(Object.values(selectedTickets)[0]) > 0\n ) {\n handleBook()\n } else {\n if (isButtonScrollable && ticketsContainerRef && ticketsContainerRef.current) {\n ticketsContainerRef.current.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'nearest',\n })\n }\n }\n }\n\n const handleNotAvailableTicketsClick = () => {\n if (!_isEmpty(selectedTickets)) {\n setTicketsNotAvailableModalOpen(true)\n }\n }\n\n const bookButtonIsDisabled =\n (handleBookIsLoading ||\n _isEmpty(selectedTickets) ||\n Object.values(selectedTickets)[0] === 0) &&\n !event?.flagSeatMapAllowed\n\n const isTicketAvailable = _some(\n tickets,\n ticket =>\n ticket.displayTicket &&\n !ticket.soldOut &&\n (ticket.salesStarted || (event?.presalesStarted && !event?.presalesEnded))\n )\n\n const wrappedActionsSectionComponent = React.isValidElement(ActionsSectionComponent)\n ? React.cloneElement(ActionsSectionComponent as React.ReactElement<any>, {\n handleGetTicketClick,\n isTicketOnSale,\n isTicketAvailable,\n })\n : null\n\n const externalUrl = event?.redirectUrl\n const eventSaleIsNotStarted =\n !event?.salesStarted && event?.salesStart && !isTicketAvailable\n const influencers = event?.referralsEnabled ? event?.referrals : []\n\n const canShowGetTicketBtn = () => {\n if (\n !wrappedActionsSectionComponent &&\n !eventSaleIsNotStarted &&\n isTicketOnSale &&\n !event?.salesEnded &&\n !externalUrl\n ) {\n return true\n }\n\n return false\n }\n\n const onClose = (value: string) => {\n if (value === 'notInvited') {\n handleNotInvitedModalClose()\n } else if (value === 'invalidLink') {\n handleInvalidLinkModalClose()\n }\n setIsNotInvitedError('')\n setIsInvalidLinkError('')\n }\n const hideTopInfluencers = event?.hideTopInfluencers\n const isSeatMapAllowed = _get(event, 'seatMapAllowed', false)\n const isTableMapEnabled = _get(event, 'tableMapEnabled', false)\n\n const notAvailableTicketsMessage = `Tickets for this event are not available until ${moment(\n event?.salesStart\n ).format(\n 'dddd, DD MMMM YYYY'\n )}. \\n If you pre-registered, log into your account first to buy your pre-sale ticket.`\n\n const tableTickets = _filter(tickets, (ticket: any) => ticket.isTable)\n const ordinaryTickets = {} as ITicket\n _forEach(tickets, (ticket: any, key: string) => {\n if (!ticket.isTable) {\n ordinaryTickets[key] = ticket\n }\n })\n\n\n // Check if event is in pre-registration mode\n const isPreRegistrationMode =\n event?.preregEnabled &&\n event?.preregStarted &&\n !event?.preregEnded\n\n return (\n <ThemeProvider theme={themeMui}>\n {!isLoading && <ReferralLogic eventId={eventId} />}\n <div className={`get-tickets-page ${theme} open-ground`} style={contentStyle}>\n {isInvalidLinkError && (\n <ConfirmModal\n message={isInvalidLinkError}\n hideCancelBtn={true}\n onClose={() => onClose('invalidLink')}\n onConfirm={() => onClose('invalidLink')}\n />\n )}\n {isNotInvitedError && (\n <ConfirmModal\n hideCancelBtn={true}\n message={isNotInvitedError}\n onClose={() => onClose('notInvited')}\n onConfirm={() => onClose('notInvited')}\n // loading={removeFromResaleLoading}\n />\n )}\n {error && (\n <Alert\n severity=\"error\"\n onClose={onErrorClose}\n variant=\"filled\"\n style={{ width: '350px' }}\n >\n {error}\n </Alert>\n )}\n {ticketsNotAvailableModalOpen && (\n <ConfirmModal\n message={notAvailableTicketsMessage}\n hideCancelBtn={true}\n onClose={() => onClose('invalidLink')}\n onConfirm={() => setTicketsNotAvailableModalOpen(false)}\n />\n )}\n {isLoading ? (\n <Loader />\n ) : isPreRegistrationMode ? (\n <PreRegistration\n eventId={eventId}\n isPreregistrationStarted={event?.preregStarted}\n logo={logo}\n showForgotPasswordButton={showForgotPasswordButton}\n onClose={() => {}}\n onLogin={onLoginSuccess}\n onLoginButtonClick={() => {}}\n onLoginSuccess={onLoginSuccess}\n onConfirmationSuccess={onPreRegistrationSuccess}\n onConfirmationError={onPreRegistrationError}\n onGetCountriesSuccess={onPreRegistrationGetCountriesSuccess}\n onGetCountriesError={onPreRegistrationGetCountriesError}\n onForgotPasswordSuccess={onForgotPasswordSuccess}\n onForgotPasswordError={onForgotPasswordError}\n themeOptions={themeOptions}\n />\n ) : (\n <div ref={ticketsContainerRef} className=\"tickets-section-container\">\n {isTimeSlotEvent && (\n <TimeSlotsSection\n event={event}\n eventId={eventId}\n availableDates={availableDates}\n selectedDate={selectedDate}\n setSelectedDate={setSelectedDate}\n timeSlotGroups={timeSlotGroups}\n setTimeSlotGroups={setTimeSlotGroups}\n selectedTickets={selectedTickets}\n handleTicketSelect={handleTicketSelect}\n sortBySoldOut={sortBySoldOut}\n ticketsHeaderComponent={ticketsHeaderComponent}\n hideTicketsHeader={hideTicketsHeader}\n showGroupNameBlock={showGroupNameBlock}\n currencySymbol={currencySymbol}\n isSeatMapAllowed={isSeatMapAllowed}\n getTimeSlots={getTimeSlots}\n />\n )}\n {!isSalesClosed && !isTimeSlotEvent && (\n <TicketsSection\n event={event}\n ticketsList={ordinaryTickets}\n tableTickets={tableTickets}\n selectedTickets={selectedTickets}\n handleTicketSelect={handleTicketSelect}\n sortBySoldOut={sortBySoldOut}\n ticketsHeaderComponent={ticketsHeaderComponent}\n tableTicketsHeaderComponent={tableTicketsHeaderComponent}\n hideTableTicketsHeader={hideTableTicketsHeader || _isEmpty(tableTickets)}\n hideTicketsHeader={hideTicketsHeader || _isEmpty(ordinaryTickets)}\n showGroupNameBlock={showGroupNameBlock}\n currencySymbol={currencySymbol}\n isSeatMapAllowed={isSeatMapAllowed}\n />\n )}\n {externalUrl ? null : isSalesClosed ? (\n <p\n className={`event-closed-message ${\n !isLoggedIn ? 'event-closed-on-bottom' : ''\n }`}\n >\n Sales for this event are closed.\n </p>\n ) : eventSaleIsNotStarted ? (\n <Countdown\n startDate={event.salesStart}\n timezone={event.timezone}\n title=\"Sales start in:\"\n message=\"No tickets are currently available for this event.\"\n showMessage={!eventHasTickets}\n callback={updateTickets}\n disableLeadingZero={disableCountdownLeadingZero}\n isLoggedIn={isLoggedIn}\n />\n ) : null}\n {event?.enableWaitingList &&\n showWaitingList &&\n event.salesStarted &&\n !hideWaitingList && (\n <WaitingList\n tickets={ordinaryTickets}\n eventId={eventId}\n defaultMaxQuantity={event.waitingListMaxQuantity}\n />\n )}\n {codeIsLoading ? (\n <Loader />\n ) : isSalesClosed ? null : showAccessCodeSection ? (\n <AccessCodeSection\n code={code}\n setCode={setCode}\n updateTickets={updateTickets}\n />\n ) : showPromoCodeSection ? (\n <PromoCodeSection\n code={code}\n codeIsApplied={codeIsApplied}\n setCodeIsApplied={setCodeIsApplied}\n showPromoInput={showPromoInput}\n setShowPromoInput={setShowPromoInput}\n setCode={setCode}\n updateTickets={updateTickets}\n codeIsInvalid={codeIsInvalid}\n setCodeIsInvalid={setCodeIsInvalid}\n promoText={promoText}\n showAlertIcons={showAlertIcons}\n />\n ) : null}\n {wrappedActionsSectionComponent}\n {canShowGetTicketBtn() && (\n <Button\n aria-hidden={true}\n className={`book-button\n ${bookButtonIsDisabled ? 'disabled' : ''}\n ${isButtonScrollable ? 'is-scrollable' : ''}\n ${!isLoggedIn ? 'on-bottom' : ''}\n `}\n onClick={\n event?.salesStart &&\n event?.presalesStarted &&\n !event?.presalesEnded &&\n (!isPreregistered || !isLogged)\n ? handleNotAvailableTicketsClick\n : handleGetTicketClick\n }\n >\n {selectedTickets.isTable\n ? 'RESERVE TABLES'\n : getTicketsLabel || 'GET TICKETS'}\n </Button>\n )}\n {isSeatMapAllowed && !event?.salesEnded && isTicketAvailable && (\n <Button\n className=\"reserve-button\"\n aria-hidden={true}\n onClick={onReserveButtonClick}\n >\n {isTableMapEnabled ? 'Select on map' : 'Select your seats'}\n </Button>\n )}\n {isLogged && !hideSessionButtons ? (\n <div className=\"session-wrapper\">\n <span className=\"session-container\">\n <Button\n variant=\"outline-light\"\n className=\"session-buttons\"\n onClick={handleOrdersClick}\n >\n My Orders\n </Button>\n </span>\n <span className=\"session-container\">\n <Button\n variant=\"outline-light\"\n className=\"session-buttons\"\n onClick={handleLogout}\n >\n Log out\n </Button>\n </span>\n </div>\n ) : (\n ''\n )}\n </div>\n )}\n {showLoginModal ? (\n <LoginModal onClose={handleOnClose} onLogin={handleOnLogin} showForgotPasswordButton />\n ) : null}\n </div>\n {showPoweredByImage ? <PoweredBy /> : null}\n {enableInfluencersSection && !hideTopInfluencers && influencers.length ? (\n <div className=\"event-influencers\">\n <h3>\n <span>TOP</span> INFLUENCERS\n </h3>\n <ol className=\"influencer-list\">\n {influencers.map((influencer: IInfluencer, i: number) => (\n <li className=\"influencer-item\" key={i}>\n {`${influencer.firstName} ${influencer.lastName?.charAt(0)}`}{' '}\n </li>\n ))}\n </ol>\n </div>\n ) : null}\n <VerificationPendingModal\n message={pendingVerificationMessage}\n onClose={() => {\n onPendingVerification()\n }}\n />\n </ThemeProvider>\n )\n}\n","import _map from 'lodash/map'\nimport moment from 'moment-timezone'\nimport React from 'react'\n\nconst EventInfoItem = ({ image, name }: EventInfoTypes) => (\n <div className=\"event-info\">\n <img src={image} alt=\"event\" />\n {name}\n </div>\n)\n\nconst tableConfig = (columns?: IColumnData[], key?: string) => {\n let config\n\n if (columns?.length) {\n return {\n header: _map(columns, item => item.label),\n body: _map(columns, item => {\n if (item.component) {\n const ItemComponent = item.component\n return (row: RowItems) => ({\n columnProps: item,\n component: <ItemComponent {...row} />,\n })\n }\n\n if (item.key === 'event') {\n return (row: RowItems) => ({\n columnProps: item,\n component: <EventInfoItem image={row.image} name={row.eventName} />,\n })\n }\n\n if (item.key === 'total') {\n return (row: RowItems) => ({\n columnProps: item,\n component: row.currency + row.amount,\n })\n }\n\n return (row: RowItems) => ({\n columnProps: item,\n component: item.normalizer\n ? item.normalizer(row[item.key as keyof RowItems])\n : row[item.key as keyof RowItems],\n })\n }) as ITableBodyType[],\n }\n }\n\n switch (key) {\n default:\n config = {\n header: ['Order No.', 'Date', 'Event', 'Total'],\n body: [\n (row: RowItems) => ({\n columnProps: {} as IColumnData,\n component: row.id,\n }),\n (row: RowItems) => ({\n columnProps: {} as IColumnData,\n component: row.timezone\n ? moment.tz(row.date, row.timezone).format('DD MMMM YYYY')\n : row.date,\n }),\n (row: RowItems) => ({\n columnProps: {} as IColumnData,\n component: <EventInfoItem image={row.image} name={row.eventName} />,\n }),\n (row: RowItems) => ({\n columnProps: {} as IColumnData,\n component: row.currency + row.amount,\n }),\n ] as ITableBodyType[],\n }\n }\n return config\n}\n\nexport default tableConfig\n","import TableCell from '@mui/material/TableCell'\nimport TableRow from '@mui/material/TableRow'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport React from 'react'\n\nimport tableConfig from './tableConfig'\n\nconst Row = ({\n row,\n handleDetailsInfo,\n columns = [],\n hideDetailsButton,\n}: RowPropsTypes) => (\n <TableRow sx={{ '& > *': { borderBottom: 'unset' } }}>\n {tableConfig(columns).body.map((column: ITableBodyType, index: number) => (\n <TableCell\n component=\"th\"\n scope=\"row\"\n key={index}\n onClick={e => {\n const { columnProps, component }: IRowReturnType = column(row)\n const onCellClick = columnProps?.onCellClick || _identity\n const componentProps = _get(component, 'props', {})\n\n onCellClick(componentProps, e)\n }}\n >\n {column(row).component}\n </TableCell>\n ))}\n {!hideDetailsButton && (\n <TableCell component=\"th\" scope=\"row\">\n <button\n type=\"button\"\n className=\"order-details-button\"\n onClick={() => handleDetailsInfo(row.id)}\n >\n Details\n </button>\n </TableCell>\n )}\n </TableRow>\n)\n\nexport default Row\n","import React from 'react'\nimport FormGroup from '@mui/material/FormGroup'\nimport FormControlLabel from '@mui/material/FormControlLabel'\nimport Radio from '@mui/material/Radio';\nimport { FieldInputProps } from 'formik'\nimport { useTheme } from '@mui/styles'\n\nexport interface IRadioField {\n label: string | number | JSX.Element;\n field?: FieldInputProps<any>;\n}\n\ninterface IOtherProps {\n [key: string]: any;\n}\n\nexport const RadioField = ({\n label,\n field,\n theme,\n disableDropdown,\n ...rest\n}: IRadioField & IOtherProps) => {\n const customTheme: any = useTheme()\n return (\n <FormGroup>\n <FormControlLabel\n control={<Radio {...field} {...rest} />}\n label={label}\n componentsProps={{\n typography: customTheme?.checkbox\n }}\n />\n </FormGroup>\n )\n}\n","import './style.css'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport CircularProgress from '@mui/material/CircularProgress'\nimport Modal from '@mui/material/Modal'\nimport { Field, Form, Formik } from 'formik'\nimport React from 'react'\nimport SVG from 'react-inlinesvg'\nimport * as yup from 'yup'\n\nimport EmailSvg from '../../assets/images/email.svg'\nimport UserSvg from '../../assets/images/user.svg'\nimport { CheckboxField } from '../common/CheckboxField'\nimport { CustomField } from '../common/CustomField'\nimport { RadioField } from '../common/RadioField'\nimport { ITicketTypes } from '../orderDetailsContainer/ticketsTable'\n\ninterface Props {\n ticket: ITicketTypes;\n onClose: () => void;\n onSubmit: (values: InitialValuesTypes) => void;\n loading?: boolean;\n}\n\nexport interface InitialValuesTypes {\n to: string;\n first_name: string;\n last_name: string;\n email: string;\n confirm_email: string;\n confirm: boolean;\n}\n\nconst style: React.CSSProperties = {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n minWidth: 480,\n backgroundColor: '#e3e3e3',\n border: '1px solid white',\n outline: 'none',\n padding: '14px',\n maxHeight: '85vh',\n overflow: 'auto'\n}\n\nconst schema = yup.object().shape({\n to: yup.string().required(),\n first_name: yup.string().when('to', {\n is: (to: string) => to === 'friend',\n then: yup.string().required('First Name is required')\n }),\n last_name: yup.string().when('to', {\n is: (to: string) => to === 'friend',\n then: yup.string().required('Last Name is required')\n }),\n email: yup.string().when('to', {\n is: (to: string) => to === 'friend',\n then: yup.string().email('Invalid email').required('Email is required')\n }),\n confirm_email: yup.string().when('to', {\n is: (to: string) => to === 'friend',\n then: yup.string().email('Invalid email').oneOf([yup.ref('email'), null], 'Emails must match').required('Confirm Email is required')\n }),\n confirm: yup.boolean().oneOf([true])\n})\n\nconst initialValues: InitialValuesTypes = {\n to: 'friend',\n first_name: '',\n last_name: '',\n email: '',\n confirm_email: '',\n confirm: false\n}\n\nexport const TicketResaleModal = ({\n ticket = {} as ITicketTypes,\n onClose = () => { },\n onSubmit = () => { },\n loading = false\n}: Props) => {\n const { hash, holder_name, event_name, currency, retain_amount_on_sale, ticket_type_is_active } = ticket\n\n return (\n <Modal\n open={true}\n onClose={onClose}\n aria-labelledby=\"modal-modal-title\"\n aria-describedby=\"modal-modal-description\"\n className='resale-modal'\n >\n <Box style={style}>\n <h3>Sell Ticket</h3>\n <div>\n <h3>Ticket Details</h3>\n <div>\n <h4>Event</h4>\n <p>{event_name}</p>\n </div>\n <div>\n <h4>Ticket Holder</h4>\n <p>{holder_name}</p>\n </div>\n <div>\n <h4>Ticket ID</h4>\n <p>{hash}</p>\n </div>\n </div>\n <div>\n <h3>Sell to Whom</h3>\n <Formik\n initialValues={initialValues}\n validationSchema={schema}\n onSubmit={onSubmit}\n >\n {({ values, isValid, dirty }) => (\n <Form>\n <div>\n <Field\n name='to'\n label='I want to sell the ticket to someone I know'\n type='radio'\n value='friend'\n component={RadioField}\n />\n {values.to === 'friend' && (\n <div className='sell-to-friend'>\n <div className='user-info-box'>\n <div className='field-box'>\n <div className='icon'>\n <SVG\n src={UserSvg}\n width='24'\n height='24'\n />\n </div>\n <Field\n name='first_name'\n label='First Name'\n type='text'\n component={CustomField}\n />\n </div>\n <div className='field-box'>\n <div className='empty-box' />\n <Field\n name='last_name'\n label='Last Name'\n type='text'\n component={CustomField}\n />\n </div>\n </div>\n <div className='email-info-box'>\n <div className='field-box'>\n <div className='icon'>\n <SVG\n src={EmailSvg}\n width='24'\n height='24'\n />\n </div>\n <Field\n name='email'\n label='Email address'\n type='text'\n component={CustomField}\n />\n </div>\n <div className='field-box'>\n <div className='empty-box' />\n <Field\n name='confirm_email'\n label='Confirm Email address'\n type='text'\n component={CustomField}\n />\n </div>\n </div>\n </div>\n )}\n </div>\n {ticket_type_is_active && (\n <div>\n <Field\n name=\"to\"\n label=\"I will sell my ticket to anyone who wants to buy it\"\n type=\"radio\"\n value=\"anyone\"\n component={RadioField}\n />\n </div>\n )}\n <div>\n <h4>Terms of Resale</h4>\n <p>I confirm that I want to sell this ticket and that, if someone chooses to buy it, I will no longer own it or have the right to ask for it back.</p>\n <p>I also understand that, if no one chooses to buy it, it remains my property, is valid for entry to <strong>{event_name}</strong> and I will not receive any refund.</p>\n <p>If my ticket is sold, the original card I used to buy my ticket will be refunded with the original amount paid, minus a small handling fee of <strong>{`${currency ?? ''} ${retain_amount_on_sale ?? '0'}`}</strong>, and that any existing refunds due to me for referring sales for this event are no longer valid.</p>\n <Field\n name='confirm'\n label='I agree'\n type='checkbox'\n component={CheckboxField}\n />\n </div>\n <div className=\"resale-action-button\">\n <Button\n type=\"submit\"\n disabled={!(isValid && dirty)}\n >\n {loading ? <CircularProgress size=\"22px\" /> : 'Sell Ticket'}\n </Button>\n </div>\n </Form>\n )}\n </Formik>\n </div>\n </Box>\n </Modal>\n )\n}\n","import { Field, Form, Formik, FormikProps } from 'formik'\nimport _identity from 'lodash/identity'\nimport React from 'react'\n\nimport { fieldDataAdapter } from '../../adapters/customFields'\nimport {\n getFieldComponent,\n getFieldLabel,\n getValidateFunctions,\n} from '../billing-info-container/utils'\nimport { CustomFieldTypes } from './index'\n\ninterface HolderCustomFieldsProps {\n initialValues: { [key: string]: any };\n fields: Array<CustomFieldTypes>;\n handleFormSubmit?: (values: Record<string, any>) => void;\n handleFormClose?: () => void;\n}\n\nconst CustomFieldsForm = ({\n initialValues = {},\n fields = [],\n handleFormSubmit = _identity,\n handleFormClose = _identity,\n}: HolderCustomFieldsProps) => (\n <Formik\n initialValues={initialValues}\n onSubmit={values => handleFormSubmit(values)}\n enableReinitialize={true}\n >\n {(props: FormikProps<any>) => (\n <Form>\n <div className=\"updatable-custom-fields\">\n {fields.map((customField: CustomFieldTypes) => {\n const adaptedCustomField = fieldDataAdapter(customField)\n return (\n <Field\n key={customField.id}\n name={customField.name}\n label={getFieldLabel(customField)}\n component={getFieldComponent(adaptedCustomField)}\n validate={getValidateFunctions(\n customField,\n [],\n props.values,\n props.errors\n )}\n isMultiple={adaptedCustomField.isMultiple}\n radios={adaptedCustomField.radios}\n options={adaptedCustomField.options}\n />\n )\n })}\n </div>\n <div className=\"buttons-block\">\n <button\n className=\"cancel-btn\"\n type=\"button\"\n onClick={() => {\n props.resetForm()\n handleFormClose()\n }}\n >\n Cancel\n </button>\n <button className=\"submit-btn\" type=\"submit\">\n Update ticket\n </button>\n </div>\n </Form>\n )}\n </Formik>\n)\n\nexport { CustomFieldsForm }\n","import _isArray from 'lodash/isArray'\nimport _isEmpty from 'lodash/isEmpty'\n\nimport { CustomFieldOption, CustomFieldTypes } from '../index'\n\nconst getLabelForValue = (options: CustomFieldOption[], value: string | string[]): string => {\n const getLabel = (singleValue: string) => {\n const option = options.find(option => option.value === singleValue)\n return option ? option.name : ''\n }\n\n if (_isArray(value)) {\n const labels = value.map(getLabel)\n return labels.join(', ')\n }\n\n return getLabel(value as string)\n}\n\nexport const renderCustomFieldValue = (customField: CustomFieldTypes) => {\n if (customField.type === 'checkbox') {\n return customField.value ? 'Checked' : 'Unchecked'\n }\n\n if (_isEmpty(customField.value)) {\n return 'N/A'\n }\n\n if (customField.type === 'select' || customField.type === 'select_multi' || customField.type === 'radio') {\n return getLabelForValue(customField.options as CustomFieldOption[], customField.value)\n }\n\n return customField.value\n}\n\nexport const isFieldUpdatable = (field: CustomFieldTypes): boolean => {\n if (!field?.settings?.allowUpdate || (field?.type === 'checkbox' && field?.required)) {\n return false\n }\n return true\n}\n\nexport const createCustomFieldsUpdateBody = (\n updatedValues: Record<string, any>,\n notUpdatableCustomFieldsValues: Array<CustomFieldTypes> = []\n) =>\n notUpdatableCustomFieldsValues.reduce(\n (acc, customField) => {\n if (!isFieldUpdatable(customField)) {\n acc[customField.name] = customField.value\n }\n return acc\n },\n { ...updatedValues }\n )\n","import _identity from 'lodash/identity'\nimport _isEmpty from 'lodash/isEmpty'\nimport React, { useMemo, useState } from 'react'\nimport SVG from 'react-inlinesvg'\n\nimport EditSvg from '../../assets/images/edit.svg'\nimport { CustomFieldsForm } from './CustomFieldsForm'\nimport { CustomFieldTypes } from './index'\nimport { ITicketTypes } from './ticketsTable'\nimport {\n createCustomFieldsUpdateBody,\n isFieldUpdatable,\n renderCustomFieldValue,\n} from './utils'\n\ninterface HolderCustomFieldsProps {\n ticket: ITicketTypes;\n holderCustomFields: CustomFieldTypes[];\n handleTicketHoldersUpdate: (values: Record<string, any>, ticketHash: string) => void;\n}\n\nconst TicketHolderCustomFields = ({\n ticket,\n holderCustomFields,\n handleTicketHoldersUpdate = _identity,\n}: HolderCustomFieldsProps) => {\n const [showHolderCustomFieldsSection, setShowHolderCustomFieldsSection] =\n useState(false)\n\n const [allowedHolderCustomFields, notAllowedHolderCustomFields] = useMemo(() => {\n const allowedFields: CustomFieldTypes[] = []\n const notAllowedFields: CustomFieldTypes[] = []\n\n holderCustomFields.forEach((field: CustomFieldTypes) => {\n if (isFieldUpdatable(field)) {\n allowedFields.push(field)\n } else {\n notAllowedFields.push(field)\n }\n })\n return [allowedFields, notAllowedFields]\n }, [holderCustomFields])\n\n const holderEditableFieldsFormInitialValues = useMemo(\n () => getHolderCustomFieldsInitialValues(holderCustomFields),\n [holderCustomFields]\n )\n\n const handleFormClose = () => {\n setShowHolderCustomFieldsSection(false)\n }\n\n const handleForSubmit = (values: Record<string, any>) => {\n // Collect all updatable and non updatable values for bulk update\n const fullUpdatableValues = createCustomFieldsUpdateBody(\n values,\n notAllowedHolderCustomFields\n )\n setShowHolderCustomFieldsSection(false)\n handleTicketHoldersUpdate(fullUpdatableValues, ticket.hash)\n }\n\n function getHolderCustomFieldsInitialValues(fields: Array<CustomFieldTypes>) {\n const initialValues: { [key: string]: string | boolean | string[] } = {}\n\n for (const field of fields) {\n if (isFieldUpdatable(field)) {\n initialValues[field.name] =\n field.type === 'checkbox' ? Boolean(field.value) : field.value || ''\n }\n }\n return initialValues\n }\n\n return (\n <>\n <div className=\"holder-custom-fields\">\n {!_isEmpty(allowedHolderCustomFields) && <SVG src={EditSvg} onClick={() => setShowHolderCustomFieldsSection(true)} />}\n {holderCustomFields.map((customField: CustomFieldTypes) => (\n <div className=\"info-item\" key={customField.id}>\n <b>{customField.label} :</b> {renderCustomFieldValue(customField)}\n </div>\n ))}\n </div>\n {showHolderCustomFieldsSection && (\n <div className=\"custom-fields-block show\">\n <p className=\"editable-ticket-id\">Edit ticket {ticket.hash}</p>\n <CustomFieldsForm\n initialValues={holderEditableFieldsFormInitialValues}\n fields={allowedHolderCustomFields}\n handleFormSubmit={handleForSubmit}\n handleFormClose={handleFormClose}\n />\n </div>\n )}\n </>\n )\n}\n\nexport { TicketHolderCustomFields }\n","import CircularProgress from '@mui/material/CircularProgress'\nimport Paper from '@mui/material/Paper'\nimport Table from '@mui/material/Table'\nimport TableBody from '@mui/material/TableBody'\nimport TableCell from '@mui/material/TableCell'\nimport TableContainer from '@mui/material/TableContainer'\nimport TableHead from '@mui/material/TableHead'\nimport TableRow from '@mui/material/TableRow'\nimport _identity from 'lodash/identity'\nimport _isEmpty from 'lodash/isEmpty'\nimport _map from 'lodash/map'\nimport React, { Fragment, useState } from 'react'\n\nimport { downloadPDF } from '../../utils'\nimport SnackbarAlert from '../common/SnackbarAlert'\nimport { CustomFieldTypes } from './index'\nimport { TicketHolderCustomFields } from './TicketHolderCustomFields'\n\ninterface IAddOnTypes {\n name: string;\n groupName: string;\n status: string;\n}\n\nexport interface ITicketTypes {\n add_ons?: IAddOnTypes[];\n hash: string;\n ticket_type: string;\n holder_name: string;\n status: string;\n pdf_link: string;\n is_sellable: boolean;\n is_on_sale?: boolean;\n event_name: string;\n currency: string;\n ticket_type_hash: string;\n ticket_type_is_active?: boolean;\n canSellTicket?: boolean;\n retain_amount_on_sale: number | string;\n ticketsTitle: string;\n}\n\nexport interface IActionColumns {\n download?: boolean;\n sell_ticket?: boolean;\n}\n\ninterface TicketsTableTypes {\n canSellTicket?: boolean;\n tickets: ITicketTypes[];\n columns: Array<{\n id?: string | number;\n key: keyof ITicketTypes & keyof IActionColumns;\n label: string | number | null | undefined;\n }>;\n handleSellTicket: (ticket: ITicketTypes) => void;\n handleRemoveFromResale: (ticket: ITicketTypes) => void;\n handleTicketHoldersUpdate: (values: Record<string, any>, ticketHash: string) => void;\n\n icon?: string;\n displayColumnNameInRow?: boolean;\n ticketsTitle?: string;\n ticketHoldersCustomFields?: Array<CustomFieldTypes>;\n}\n\ntype PdfDownload = {\n hash: string;\n loading: boolean;\n}\n\nconst TicketsTable = ({\n tickets = [],\n columns = [],\n icon = '',\n displayColumnNameInRow = false,\n canSellTicket = true,\n ticketsTitle = 'Your Tickets',\n ticketHoldersCustomFields = [],\n handleSellTicket = _identity,\n handleRemoveFromResale = _identity,\n handleTicketHoldersUpdate = _identity,\n}: TicketsTableTypes) => {\n const [pdfError, setPdfError] = useState<string | null>(null)\n const [pdfDownload, setPdfDownload] = useState<PdfDownload>({\n hash: '',\n loading: false,\n })\n\n const getRow = (ticket: ITicketTypes) =>\n _map(columns, (column, columnIndex) => {\n if (column.key === 'download') {\n const ticketIsDownloading =\n pdfDownload.loading && pdfDownload.hash === ticket.hash\n\n if (!ticket.pdf_link || ticket.status === 'Sold' || ticket.is_on_sale)\n return <TableCell key={columnIndex}>{null}</TableCell>\n\n return (\n <TableCell key={columnIndex}>\n {Boolean(icon) && <img src={icon} alt=\"nodata\" />}\n <span\n aria-hidden={true}\n className=\"action-button\"\n onClick={async () => {\n if (ticketIsDownloading) {\n return\n }\n\n setPdfDownload({ hash: ticket.hash, loading: true })\n try {\n const pdfDownloadError = await downloadPDF(ticket.pdf_link)\n if (pdfDownloadError) {\n setPdfError(pdfDownloadError?.message)\n }\n } catch (err) {\n if (err && typeof err === 'string') {\n setPdfError(err)\n }\n } finally {\n setPdfDownload({ hash: '', loading: false })\n }\n }}\n >\n {ticketIsDownloading ? <CircularProgress size=\"22px\" /> : 'Download'}\n </span>\n </TableCell>\n )\n }\n\n if (column.key === 'sell_ticket') {\n return (\n <TableCell key={columnIndex}>\n {ticket.is_sellable && canSellTicket && (\n <span\n aria-hidden={true}\n className=\"action-button\"\n onClick={() => handleSellTicket(ticket)}\n >\n Sell Ticket\n </span>\n )}\n {ticket.is_on_sale && (\n <span\n aria-hidden={true}\n className=\"action-button\"\n onClick={() => handleRemoveFromResale(ticket)}\n >\n Remove from Resale\n </span>\n )}\n </TableCell>\n )\n }\n\n return displayColumnNameInRow ? (\n <TableCell key={columnIndex}>\n <div className=\"cell-block\">\n <span>{column.label}</span>\n <span>{ticket[column.key]}</span>\n </div>\n </TableCell>\n ) : (\n <TableCell key={columnIndex}>\n <div className=\"cell-block\">\n <span>{ticket[column.key]}</span>\n </div>\n </TableCell>\n )\n })\n\n return (\n <div className=\"tickets-box\">\n <SnackbarAlert\n type=\"error\"\n isOpen={!!pdfError}\n message={pdfError || ''}\n onClose={() => setPdfError(null)}\n />\n <h4 className=\"sub-title tickets-title\">{ticketsTitle}</h4>\n <TableContainer component={Paper}>\n <Table aria-label=\"collapsible table\">\n {displayColumnNameInRow ? null : (\n <TableHead>\n <TableRow>\n {_map(columns, item => (\n <TableCell key={item.key}>{item.label || ''}</TableCell>\n ))}\n </TableRow>\n </TableHead>\n )}\n <TableBody>\n {tickets.map((ticket: ITicketTypes, index: number) => {\n const holderCustomFields = ticketHoldersCustomFields.filter(\n (field: CustomFieldTypes) => field?.ticketHash === ticket?.hash\n )\n\n return (\n <Fragment key={index}>\n <TableRow>{getRow(ticket)}</TableRow>\n {!_isEmpty(holderCustomFields) && (\n <TableRow>\n <TableCell colSpan={columns.length}>\n <TicketHolderCustomFields\n ticket={ticket}\n holderCustomFields={holderCustomFields}\n handleTicketHoldersUpdate={handleTicketHoldersUpdate}\n />\n </TableCell>\n </TableRow>\n )}\n {!!ticket.add_ons?.length && (\n <TableRow>\n <TableCell colSpan={6}>\n <Table className=\"ticket-add-on-table\">\n <TableHead>\n <TableRow>\n <TableCell>Add-On</TableCell>\n <TableCell>Status</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {ticket.add_ons.map((add_on: IAddOnTypes, index: number) => (\n <TableRow key={index}>\n <TableCell>\n {add_on.groupName && `${add_on.groupName}: `}{' '}\n {add_on.name}\n </TableCell>\n <TableCell>{add_on.status}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableCell>\n </TableRow>\n )}\n </Fragment>\n )\n })}\n </TableBody>\n </Table>\n </TableContainer>\n </div>\n )\n}\n\nexport default TicketsTable\n","import './style.css'\n\nimport { CircularProgress } from '@mui/material'\nimport axios, { AxiosError } from 'axios'\nimport { Field, Form, Formik } from 'formik'\nimport _identity from 'lodash/identity'\nimport React, { FC, useState } from 'react'\nimport * as Yup from 'yup'\n\nimport { resetPassword } from '../../api'\nimport { CustomField } from '../common/CustomField'\n\ninterface IResetPasswordProps {\n token?: string;\n onResetPasswordSuccess?: (res: any) => void;\n onResetPasswordError?: (e: AxiosError) => void;\n}\n\nconst Schema = Yup.object().shape({\n password: Yup.string()\n .min(8, 'Password must have 8+ characters')\n .required('Required')\n .matches(\n new RegExp('^(?=.*[@$!%*#?&])'),\n 'Password must contain at least one special character'\n ),\n password_confirmation: Yup.string()\n .required('Required')\n .oneOf([Yup.ref('password'), null], 'Passwords must match'),\n})\n\nexport const ResetPasswordContainer: FC<IResetPasswordProps> = ({\n token: tokenProps = '',\n onResetPasswordSuccess = _identity,\n onResetPasswordError = _identity,\n}) => {\n const [loading, setLoading] = useState(false)\n return (\n <div className=\"reset-password\">\n <div className=\"title\">Change Password</div>\n <Formik\n initialValues={{ password: '', password_confirmation: '' }}\n validationSchema={Schema}\n onSubmit={async (values: any) => {\n try {\n setLoading(true)\n let token\n if (tokenProps) {\n token = tokenProps\n } else {\n if (typeof window !== 'undefined') {\n const params: URLSearchParams = new URL(`${window.location}`).searchParams\n token = params.get('token')\n }\n }\n\n const payload = {\n token,\n ...values,\n }\n const res = await resetPassword(payload)\n onResetPasswordSuccess(res)\n } catch (e) {\n if (axios.isAxiosError(e)) {\n onResetPasswordError(e)\n }\n } finally {\n setLoading(false)\n }\n }}\n >\n {({ isValid, dirty }) => (\n <Form>\n <div className=\"body\">\n <div className=\"field-item\">\n <Field\n name=\"password\"\n label=\"New Password\"\n type=\"password\"\n component={CustomField}\n />\n </div>\n <div className=\"field-item\">\n <Field\n name=\"password_confirmation\"\n label=\"Confirm Password\"\n type=\"password\"\n component={CustomField}\n />\n </div>\n </div>\n <div className=\"action-button\">\n <button type=\"submit\" disabled={!(isValid && dirty)}>\n {loading ? <CircularProgress size=\"22px\" /> : 'Submit'}\n </button>\n </div>\n </Form>\n )}\n </Formik>\n </div>\n )\n}\n","import axios, { AxiosError } from 'axios'\nimport { Field, Form, Formik } from 'formik'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport React, { FC, useState } from 'react'\n\nimport { authorize, getProfileData } from '../../api'\nimport { combineValidators, emailValidator, requiredValidator } from '../../validators'\nimport { CustomField } from '../common'\nimport { PoweredBy } from '../common/PoweredBy'\n\nexport interface ILoginFormProps {\n alreadyHasUser?: boolean;\n userExpired?: boolean;\n\n onLoginSuccess?: (res: IProfileData) => void;\n onLoginError?: (e: AxiosError) => void;\n\n onGetProfileDataSuccess?: (res: IProfileData) => void;\n onGetProfileDataError?: (e: AxiosError) => void;\n\n onForgotPasswordButtonClick?: () => void;\n onSignupButtonClick?: () => void;\n\n logo?: string;\n showForgotPasswordButton?: boolean;\n showSignUpButton?: boolean;\n showPoweredByImage?: boolean;\n registerUrl?: string;\n}\n\n// interface IUserData {\n// id: string;\n// firstName: string;\n// lastName: string;\n// email: string;\n// city?: string;\n// country?: string;\n// countryId?: string;\n// phone?: string;\n// streetAddress?: string;\n// state?: string;\n// zip?: string;\n// zipCode?: string;\n// stateId?: string;\n// }\n\nexport const setLoggedUserData = (data: IProfileData) => ({\n id: data.id,\n first_name: data.firstName,\n last_name: data.lastName,\n email: data.email,\n confirmEmail: data.email,\n city: data?.city || '',\n country: data?.countryId || '',\n phone: data?.phone || '',\n street_address: data?.streetAddress || '',\n state: data?.stateId || '',\n zip: data?.zipCode || '',\n})\n\nexport const LoginForm: FC<ILoginFormProps> = ({\n alreadyHasUser = false,\n userExpired = false,\n\n onLoginSuccess = _identity,\n onLoginError = _identity,\n\n onGetProfileDataSuccess = _identity,\n onGetProfileDataError = _identity,\n\n onForgotPasswordButtonClick = _identity,\n onSignupButtonClick = _identity,\n\n logo,\n showForgotPasswordButton = false,\n showSignUpButton = false,\n showPoweredByImage = false,\n registerUrl = 'https://www.ticketfairy.com/register',\n}) => {\n const [error, setError] = useState('')\n return (\n <div className=\"login-modal\">\n <Formik\n initialValues={{ email: '', password: '' }}\n onSubmit={async ({ email, password }) => {\n try {\n const body = { email, password }\n const authRes = await authorize(body)\n let profileResponse = null\n try {\n profileResponse = await getProfileData()\n onGetProfileDataSuccess(_get(profileResponse, 'data'))\n } catch (e) {\n if (axios.isAxiosError(e)) {\n onGetProfileDataError(e)\n }\n return\n }\n\n const profileSpecifiedData = _get(profileResponse, 'data')\n const profileDataObj = setLoggedUserData(profileSpecifiedData)\n if (typeof window !== 'undefined') {\n window.localStorage.setItem('user_data', JSON.stringify(profileDataObj))\n const event = new window.CustomEvent('tf-login')\n window.document.dispatchEvent(event)\n }\n onLoginSuccess(_get(authRes, 'data'))\n } catch (e) {\n if (axios.isAxiosError(e)) {\n const error = _get(e, 'response.data.message') || 'Error'\n setError(error)\n onLoginError(e)\n } else if (e instanceof Error) {\n setError(e?.message || 'Error')\n }\n }\n }}\n >\n {props => (\n <Form onSubmit={props.handleSubmit}>\n <div className=\"modal-title\">Login</div>\n <div className=\"login-logo-container\">\n <img\n className=\"login-logo-tff\"\n src={\n logo ||\n 'https://www.ticketfairy.com/resources/images/logo-ttf-black.svg'\n }\n alt=\"logo\"\n />\n </div>\n <div className=\"server_auth__error\">{error}</div>\n {alreadyHasUser && (\n <p className=\"info-text-for-login\">\n It appears this email is already attached to an account. Please log in\n here to complete your registration.\n </p>\n )}\n {userExpired && (\n <p className=\"info-text-for-login\">\n Your session has expired, please log in again.\n </p>\n )}\n <div className=\"login-modal-body\">\n <div className=\"login-modal-body__email\">\n <Field\n name=\"email\"\n label=\"Email\"\n type=\"email\"\n component={CustomField}\n validate={combineValidators(requiredValidator, emailValidator)}\n />\n </div>\n <div className=\"login-modal-body__password\">\n <Field\n name=\"password\"\n label=\"Password\"\n type=\"password\"\n component={CustomField}\n validate={requiredValidator}\n />\n </div>\n <div className=\"login-action-button\">\n <button type=\"submit\">Login</button>\n </div>\n {showForgotPasswordButton && (\n <div className=\"forgot-password\">\n <span aria-hidden=\"true\" onClick={onForgotPasswordButtonClick}>\n Forgot password?\n </span>\n </div>\n )}\n {showSignUpButton && (\n <div className=\"forgot-password\">\n {onSignupButtonClick !== _identity ? (\n <span\n aria-hidden=\"true\"\n onClick={onSignupButtonClick}\n style={{ cursor: 'pointer' }}\n >\n Sign up\n </span>\n ) : (\n <a\n href={registerUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Sign up\n </a>\n )}\n </div>\n )}\n {showPoweredByImage ? <PoweredBy /> : null}\n </div>\n </Form>\n )}\n </Formik>\n </div>\n )\n}\n","import { FormikValues } from 'formik'\nimport _isEmpty from 'lodash/isEmpty'\nimport _map from 'lodash/map'\n\nimport { isBrowser } from '../../../../utils'\nimport { combineValidators, requiredValidator } from '../../../../validators'\n\nexport const getValidateFunctions = ({\n element,\n values,\n}: {\n element: IFormField;\n values: FormikValues;\n}) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const validationFunctions: any[] = []\n if (element.required) {\n validationFunctions.push(requiredValidator)\n }\n\n if (element.onValidate) {\n validationFunctions.push(element.onValidate)\n }\n\n if (element.name === 'confirmEmail') {\n const isSameEmail = (confirmEmail?: string) =>\n values.email !== confirmEmail\n ? 'Please confirm your email address correctly'\n : null\n validationFunctions.push(isSameEmail)\n }\n\n if (element.name === 'confirmPassword') {\n const isSame = (confirmPassword?: string) =>\n values.password !== confirmPassword\n ? 'Password confirmation does not match'\n : null\n\n validationFunctions.push(isSame)\n }\n\n return combineValidators(...validationFunctions)\n}\n\nexport const updateFormFieldsAttributes = (\n formFields: IFormFieldsSection[],\n attributes?: IFieldAttribute\n) => {\n if (attributes && !_isEmpty(attributes)) {\n const updatedFormFields = _map(formFields, fieldSection => {\n const fieldSectionAttributes = attributes[fieldSection.name] || {}\n\n const updatedFields = _map(fieldSection.fields, fieldItem => {\n const fieldItemAttributes = attributes[fieldItem.name] || {}\n return { ...fieldItem, ...fieldItemAttributes }\n })\n\n return {\n ...fieldSection,\n ...fieldSectionAttributes,\n fields: updatedFields,\n }\n })\n\n return updatedFormFields\n }\n return formFields\n}\n\nexport const getFieldClassNames = (id: string, existingClassNames: string) => {\n if (isBrowser) {\n const elem = document && document.getElementById(id)\n\n if ((elem?.parentElement?.clientWidth || 0) < 375) {\n return existingClassNames + ' full-width'\n }\n }\n\n return existingClassNames\n}\n\nexport const insertHTML = (elementId: string, text = '') => {\n if (isBrowser) {\n const elem = document && document.getElementById(elementId)\n\n if (!elem?.childNodes.length) {\n elem?.insertAdjacentHTML('afterbegin', text)\n }\n }\n\n return null\n}\n","import { Field, FormikValues } from 'formik'\nimport _identity from 'lodash/identity'\nimport _map from 'lodash/map'\nimport React, { FC } from 'react'\n\nimport { replaceVarInString } from '../../../utils'\nimport {\n CheckboxField,\n CustomField,\n DatePickerField,\n PhoneNumberField,\n SelectField,\n} from '../index'\nimport { getFieldClassNames, getValidateFunctions, insertHTML } from './utils'\n\nexport interface IFieldsSectionProps {\n formFields?: IFormFieldsSection[];\n values: FormikValues;\n setFieldValue: (\n field: string,\n value: FormikValues | string | number,\n shouldValidate?: boolean | undefined\n ) => void;\n disableField?: string;\n countries?: { [key: string]: string | number }[];\n states?: { [key: string]: string | number }[];\n theme?: 'dark' | 'light';\n containerClass?: string;\n setPhoneValidationIsLoading?: (isLoading: boolean) => void;\n onFieldChange?: (name: string, value: string | number) => void;\n}\n\nconst SectionContainer: FC<{ className: string }> = ({\n children,\n className,\n}) => <div className={className}>{children}</div>\n\nexport const FieldsSection = ({\n formFields = [],\n countries = [],\n states = [],\n values,\n setFieldValue,\n theme,\n containerClass = '',\n setPhoneValidationIsLoading = _identity,\n onFieldChange = _identity,\n disableField,\n}: IFieldsSectionProps) => (\n <>\n {_map(formFields, (item, index) => {\n const {\n name,\n groupLabel,\n groupLabelVars = [],\n groupLabelClassName,\n groupClassName = '',\n fields,\n } = item\n return (\n <SectionContainer key={name} className={groupClassName}>\n <span id={`group_label_${index}`} className={groupLabelClassName}>\n {typeof groupLabel === 'string'\n ? insertHTML(\n `group_label_${index}`,\n replaceVarInString(groupLabel, groupLabelVars)\n )\n : groupLabel}\n </span>\n <div className={`fields-container ${groupClassName}`}>\n {_map(fields, (fieldData, fieldIndex) => {\n const {\n name,\n label,\n className = 'full-width',\n type,\n component,\n options = [],\n required,\n } = fieldData\n const id = `${name}-${fieldIndex}`\n const classNames = `${containerClass}-container__field ${className}`\n return (\n component || (\n <div\n key={name}\n id={id}\n className={getFieldClassNames(id, classNames)}\n >\n <Field\n disabled={name === disableField || name === 'state' && !states.length}\n name={name}\n label={`${label}${required ? '' : ' (optional)'}`}\n type={type}\n validate={name === 'state' && !states.length ? false : getValidateFunctions({\n element: fieldData,\n values,\n })}\n setFieldValue={setFieldValue}\n component={\n type === 'checkbox'\n ? CheckboxField\n : type === 'select'\n ? SelectField\n : type === 'phone'\n ? PhoneNumberField\n : type === 'date'\n ? DatePickerField\n : CustomField\n }\n options={\n name === 'country'\n ? countries\n : name === 'state'\n ? states\n : options\n }\n theme={theme}\n setPhoneValidationIsLoading={\n type === 'phone'\n ? setPhoneValidationIsLoading\n : undefined\n }\n onChange={(e: React.FormEvent<EventTarget>) => {\n const element = e.target as HTMLInputElement\n const { value } = element\n setFieldValue(name, value)\n onFieldChange(name, value)\n }}\n disableDropdown={fieldData.disableDropdown}\n />\n </div>\n )\n )\n })}\n </div>\n </SectionContainer>\n )\n })}\n </>\n)\n","import _map from 'lodash/map'\n\nexport const collectStates = (states: any) => {\n const mappedStates = _map(states, (item, key) => ({\n label: item,\n value: key,\n }))\n\n return mappedStates\n}\n","import React from 'react'\n\nimport { CONFIGS } from '../../utils'\n\nexport const formDefaultFields: IFormFieldsSection[] = [\n {\n name: 'basic-info',\n groupLabel: 'Create your account.',\n groupLabelClassName: '',\n groupClassName: '',\n fields: [\n {\n className: 'half-width',\n name: 'firstName',\n label: 'First Name',\n type: 'text',\n required: true,\n onValidate: null,\n },\n {\n className: 'half-width',\n name: 'lastName',\n label: 'Last Name',\n type: 'text',\n required: true,\n onValidate: null,\n },\n {\n name: 'email',\n label: 'Email',\n type: 'email',\n required: true,\n onValidate: null,\n },\n {\n name: 'confirmEmail',\n label: 'Confirm Email',\n type: 'email',\n required: true,\n onValidate: null,\n },\n ],\n },\n {\n name: 'billing-info',\n groupLabel: '',\n groupLabelClassName: '',\n groupClassName: '',\n fields: [\n {\n className: 'half-width',\n name: 'zip',\n label: 'Post Code/Zip',\n type: 'text',\n required: true,\n onValidate: null,\n },\n {\n className: 'half-width',\n name: 'country',\n label: 'Country',\n type: 'select',\n required: true,\n onValidate: null,\n },\n ],\n },\n {\n name: 'password-info',\n groupLabel: (\n <div className=\"email-info-block\">\n <span>Choose a password for your new</span>\n <b> {CONFIGS.CLIENT_NAME || 'Mana Common'} </b>\n <span>account</span>\n </div>\n ),\n groupLabelClassName: '',\n groupClassName: '',\n fields: [\n {\n className: 'half-width',\n name: 'password',\n label: 'Password',\n type: 'password',\n required: true,\n onValidate: null,\n },\n {\n className: 'half-width',\n name: 'confirmPassword',\n label: 'Confirm Password',\n type: 'password',\n required: true,\n onValidate: null,\n },\n ],\n },\n]\n","import { Button, CircularProgress } from '@mui/material'\nimport axios, { AxiosError } from 'axios'\nimport { Form, Formik, FormikValues } from 'formik'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport _map from 'lodash/map'\nimport React, { FC, useEffect, useState } from 'react'\n\nimport { getCountries, getProfileData, getStates, register } from '../../api'\nimport { CONFIGS, getFormInitialValues, getQueryVariable } from '../../utils'\nimport { FieldsSection } from '../common/FieldSection'\nimport { updateFormFieldsAttributes } from '../common/FieldSection/utils'\nimport ConfirmModal from '../confirmModal'\nimport { collectStates } from './adapters'\nimport { formDefaultFields } from './constants'\n\ninterface IRegistrationProps {\n formFields?: Array<IFormFieldsSection>;\n additionalFieldAttribute?: IFieldAttribute;\n registrationType: string;\n onGetCountriesSuccess?: (res: any) => void;\n onGetCountriesError?: (e: AxiosError) => void;\n onRegisterAccountSuccess?: (res: any) => void;\n onRegisterAccountError?: (e: AxiosError) => void;\n onGetStatesSuccess?: (res: any) => void;\n onGetStatesError?: (e: AxiosError) => void;\n customerEmail: string;\n}\n\nexport const RegistrationForm: FC<IRegistrationProps> = ({\n formFields,\n additionalFieldAttribute,\n registrationType,\n customerEmail,\n onGetCountriesSuccess = _identity,\n onGetCountriesError = _identity,\n onRegisterAccountSuccess = _identity,\n onRegisterAccountError = _identity,\n onGetStatesSuccess = _identity,\n onGetStatesError = _identity,\n}) => {\n const [errorMessage, setErrorMessage] = useState('')\n const [countries, setCountries] = useState<{ [key: string]: string | number }[]>([])\n const [states, setStates] = useState<{ [key: string]: string | number }[]>([])\n const [phoneValidationIsLoading, setPhoneValidationIsLoading] = useState(false)\n const [showErrorModal, setshowErrorModal] = useState(false)\n\n const updatedFormFields = updateFormFieldsAttributes(\n formFields || formDefaultFields,\n additionalFieldAttribute\n )\n\n // Fetch countries data\n const fetchCountries = async () => {\n try {\n const res = await getCountries()\n setCountries(\n _map(res.data, item => ({\n label: item.name,\n value: item.id,\n }))\n )\n onGetCountriesSuccess(res.data)\n } catch (e) {\n if (axios.isAxiosError(e)) {\n const errorMessage = _get(e, 'response.data.message') || 'Error'\n setErrorMessage(errorMessage)\n onGetCountriesError(e)\n }\n }\n }\n\n // Fetch states data\n const fetchStates = async (countryId?: string | number) => {\n try {\n const fetchCountryId = countryId ? countryId : '1'\n const res = await getStates(fetchCountryId)\n const states = _get(res, 'data', [])\n const mappedStates = collectStates(states)\n setStates(mappedStates)\n onGetStatesSuccess(res.data)\n } catch (e) {\n if (axios.isAxiosError(e)) {\n const errorMessage = _get(e, 'response.data.message', {}) as AxiosError\n onGetStatesError(errorMessage)\n }\n }\n }\n\n const handleRegisterAccount = async (values: FormikValues) => {\n const accessHash = getQueryVariable('hash') || ''\n\n try {\n const bodyFormData = new FormData()\n\n bodyFormData.append('first_name', values.firstName)\n bodyFormData.append('last_name', values.lastName)\n bodyFormData.append('email', values.email)\n bodyFormData.append('zip', values.zip)\n bodyFormData.append('city', values.city)\n bodyFormData.append('country', values.country)\n bodyFormData.append('password', values.password)\n bodyFormData.append('phone', values.phone || '')\n bodyFormData.append('password_confirmation', values.confirmPassword)\n bodyFormData.append('client_id', CONFIGS.CLIENT_ID)\n bodyFormData.append('client_secret', CONFIGS.CLIENT_SECRET)\n bodyFormData.append('register_for', registrationType)\n bodyFormData.append('delegation_access_hash', accessHash)\n\n await register(bodyFormData)\n const profileRes = await getProfileData()\n\n window.localStorage.setItem('user_data', JSON.stringify(_get(profileRes, 'data')))\n onRegisterAccountSuccess(profileRes)\n } catch (e) {\n if (axios.isAxiosError(e)) {\n console.log(e)\n const errorMessage = _get(e, 'response.data.message') || 'Error'\n onRegisterAccountError(e)\n setshowErrorModal(true)\n setErrorMessage(errorMessage)\n } else if (e instanceof Error) {\n setErrorMessage(e?.message || 'Error')\n }\n }\n }\n\n useEffect(() => {\n fetchCountries()\n fetchStates()\n }, [])\n\n return (\n <div className=\"register-form-container\">\n <h2>Create an account</h2>\n <div className=\"register-sub-title\">\n To manage your tickets, please create an account:\n </div>\n {showErrorModal && (\n <ConfirmModal\n hideCancelBtn={true}\n message={errorMessage}\n onClose={() => (window.location.href = '/')}\n onConfirm={() => (window.location.href = '/')}\n />\n )}\n {errorMessage && <div className=\"register-error\">{errorMessage}</div>}\n <Formik\n initialValues={{\n ...getFormInitialValues(updatedFormFields),\n email: customerEmail,\n }}\n enableReinitialize={true}\n onSubmit={handleRegisterAccount}\n >\n {props => (\n <Form>\n <div className=\"register-body\">\n <FieldsSection\n disableField={'email'}\n containerClass=\"register\"\n formFields={updatedFormFields}\n values={props.values}\n setFieldValue={props.setFieldValue}\n setPhoneValidationIsLoading={setPhoneValidationIsLoading}\n countries={countries}\n states={states}\n onFieldChange={(name, value) => {\n if (name === 'country') {\n fetchStates(value)\n }\n }}\n />\n </div>\n <div className=\"button-container\">\n <Button\n className=\"register-button\"\n type=\"submit\"\n disabled={props.isSubmitting || phoneValidationIsLoading}\n >\n {props.isSubmitting ? <CircularProgress size={26} /> : 'Create Account'}\n </Button>\n </div>\n </Form>\n )}\n </Formik>\n </div>\n )\n}\n","/* eslint-disable max-len */\nexport const VERIFICATION_STATUSES = {\n PENDING: 'PENDING',\n APPROVED: 'APPROVED_VERIFIED',\n FAILED: 'FAILED',\n WRONG_CUSTOMER: 'WRONG_CUSTOMER',\n}\n\nexport const VERIFICATION_PROVIDERS = {\n JUMIO: 'jumio',\n STRIPE: 'stripe'\n}\n\nexport const TRANSACTION_STATUSES = {\n ERROR: 'ERROR',\n SUCCESS: 'SUCCESS',\n}\n\nexport const VERIFICATION_MESSAGES = {\n PENDING:\n 'Your ID verification is currently being processed. We will notify you as soon as it is completed. Thank you for your patience.',\n APPROVED: 'Your ID verification is approved!',\n FAILED: 'Unfortunately your ID verification has failed. Please try again.',\n WRONG_CUSTOMER: 'The order does not belong to the customer.',\n}\n\nexport const DELEGATION_ACCESS_ERROR = 'Delegation Access not found'\n","import { CircularProgress } from '@mui/material'\nimport { Field, Form, Formik } from 'formik'\nimport _identity from 'lodash/identity'\nimport React from 'react'\n\nimport { requiredValidator } from '../../validators'\nimport { CheckboxField, SelectField } from '../common'\nimport { CustomField } from '../common/CustomField'\nimport { getValidateFunctions } from '../common/FieldSection/utils'\n\nexport interface IIssueTicketForm {\n classNamePrefix?: string;\n handleSubmit: (values: any, resetForm: any) => void;\n selectTicketTypeOptions: Array<any>;\n initialValues?: any;\n}\n\nconst IssueTicketForm = ({\n classNamePrefix = 'delegations',\n handleSubmit = _identity,\n selectTicketTypeOptions,\n initialValues,\n}: IIssueTicketForm) => (\n <div className={`${classNamePrefix}-issue-form`}>\n <Formik\n initialValues={initialValues}\n onSubmit={(values, { resetForm, setSubmitting }) => {\n delete values.confirm\n handleSubmit(values, { resetForm, setSubmitting })\n }}\n >\n {({ isValid, values, isSubmitting }) => (\n <Form>\n <div className=\"body\">\n <div className=\"field-item\">\n <div className=\"field_label\">Ticket Type</div>\n <Field\n name=\"ticketTypeId\"\n label=\"Ticket Type\"\n component={SelectField}\n validate={requiredValidator}\n options={selectTicketTypeOptions}\n />\n </div>\n <div className=\"field-item\">\n <div className=\"field_label\">Name</div>\n <Field\n name=\"firstName\"\n label=\"Name\"\n component={CustomField}\n validate={requiredValidator}\n />\n </div>\n <div className=\"field-item\">\n <div className=\"field_label\">Last Name</div>\n <Field\n name=\"lastName\"\n label=\"Last Name\"\n component={CustomField}\n validate={requiredValidator}\n />\n </div>\n <div className=\"field-item\">\n <div className=\"field_label\">Email</div>\n <Field\n name=\"email\"\n label=\"Email\"\n component={CustomField}\n validate={requiredValidator}\n />\n </div>\n <div className=\"field-item\">\n <div className=\"field_label\">Confirm Email</div>\n <Field\n name=\"confirmEmail\"\n label=\"Confirm Email\"\n component={CustomField}\n validate={getValidateFunctions({\n element: {\n name: 'confirmEmail',\n label: 'Confirm Email',\n required: true,\n },\n values,\n })}\n />\n </div>\n </div>\n <div className=\"field-item checkbox_item\">\n <Field\n name=\"confirm\"\n label=\"I agree to ManaCommon's privacy policy\"\n type=\"checkbox\"\n validate={requiredValidator}\n component={CheckboxField}\n />\n </div>\n <div className=\"action-button\">\n <button type=\"submit\" disabled={!isValid}>\n {isSubmitting ? <CircularProgress size=\"22px\" /> : 'Issue Ticket'}\n </button>\n </div>\n </Form>\n )}\n </Formik>\n </div>\n)\n\nexport default IssueTicketForm\n","import Table from '@mui/material/Table'\nimport TableBody from '@mui/material/TableBody'\nimport TableCell from '@mui/material/TableCell'\nimport TableContainer from '@mui/material/TableContainer'\nimport TableHead from '@mui/material/TableHead'\nimport TableRow from '@mui/material/TableRow'\nimport React from 'react'\n\nexport interface ITicketsAssignedTable {\n tableTitle?: string;\n classNamePrefix?: string;\n noTicketsAssignedText?: string;\n issuePageData: {\n tickets: Array<any>;\n };\n}\n\nconst TicketsAssignedTable = ({\n tableTitle = 'Tickets assigned',\n classNamePrefix = 'delegations',\n issuePageData,\n noTicketsAssignedText = \"You haven't issued any tickets yet.\",\n}: ITicketsAssignedTable) => (\n <div className={`${classNamePrefix}-tables-block`}>\n <div className={`${classNamePrefix}-ticket-holder`}>{tableTitle}</div>\n {issuePageData.tickets?.length ? (\n <TableContainer className=\"my-ticket-table\">\n <Table aria-label=\"collapsible table\">\n <TableHead>\n <TableRow>\n <TableCell key={'Ticket Holder'}>{'Ticket Holder'}</TableCell>\n <TableCell key={'Ticket Type'}>{'Ticket Type'}</TableCell>\n <TableCell key={'Status'}>{'Status'}</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {issuePageData.tickets?.map((ticket: any) => (\n <TableRow key={ticket.id}>\n <TableCell key={ticket.id + 'type'}>\n {ticket.firstName + ' ' + ticket.lastName}\n </TableCell>\n <TableCell key={ticket.id + 'ticketType'}>{ticket.ticketType}</TableCell>\n <TableCell key={ticket.id + 'status'}>{ticket.status}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n ) : (\n noTicketsAssignedText\n )}\n </div>\n)\n\nexport default TicketsAssignedTable\n","import Table from '@mui/material/Table'\nimport TableBody from '@mui/material/TableBody'\nimport TableCell from '@mui/material/TableCell'\nimport TableContainer from '@mui/material/TableContainer'\nimport TableHead from '@mui/material/TableHead'\nimport TableRow from '@mui/material/TableRow'\nimport _map from 'lodash/map'\nimport React from 'react'\n\nimport { IDelegationsTicketType } from '../../api/guestTicketDelegation'\n\nexport interface ITicketsAvailableTable {\n tableTitle?: string;\n classNamePrefix?: string;\n issuePageData: {\n ticketTypes: IDelegationsTicketType;\n };\n}\n\nconst TicketsAvailableTable = ({\n tableTitle = 'Tickets available',\n classNamePrefix = 'delegations',\n issuePageData,\n}: ITicketsAvailableTable) => (\n <div className={`${classNamePrefix}-tables-block`}>\n <div className={`${classNamePrefix}-ticket-holder`}>{tableTitle}</div>\n <TableContainer className=\"my-ticket-table\">\n <Table aria-label=\"collapsible table\">\n <TableHead>\n <TableRow>\n <TableCell key={1}>{'Ticket Type'}</TableCell>\n <TableCell key={2}>{'Total Quantity'}</TableCell>\n <TableCell key={3}>{'Quantity Issued'}</TableCell>\n <TableCell key={4}>{'Quantity Remaining'}</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {_map(issuePageData.ticketTypes, (val, key) => (\n <TableRow key={key}>\n <TableCell key={key + 'name'}>{val.optionValue}</TableCell>\n <TableCell key={key + 'maxQty'}>{val.delegationMaxQuantity}</TableCell>\n <TableCell key={key + 'issued'}>{val.delegationQuantityIssued}</TableCell>\n <TableCell key={key + 'remaining'}>\n {Number(val.delegationMaxQuantity) - Number(val.delegationQuantityIssued)}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n </div>\n)\n\nexport default TicketsAvailableTable\n","import axios, { AxiosError } from 'axios'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport _map from 'lodash/map'\nimport React, { useEffect, useState } from 'react'\n\nimport { IDelegationsData, IDelegationsTicketType } from '../../api/guestTicketDelegation'\nimport { getDelegationTickets, issueTicket } from '../../api/index'\nimport { CONFIGS, getQueryVariable } from '../../utils'\nimport { Loader } from '../common'\nimport ConfirmModal from '../confirmModal'\nimport { DELEGATION_ACCESS_ERROR } from '../idVerificationContainer/constants'\nimport IssueTicketForm from './IssueTicketForm'\nimport TicketsAssignedTable from './TicketsAssignedTable'\nimport TicketsAvailableTable from './TicketsAvailableTable'\n\nexport interface IssueTicketData {\n headTitle?: string;\n classNamePrefix?: string;\n onGetIssuePageDataSuccess?: () => void;\n onGetIssuePageDataError?: (e: AxiosError) => void;\n}\n\nconst IssueComponent = ({\n classNamePrefix = 'delegations',\n headTitle = 'Manage Your Guest Tickets',\n onGetIssuePageDataSuccess = _identity,\n onGetIssuePageDataError = _identity,\n}: IssueTicketData) => {\n const [loading, setLoading] = useState(true)\n const [showMaxQtyModal, setShowMaxQtyModal] = useState(false)\n const [showSuccessModal, setShowSuccessModal] = useState(false)\n const [error, setError] = useState('')\n const accessHash = getQueryVariable('hash') || ''\n const [issuePageData, setIssuePageData] = useState<IDelegationsData>(\n {} as IDelegationsData\n )\n\n useEffect(() => {\n const fetchDelegationTickets = async () => {\n try {\n const res = await getDelegationTickets(accessHash)\n setLoading(false)\n setIssuePageData(res?.data?.data?.attributes || {})\n onGetIssuePageDataSuccess()\n } catch (e) {\n setLoading(false)\n if (axios.isAxiosError(e)) {\n onGetIssuePageDataError(e)\n }\n }\n }\n fetchDelegationTickets()\n }, [showSuccessModal])\n const selectTicketTypeOptions = _map(\n issuePageData.ticketTypes || ({} as IDelegationsTicketType),\n (val, key) => ({\n value: key,\n label: val.optionValue,\n })\n )\n return (\n <div className={`${classNamePrefix}-container`}>\n {loading ? (\n <Loader />\n ) : (\n <>\n {showMaxQtyModal && (\n <ConfirmModal\n hideCancelBtn={true}\n message={error}\n onClose={() =>\n error === DELEGATION_ACCESS_ERROR\n ? (window.location.href = '/')\n : setShowMaxQtyModal(false)\n }\n onConfirm={() =>\n error === DELEGATION_ACCESS_ERROR\n ? (window.location.href = '/')\n : setShowMaxQtyModal(false)\n }\n />\n )}\n {showSuccessModal && (\n <ConfirmModal\n hideCancelBtn={true}\n message=\"Your ticket successfully issued.\"\n onClose={() => setShowSuccessModal(false)}\n onConfirm={() => setShowSuccessModal(false)}\n />\n )}\n <div className={`${classNamePrefix}-head-title`}>{headTitle}</div>\n <div className={`${classNamePrefix}-inner-blocks`}>\n <div className={`${classNamePrefix}-image-block`}>\n <img\n src={`${CONFIGS.BASE_URL}${issuePageData?.eventImage}`}\n alt=\"main_event_img\"\n title=\"\"\n />\n </div>\n <div className={`${classNamePrefix}-tables`}>\n <TicketsAvailableTable\n tableTitle=\"Tickets available\"\n issuePageData={issuePageData}\n classNamePrefix=\"delegations\"\n />\n <TicketsAssignedTable\n tableTitle=\"Tickets assigned\"\n issuePageData={issuePageData}\n classNamePrefix=\"delegations\"\n />\n <div className={`${classNamePrefix}-issue-block`}>\n <div className={`${classNamePrefix}-issue-title`}>Issue New Tickets</div>\n <div className={`${classNamePrefix}-issue-subtitle`}>\n Please select the type of tickets and enter recipient details:\n </div>\n </div>\n <IssueTicketForm\n classNamePrefix={'delegations'}\n handleSubmit={async (values: any, { resetForm, setSubmitting }) => {\n try {\n await issueTicket(accessHash, values)\n setShowSuccessModal(true)\n resetForm()\n } catch (e) {\n if (axios.isAxiosError(e)) {\n const error = _get(e, 'response.data.message') || 'Error'\n setError(error)\n } else if (e instanceof Error) {\n setError(e?.message || 'Error')\n }\n setShowMaxQtyModal(true)\n } finally {\n setLoading(false)\n setSubmitting(false)\n }\n }}\n selectTicketTypeOptions={selectTicketTypeOptions}\n initialValues={{\n ticketTypeId: '',\n firstName: '',\n lastName: '',\n email: '',\n confirmEmail: '',\n confirm: false,\n }}\n />\n </div>\n </div>\n </>\n )}\n </div>\n )\n}\n\nexport default IssueComponent\n","import _get from 'lodash/get'\n\nimport { addToCart, getCheckoutPageConfigs, postOnCheckout } from '../../api'\nimport { createCheckoutDataBodyWithDefaultHolder, isBrowser } from '../../utils'\n\ninterface IAddToCartFuncProps {\n eventId: string | number;\n data: any;\n ticketQuantity: number;\n enableBillingInfoAutoCreate?: boolean;\n}\n\nexport const addToCartFunc = async ({\n eventId,\n data,\n ticketQuantity,\n enableBillingInfoAutoCreate = true,\n}: IAddToCartFuncProps) => {\n const result = await addToCart(eventId, data)\n const pageConfigsDataResponse = await getCheckoutPageConfigs()\n\n if (result.status === 200 && pageConfigsDataResponse.status === 200) {\n const pageConfigsData = _get(pageConfigsDataResponse, 'data.attributes') || {}\n\n const {\n skip_billing_page: skipBillingPage = false,\n has_add_on: hasAddOn = false,\n free_ticket: freeTicket = false,\n } = pageConfigsData\n\n let hash: string | number | undefined = ''\n let total: string | number | undefined = ''\n\n isBrowser && window.localStorage.removeItem('add_ons')\n\n if (skipBillingPage && !hasAddOn) {\n // Get user data for checkout data\n const userData =\n isBrowser && window.localStorage.getItem('user_data')\n ? JSON.parse(window.localStorage.getItem('user_data') || '')\n : {}\n\n const checkoutBody = createCheckoutDataBodyWithDefaultHolder(\n ticketQuantity,\n userData\n )\n\n const checkoutResponse = enableBillingInfoAutoCreate\n ? await postOnCheckout(checkoutBody, freeTicket)\n : null\n\n hash = checkoutResponse?.data?.attributes?.hash || ''\n total = checkoutResponse?.data?.attributes?.total || ''\n }\n\n return {\n skip_billing_page: skipBillingPage,\n event_id: String(eventId),\n hash,\n total,\n hasAddOn,\n }\n }\n\n return null\n}\n","import _find from 'lodash/find'\nimport _forEach from 'lodash/forEach'\nimport _isEmpty from 'lodash/isEmpty'\nimport _values from 'lodash/values'\n\nexport const getTierIdBasedOnSeatId = (seatId: string, eventSeats: Array<EventSeat>) => {\n let tierId: number | string = ''\n\n _forEach(eventSeats, group => {\n _forEach(group.seats, (seatsCount, rowId) => {\n const [row_id, seat_id] = seatId.split(':')\n if (row_id === rowId && seat_id <= seatsCount) {\n tierId = Number(group.tier_id)\n return false\n }\n return true\n })\n })\n\n return tierId\n}\n\nexport const getButtonLabel = (count: number, tableMapEnabled: boolean) => {\n if (!count) {\n return tableMapEnabled ? `GET TABLES` : `GET TICKETS`\n } else if (count === 1) {\n return tableMapEnabled ? `GET ${count} TABLE` : `GET ${count} TICKET`\n }\n return tableMapEnabled ? `GET ${count} TABLES` : `GET ${count} TICKETS`\n}\n\nexport const getOwnReservationsBasedOnStatuses = (statuses: any) => {\n const ownReservations: string[] = []\n Object.keys(statuses).forEach((groupRowId: string) =>\n Object.keys(statuses[groupRowId]).forEach((seatIndex: string | number) => {\n if (statuses[groupRowId][seatIndex] === 'OR') {\n ownReservations.push(`${groupRowId}:${seatIndex}`)\n } else if (statuses[groupRowId][seatIndex] === 'H') {\n statuses[groupRowId][seatIndex] = 'BLOCKED'\n }\n })\n )\n return ownReservations\n}\n\nexport const getTicketDropdownData = (\n reservationData: Array<SeatReservationData>,\n tierReleations: TicketTypeTierRelations\n) => {\n const ticketsDropdownsData: Array<ITicketsDropdownsData> = []\n _forEach(reservationData, reservation => {\n if (tierReleations[reservation.tierId]) {\n const ticketsData = _values(tierReleations[reservation.tierId])\n ticketsDropdownsData.push({\n seatId: reservation.seatId,\n tierId: reservation.tierId,\n ticketsData,\n })\n } else {\n ticketsDropdownsData.push({\n seatId: reservation.seatId,\n tierId: reservation.tierId,\n ticketsData: [\n {\n ticket_type_tier_id: reservation.tierId,\n ticket_type_name: 'Please select Ticket Type',\n ticket_type_price: '',\n ticket_type_id: 'default',\n },\n ],\n })\n }\n })\n return ticketsDropdownsData\n}\n\nexport const getAddToCartRequestData = ({\n eventId,\n reservations = [],\n selectedSeats = [],\n selectedTickets = [],\n guestCounts = {},\n}: any) => {\n const hasGuests = !_isEmpty(guestCounts)\n\n const addToCartData: ICartRequestData = {\n attributes: {\n alternative_view_id: null,\n product_cart_quantity: reservations.length,\n product_options: {},\n product_id: eventId,\n ticket_types: {},\n },\n }\n\n const productOptions = {} as any\n const ticketTypes = {} as any\n\n _forEach(reservations, (item, index) => {\n const ticket = _find(\n selectedSeats[item],\n sitem => sitem.ticket_type_id === selectedTickets[item]\n )\n productOptions[ticket.ticket_type_option] = ticket.ticket_type_id\n\n const ticketTypesKey = hasGuests ? index : ticket.ticket_type_id\n const quantity = hasGuests\n ? guestCounts[item]\n : (ticketTypes[ticket.ticket_type_id]?.quantity || 0) + 1\n\n ticketTypes[ticketTypesKey] = {\n quantity,\n product_options: {\n [ticket.ticket_type_option]: ticket.ticket_type_id,\n ticket_price: ticket.ticket_type_price,\n },\n }\n })\n\n addToCartData.attributes.product_options = productOptions\n addToCartData.attributes.ticket_types = ticketTypes\n\n return addToCartData\n}\n\nexport const getTierRelationsArray = (data: Array<TicketTypeTierRelationsData>) => {\n const ticketTypeTireRelationsArray: Array<string | number | null> = []\n _forEach(data, (item: TicketTypeTierRelationsData) => {\n ticketTypeTireRelationsArray.push(...(_values(item) as any))\n })\n\n return ticketTypeTireRelationsArray\n}\n","import 'tf-seat-map-view/dist/index.css'\n\nimport React, { useEffect } from 'react'\nimport ReactDom from 'react-dom'\nimport SeatMapView from 'tf-seat-map-view'\n\nimport { Loader } from '../common'\nimport { getTierRelationsArray } from './utils'\n\nconst CONTAINER_DEFAULT_ID = 'seat_map_default_container'\n\n// Temp solution\ndeclare global {\n interface Window {\n tierPrices: any;\n }\n}\n\nexport const SeatMapComponent = (props: ISeatMapContainerProps) => {\n const { seatMapProps, mapContainerId } = props\n const {\n seatData,\n statuses,\n seatMapType = null,\n seatMapEvents = {},\n ticketTypeTierRelations = {},\n tierPrices,\n isReserving,\n predefinedSeats,\n isLoadingSeatMapData,\n } = seatMapProps\n\n useEffect(() => {\n const parentElement = document.getElementById(mapContainerId || CONTAINER_DEFAULT_ID)\n\n // Temp solution\n window.tierPrices = tierPrices\n\n if (parentElement) {\n let mapComponent = null\n\n if (!(seatData && statuses) || isLoadingSeatMapData) {\n mapComponent = <Loader />\n } else {\n mapComponent = (\n <SeatMapView\n disabled={isReserving}\n loading={isReserving}\n events={seatMapEvents}\n isSelectionOn={false}\n seatData={seatData}\n statuses={statuses}\n ticketTypeTireRelationsArray={getTierRelationsArray(ticketTypeTierRelations)}\n width={Math.min(parentElement?.clientWidth || 800, 800)}\n height={Math.min(parentElement?.clientWidth || 800, 800)}\n isBlockMap={seatMapType === 'block'}\n isTableMap={seatMapType === 'table'}\n predefinedSeats={predefinedSeats}\n />\n )\n }\n\n ReactDom.render(mapComponent, parentElement)\n }\n }, [\n isReserving,\n mapContainerId,\n seatData,\n seatMapEvents,\n seatMapType,\n tierPrices,\n statuses,\n ticketTypeTierRelations,\n ])\n\n return <div id={CONTAINER_DEFAULT_ID} />\n}\n","import { CSSProperties } from '@emotion/serialize'\nimport { Select, SelectChangeEvent, ThemeOptions } from '@mui/material'\nimport CircularProgress from '@mui/material/CircularProgress'\nimport FormControl from '@mui/material/FormControl'\nimport InputLabel from '@mui/material/InputLabel'\nimport MenuItem from '@mui/material/MenuItem'\nimport { createTheme, ThemeProvider } from '@mui/material/styles'\nimport Tooltip from '@mui/material/Tooltip'\nimport _find from 'lodash/find'\nimport _identity from 'lodash/identity'\nimport _isEmpty from 'lodash/isEmpty'\nimport _keys from 'lodash/keys'\nimport _map from 'lodash/map'\nimport _some from 'lodash/some'\nimport React, { useState } from 'react'\nimport { Button } from 'react-bootstrap'\n\nimport { createFixedFloatNormalizer } from '../../normalizers'\nimport { createMarkup } from '../../utils'\nimport { getButtonLabel, getTicketDropdownData } from './utils'\n\nexport const TicketsSection = (\n props: ITicketsSectionProps & {\n themeOptions?: ThemeOptions & {\n input?: CSSProperties;\n checkbox?: CSSProperties;\n };\n }\n) => {\n const {\n ticketTypeTierRelations,\n reservedSeats,\n theme = 'light',\n getTicketsBtnLabel,\n contentStyle = {},\n isButtonScrollable = false,\n themeOptions,\n handleGetTicketClick,\n handleCancelReservation,\n ticketDeleteButtonContent = 'Delete',\n ticketInfoContent = 'Info',\n selectedTickets,\n handleTicketSelect,\n currencySymbol,\n tableMapEnabled = false,\n guestCounts,\n setGuestCounts,\n isAddingToCart,\n } = props\n\n const [selectedTicketsInfo, setSelectedTicketsInfo] = useState<{\n [seatId: string]: boolean | undefined;\n }>({})\n\n const bookButtonIsDisabled =\n _some(selectedTickets, item => !item) ||\n _isEmpty(reservedSeats) ||\n reservedSeats.length !== _keys(selectedTickets).length\n const themeMui = createTheme(themeOptions)\n\n const ticketsDropdownsData = getTicketDropdownData(\n reservedSeats,\n ticketTypeTierRelations\n )\n\n const handleTicketChange = (event: SelectChangeEvent<string>, seatId: string) => {\n const {\n target: { value },\n } = event\n\n if (value !== 'default') {\n handleTicketSelect(value, seatId)\n }\n }\n\n const handleShowtTicketInfo = (seatId: string) => {\n setSelectedTicketsInfo(prevState => ({ ...prevState, [seatId]: !prevState[seatId] }))\n }\n\n return (\n <ThemeProvider theme={themeMui}>\n <div className={`get-tickets-page ${theme}`} style={contentStyle}>\n <div className=\"tickets-section\">\n {_map(selectedTickets, (ticketItem: string, key: string) => {\n const dropdownData =\n _find(ticketsDropdownsData, item => item.seatId === key) ||\n ({} as ITicketsDropdownsData)\n\n const selectedTicketData = _find(\n dropdownData.ticketsData,\n ticket => ticket.ticket_type_id === ticketItem\n ) as TicketTypeTierRelationsData\n\n // guest count dropdown options\n const startNum = Number(selectedTicketData?.ticket_type_min_number_of_guests)\n const endNum = Number(selectedTicketData?.ticket_type_max_number_of_guests)\n const numLength = endNum - startNum + 1\n const showGuestCountDropdown = Boolean(startNum && endNum)\n const showDescription = Boolean(selectedTicketData?.description)\n\n // prices\n const guestPrice =\n (guestCounts[dropdownData.seatId] - startNum) *\n Number(selectedTicketData?.guest_price)\n\n const finalPrice = createFixedFloatNormalizer(2)(\n selectedTicketData?.ticket_type_price + guestPrice\n )\n\n return (\n <div className=\"ticket\" key={key}>\n <div className=\"ticketsDropdowns\">\n <Select\n value={ticketItem || 'default'}\n onChange={event => handleTicketChange(event, dropdownData.seatId)}\n inputProps={{ 'aria-label': 'Without label' }}\n MenuProps={{\n PaperProps: {\n sx: { maxHeight: 150 },\n className: 'get-tickets-paper',\n },\n }}\n displayEmpty\n sx={{ borderRadius: 0 }}\n >\n <MenuItem value={'default'}>\n {`Please select ${tableMapEnabled ? 'Table Type' : 'Ticket Type'}`}\n </MenuItem>\n {_map(dropdownData.ticketsData, (option, index) => {\n if (option.ticket_type_id !== 'default') {\n return (\n <MenuItem value={option.ticket_type_id} key={index}>\n {option.ticket_type_name}\n </MenuItem>\n )\n }\n return null\n })}\n </Select>\n <Button\n className=\"ticket-delete\"\n onClick={() => {\n handleCancelReservation(dropdownData.seatId, dropdownData.tierId)\n }}\n >\n {ticketDeleteButtonContent}\n </Button>\n </div>\n {selectedTicketData && (\n <>\n <div style={{ display: 'flex' }}>\n <div\n style={{\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n }}\n >\n <div className=\"ticketPrice\">\n Price:\n <span className=\"ticketPrice-value\">\n {`${currencySymbol} ${finalPrice}`}\n </span>\n <span className=\"fees\">\n {selectedTicketData.fee_included\n ? ' (incl. Fees)'\n : ' (excl. Fees)'}\n </span>\n </div>\n {!_isEmpty(selectedTicketData.ticket_type_deposit) && (\n <div className=\"ticketDeposit\">\n Deposit:\n <span className=\"ticketPrice-value\">\n {` ${selectedTicketData?.ticket_type_deposit}%`}\n </span>\n </div>\n )}\n </div>\n <div\n style={{\n width: '100%',\n display: 'flex',\n justifyContent: 'end',\n alignItems: 'center',\n marginRight: 16,\n }}\n >\n {showDescription && (\n <Tooltip\n title=\"View Ticket Info\"\n placement=\"left\"\n arrow\n componentsProps={{\n tooltip: {\n sx: {\n backgroundColor: 'common.black',\n marginRight: '6px !important',\n '& .MuiTooltip-arrow': {\n color: 'common.black',\n },\n },\n },\n }}\n >\n <div\n className=\"ticket-info\"\n onClick={() => handleShowtTicketInfo(dropdownData.seatId)}\n onKeyDown={() => handleShowtTicketInfo(dropdownData.seatId)}\n >\n {ticketInfoContent}\n </div>\n </Tooltip>\n )}\n {showGuestCountDropdown && (\n <FormControl variant=\"outlined\" sx={{ m: 1, minWidth: 80 }}>\n <InputLabel id=\"demo-simple-select-standard-label\" shrink>\n GUESTS\n </InputLabel>\n <Select\n label=\"GUESTS\"\n labelId=\"demo-simple-select-standard-label\"\n value={guestCounts[dropdownData.seatId] || startNum}\n onChange={event => {\n setGuestCounts({\n ...guestCounts,\n [dropdownData.seatId]: Number(event.target.value),\n })\n }}\n inputProps={{ 'aria-label': 'Without label' }}\n MenuProps={{\n PaperProps: {\n sx: { maxHeight: 150 },\n className: 'get-tickets-paper',\n },\n }}\n displayEmpty\n sx={{ borderRadius: 0 }}\n >\n {_map(\n Array.from({ length: numLength }, (_, i) => startNum + i),\n (option, index) => (\n <MenuItem value={option} key={index}>\n {option}\n </MenuItem>\n )\n )}\n </Select>\n </FormControl>\n )}\n </div>\n </div>\n {selectedTicketsInfo[dropdownData.seatId] && (\n <div\n className=\"ticket-description-content\"\n dangerouslySetInnerHTML={createMarkup(\n selectedTicketData.description || ''\n )}\n />\n )}\n </>\n )}\n </div>\n )\n })}\n </div>\n <div>\n <Button\n className={`book-button\n ${bookButtonIsDisabled ? 'disabled' : ''}\n ${isButtonScrollable ? 'is-scrollable' : ''}\n `}\n onClick={!bookButtonIsDisabled ? handleGetTicketClick : _identity}\n disabled={isAddingToCart}\n >\n {isAddingToCart ? (\n <CircularProgress size={20} style={{ marginLeft: 10 }} />\n ) : (\n getTicketsBtnLabel || getButtonLabel(reservedSeats.length, tableMapEnabled)\n )}\n </Button>\n </div>\n </div>\n </ThemeProvider>\n )\n}\n","import React from 'react'\nimport Modal from '@mui/material/Modal'\nimport Box from '@mui/material/Box'\n\ninterface IRedirectModal {\n message: string\n onClickOk: () => void\n}\n\nconst style: React.CSSProperties = {\n position: 'absolute',\n top: '10%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n minWidth: 480,\n backgroundColor: '#e3e3e3',\n border: '1px solid white',\n outline: 'none',\n padding: '14px',\n maxHeight: '85vh',\n overflow: 'auto',\n}\n\nexport const RedirectModal = ({\n message = 'Your cart has expired. Please click on \"OK\" to return to the ticket selection page.',\n onClickOk = () => {},\n}: IRedirectModal) => {\n return (\n <Modal\n open={true}\n aria-labelledby=\"modal-modal-title\"\n aria-describedby=\"modal-modal-description\"\n className=\"redirect-modal\"\n >\n <Box style={style}>\n <p>{message}</p>\n <div className=\"footer\">\n <button onClick={onClickOk}>OK</button>\n </div>\n </Box>\n </Modal>\n )\n}\n","import Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Modal from '@mui/material/Modal'\nimport { Field, Form, Formik } from 'formik'\nimport React, { useState } from 'react'\n\nimport { sendRSVPInfo } from '../../api'\nimport { isBrowser } from '../../utils'\nimport { combineValidators, emailValidator, requiredValidator } from '../../validators'\nimport { CustomField, Loader } from '../common/index'\n\ninterface IRsvpContainerPage {\n showSection?: boolean;\n eventId: number;\n}\n\ninterface IRSVPValuesTypes {\n email: string;\n}\n\nconst style: React.CSSProperties = {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n minWidth: 480,\n backgroundColor: '#e3e3e3',\n border: '1px solid white',\n outline: 'none',\n padding: '14px',\n maxHeight: '85vh',\n overflow: 'auto',\n}\n\nexport const RsvpContainer = ({ showSection = false, eventId }: IRsvpContainerPage) => {\n const userDataEncoded = isBrowser ? window.localStorage.getItem('user_data') : ''\n const parsedData = JSON.parse(userDataEncoded || '{}')\n\n const [loading, setLoading] = useState(false)\n const [modal, setModal] = useState({ isOpen: false, text: '' })\n\n const handleModalClose = () => {\n setModal({ isOpen: false, text: '' })\n }\n\n const handleSubmit = async (values: IRSVPValuesTypes) => {\n try {\n setLoading(true)\n\n const requestData = { data: { email: values.email } }\n const response = await sendRSVPInfo(eventId, requestData)\n\n setModal({ isOpen: true, text: response.message })\n } catch (error) {\n if (error.response.status === 403) {\n setModal({ isOpen: true, text: error.response.data?.message })\n }\n } finally {\n setLoading(false)\n }\n }\n\n if (!showSection) {\n return null\n }\n\n return (\n <>\n <Modal\n open={modal.isOpen}\n onClose={handleModalClose}\n aria-labelledby=\"modal-modal-title\"\n aria-describedby=\"modal-modal-description\"\n className=\"rsvp-modal\"\n >\n <Box style={style} className=\"rsvp-modal-box\">\n <div className=\"rsvp-modal-container\">\n <div className=\"rsvp-modal-header\">{modal.text}</div>\n <div className=\"rsvp-modal-button\">\n <button type=\"button\" onClick={handleModalClose}>\n OK\n </button>\n </div>\n </div>\n </Box>\n </Modal>\n <div className=\"rsvp-container\">\n {loading ? (\n <Loader />\n ) : (\n <>\n <div className=\"rsvp-header\">RSVP</div>\n <div className=\"rsvp-email-container\">\n <Formik\n initialValues={{\n email: parsedData?.email || '',\n }}\n onSubmit={handleSubmit}\n enableReinitialize\n >\n <Form>\n <div className=\"rsvp-email-input-container\">\n <Field\n name=\"email\"\n label=\"EMAIL ADDRESS\"\n type=\"email\"\n validate={combineValidators(\n (value: string) =>\n requiredValidator(value, 'Please enter your Email'),\n (value: string) => emailValidator(value)\n )}\n component={CustomField}\n />\n </div>\n <div className=\"rsvp-button-container\">\n <Button type=\"submit\">RSVP</Button>\n </div>\n </Form>\n </Formik>\n </div>\n </>\n )}\n </div>\n </>\n )\n}\n","import _isEmpty from 'lodash/isEmpty'\nimport _map from 'lodash/map'\nimport React from 'react'\n\nexport const Influancers = (props: IInfluancersProps) => {\n const {\n data,\n classNamePrefix,\n headerNode = (\n <>\n TOP\n <span> INFLUANCERS</span>\n </>\n ),\n } = props\n return (\n <div className={`${classNamePrefix}_influencers_container`}>\n {!_isEmpty(data) && (\n <div className={`${classNamePrefix}_influencers_header`}>{headerNode}</div>\n )}\n <div className={`${classNamePrefix}_influencers`}>\n {_map(data, (influencer, index) => (\n <div key={influencer.prereg_id} className={`${classNamePrefix}_influencer`}>\n <span className={`${classNamePrefix}_influencer_index`}>{index + 1}</span>\n <span className={`${classNamePrefix}_influencer_title`}>INFLUENCER</span>\n <span className={`${classNamePrefix}_influencer_name`}>\n {influencer.name}\n </span>\n </div>\n ))}\n </div>\n </div>\n )\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport _identity from 'lodash/identity'\nimport _isEmpty from 'lodash/isEmpty'\nimport _map from 'lodash/map'\nimport React, { memo, useState } from 'react'\n\nimport { FEES_STYLES } from '../../constants'\nimport { createFixedFloatNormalizer, currencyNormalizerCreator } from '../../normalizers'\nimport { IOrderData } from '../../types'\nimport { CONFIGS } from '../../utils'\nimport Countdown from 'react-countdown'\nimport { showZero } from '../../utils/showZero'\nimport { IRenderer } from '../timerWidget'\n\ninterface OrderDetailsProps {\n orderData: any;\n paymentFieldsData: any[];\n customMobileText?: string;\n handleCountdownFinish?: () => void;\n}\n\ninterface CountdownI {\n expiresAt: number;\n handleCountdownFinish: () => void;\n}\n\nconst SimpleCountdown = memo(({ expiresAt, handleCountdownFinish }: CountdownI) => {\n const renderer = ({\n minutes,\n seconds,\n completed,\n handleCountdownFinish,\n }: IRenderer) => {\n if (completed) {\n handleCountdownFinish()\n return null\n }\n return (\n <span>\n {showZero(minutes)}:{showZero(seconds)}\n </span>\n )\n }\n\n return (<div className=\"mobile-order-timer\">\n {expiresAt && (\n <Countdown\n date={Date.now() + expiresAt * 1000}\n renderer={(props: any) =>\n renderer({\n ...props,\n handleCountdownFinish,\n })\n }\n />\n )}\n </div>)\n})\n\nexport const OrderDetails = ({\n orderData = {},\n paymentFieldsData = [],\n customMobileText = 'Your order total',\n handleCountdownFinish = _identity\n}: OrderDetailsProps) => {\n const { currency, guest_count } = orderData || {}\n const hasTableTypes = Boolean(Number(guest_count))\n const [isExpanded, setIsExpanded] = useState(false)\n\n // Find the total field to display in the mobile view\n const totalField = paymentFieldsData.find(field => field.id === 'total')\n const totalValue =\n totalField && orderData.total\n ? totalField.normalizer\n ? totalField.normalizer(orderData.total, currency, orderData)\n : orderData.total\n : ''\n\n const toggleExpand = () => {\n setIsExpanded(!isExpanded)\n }\n\n const defaultItemRenderer = (item: any) => {\n return (<div>\n <div key={item.id} className=\"add-on-container\">\n <span>{item.quantity}</span>\n <span className=\"add-on-x\">{' x '}</span>\n <span>{item.groupName ? item.groupName + ' - ' : ''}</span>\n <span>{item.name}</span>\n <span>{' - '}</span>\n <span>\n {CONFIGS.FEES_STYLE === FEES_STYLES.TRADITIONAL &&\n currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(parseFloat(item.price)),\n currency,\n ) + ' (incl. fees)'}\n {CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH &&\n currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(parseFloat(item.cost)),\n currency,\n )}\n </span>\n <span className=\"add-on-each\">{' each'}</span>\n </div>\n {CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH && (\n <p className=\"fees\">\n {`(${currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(\n parseFloat(String(item.price)),\n ),\n currency,\n )} with fees)`}\n </p>\n )}\n </div>)\n }\n\n const defaultTableRenderer = (item: any) => {\n return (<div>\n <div key={item.id} className=\"table-type-container\">\n <span>{item.groupName ? item.groupName + ' - ' : ''}</span>\n <span>{item.name}</span>\n <span>{' - '}</span>\n <span>Guest Count{': '}</span>\n <span>{item.guestCount}</span>\n </div>\n <div>\n <span>\n {CONFIGS.FEES_STYLE === FEES_STYLES.TRADITIONAL &&\n currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(parseFloat(item.price)),\n currency,\n ) + ' (incl. fees)'}\n {CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH &&\n currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(parseFloat(item.cost)),\n currency,\n )}\n </span>\n <br/>\n {CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH && (\n <p className=\"fees\">\n {`(${currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(\n parseFloat(String(item.price)),\n ),\n currency,\n )} with fees)`}\n </p>\n )}\n </div>\n </div>)\n }\n\n return (\n <div className=\"payment_page payment_page_single\">\n {/* Mobile view summary */}\n <div className=\"mobile-order-summary\">\n <div className=\"mobile-order-summary-content\" onClick={toggleExpand}>\n <div className=\"mobile-order-info\">\n <div\n className={`mobile-order-info-container order-info-container-left ${\n isExpanded ? 'open' : ''\n }`}\n >\n <div className=\"mobile-order-text\">{customMobileText}</div>\n </div>\n <div className=\"mobile-order-info-container order-info-container-right\">\n {!isExpanded && (\n <div className=\"mobile-order-total\">{totalValue}</div>\n )}\n {orderData?.expires_at && (\n <SimpleCountdown expiresAt={orderData?.expires_at} handleCountdownFinish={handleCountdownFinish} />\n )}\n </div>\n </div>\n </div>\n </div>\n\n {/* Original content - will be hidden on mobile when collapsed */}\n <div\n className={`order_info_section ${isExpanded ? 'expanded' : 'collapsed'}`}\n style={{ display: hasTableTypes ? 'block' : 'grid' }}\n >\n {_map(paymentFieldsData, field => {\n const { id, label, className = '', normalizer = _identity } = field\n const value = orderData[id as keyof IOrderData] || ''\n let component = null\n\n if (field.id === 'add_ons' && _isEmpty(value)) {\n return false\n }\n\n if (field.id === 'tableTypes') {\n const valueArray = value as Array<any>\n\n component = (\n <div\n key={id}\n className=\"order_info_block\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n {_map(valueArray, tableTypeItem => (\n <div\n key={tableTypeItem.id}\n style={{\n display: 'grid',\n gridTemplateColumns: '33% 33% 33%',\n gridColumnGap: '10%',\n }}\n >\n <div className=\"order_info_block\">\n <div className=\"order_info_title\">Table Type</div>\n <div className={`${className} order_info_text`}>\n {tableTypeItem.ticketType}\n </div>\n </div>\n <div className=\"order_info_block\">\n <div className=\"order_info_title\">Number of Tables</div>\n <div className={`${className} order_info_text`}>\n {tableTypeItem.count}\n </div>\n </div>\n <div className=\"order_info_block\">\n <div className=\"order_info_title\">Guest Count</div>\n <div className={`${className} order_info_text`}>\n {tableTypeItem.quantity}\n </div>\n </div>\n </div>\n ))}\n </div>\n )\n }\n\n return (\n component || (\n <div key={id} className={`order_info_block ${className}`}>\n <div className=\"order_info_title\">{label}</div>\n <div className={`${className} order_info_text`}>\n {typeof value === 'string' || typeof value === 'number'\n ? normalizer(value, currency, orderData)\n : _map(value, item => (\n item.isTable ? defaultTableRenderer(item) : defaultItemRenderer(item)\n ))}\n </div>\n </div>\n )\n )\n })}\n </div>\n </div>\n )\n}\n","/* eslint-disable max-len */\nimport './style.css'\n\nimport { Button } from '@mui/material'\nimport axios, { AxiosError } from 'axios'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport _map from 'lodash/map'\nimport React, { SyntheticEvent, useEffect, useRef, useState } from 'react'\n\nimport { getConfirmationData } from '../../api'\nimport { usePixel } from '../../hooks/usePixel'\nimport { IReferralPromotion } from '../../types'\nimport { createMarkup, getCookieByName, isBrowser } from '../../utils'\nimport { CopyMessageModal } from '../common'\nimport SocialButtons from './social-buttons'\n\nexport interface IShareButton {\n mainLabel: string;\n subLabel: string;\n platform: string;\n shareData: any;\n points?: number | string;\n onAfterShare?: (event: SyntheticEvent) => void;\n eventActionId?: string;\n oneTimeAction?: boolean;\n alreadyApplied?: boolean;\n btnClassName?: string;\n}\n\nexport interface IConfirmationLabels {\n confirmationTitle?: string;\n confirmationMain?: string;\n confirmationHelper?: string;\n paymentPlanConfirmationTitle?: string;\n paymentPlanConfirmationMain?: string;\n paymentPlanConfirmationHelper?: string;\n}\n\nexport interface IConfirmationPage {\n hasCopyIcon?: boolean;\n isReferralEnabled: boolean;\n showDefaultShareButtons: boolean;\n messengerAppId: string;\n shareButtons: IShareButton[];\n onGetConfirmationDataSuccess: (res: ICheckoutCompleteData) => void;\n onGetConfirmationDataError: (e: AxiosError) => void;\n onLinkCopied: () => void;\n orderHash?: string;\n confirmationLabels: IConfirmationLabels;\n clientLabel?: string;\n showReferralsInfoText?: boolean;\n showCopyInfoModal?: boolean;\n showPricingNoteSection?: boolean;\n showOrderDetailsBtn?: boolean;\n onOrderDetailsClick?: (data: ICheckoutCompleteData) => void;\n showProductImage?: boolean;\n eventTitle?: string;\n eventDate?: string;\n eventLocation?: string;\n}\n\nexport const ConfirmationContainer = ({\n confirmationLabels,\n hasCopyIcon = true,\n isReferralEnabled,\n showDefaultShareButtons,\n messengerAppId = '',\n shareButtons = [],\n onGetConfirmationDataSuccess = _identity,\n onGetConfirmationDataError = _identity,\n orderHash,\n onLinkCopied = _identity,\n clientLabel,\n showReferralsInfoText = false,\n showCopyInfoModal = false,\n showPricingNoteSection = false,\n showOrderDetailsBtn = false,\n onOrderDetailsClick = _identity,\n showProductImage = true,\n eventTitle,\n eventDate,\n eventLocation,\n}: IConfirmationPage) => {\n const inputRef = useRef(null)\n const [data, setData] = useState<ICheckoutCompleteData | null>(null)\n const dataEncoded = (isBrowser && window.localStorage.getItem('checkoutData')) || ''\n const dataDecoded = dataEncoded ? JSON.parse(dataEncoded) : { hash: orderHash }\n const { hash } = dataDecoded\n const eventId = data?.product_id || ''\n\n useEffect(() => {\n (async () => {\n if (hash) {\n try {\n const confirmationDataResponse = await getConfirmationData(hash)\n const data = confirmationDataResponse.data.attributes\n data.personal_share_sales = data.personal_share_sales.map(salesItem => {\n const salesData: IReferralPromotion = {\n label: `If your friends buy ${salesItem.sales} tickets`,\n price: '',\n }\n if (salesItem.price === 0) {\n salesData.subLabel = 'Your ticket becomes'\n salesData.price = 'FREE!'\n } else {\n salesData.subLabel = 'Your ticket goes down to'\n salesData.price = data.currency.symbol + Number(salesItem.price).toFixed(2)\n }\n\n return salesData\n })\n data.personal_share_sales.unshift({\n label: 'Your ticket is currently',\n price: data.currency.symbol + data.product_price?.toFixed(2),\n })\n // Ensure order_hash is included in the data\n if (!data.order_hash) {\n data.order_hash = hash\n }\n setData(data)\n onGetConfirmationDataSuccess(confirmationDataResponse.data.attributes)\n\n // Clear user_data for non-logged-in users after successful purchase\n if (isBrowser) {\n const isLoggedIn = Boolean(getCookieByName('X-TF-ECOMMERCE'))\n if (!isLoggedIn) {\n window.localStorage.removeItem('user_data')\n }\n }\n } catch (error) {\n if (axios.isAxiosError(error)) onGetConfirmationDataError(error)\n }\n }\n })()\n }, [hash])\n\n const [showCopyModal, setShowCopyModal] = useState(false)\n\n const onClose = () => {\n setShowCopyModal(false)\n }\n\n const onChangeShareLink = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newData = {\n ...data,\n personal_share_link: e.target.value,\n } as ICheckoutCompleteData\n setData(newData)\n }\n const {\n confirmationTitle = 'Your Tickets are Confirmed!',\n confirmationMain = 'Your tickets are available in My Tickets section',\n confirmationHelper = 'Please bring them with you to the event',\n paymentPlanConfirmationTitle = 'Your Tickets are Confirmed!',\n paymentPlanConfirmationMain = 'Your payment plan is pending and we are trying to take your initial payment. If your initial payment does not complete, your payment plan will be cancelled.',\n paymentPlanConfirmationHelper = 'You will receive a confirmation with your tickets once your final payment has been made.',\n } = confirmationLabels\n\n const pageUrl = isBrowser ? window.location.href.split('?')[0] : ''\n usePixel(eventId, { page: 'complete', pageUrl, orderHash: hash })\n\n return (\n <div className=\"confirmation-page\">\n {showCopyInfoModal && (\n <CopyMessageModal onClose={onClose} showCopyModal={showCopyModal} />\n )}\n {data && (\n <>\n <div className=\"header-container\">\n {showProductImage && (\n <div className=\"header-product-image\">\n <img alt=\"\" className=\"product-image\" src={data.product_image} />\n </div>\n )}\n <div className=\"header-product-text\">\n <p className=\"title\">\n {data.is_payment_plan ? paymentPlanConfirmationTitle : confirmationTitle}\n </p>\n {(eventTitle || eventDate || eventLocation) && (\n <div className=\"event-details\">\n {eventTitle && <div className=\"event-title\">{eventTitle}</div>}\n {eventDate && <div className=\"event-date\">{eventDate}</div>}\n {eventLocation && <div className=\"event-location\">{eventLocation}</div>}\n </div>\n )}\n <div\n className=\"share-message-section\"\n dangerouslySetInnerHTML={\n data.custom_confirmation_page_text &&\n data.custom_confirmation_page_text_full_replacement\n ? createMarkup(data.custom_confirmation_page_text)\n : undefined\n }\n >\n {data.custom_confirmation_page_text &&\n data.custom_confirmation_page_text_full_replacement ? undefined : (\n <>\n {Boolean(data.is_payment_plan) && (\n <>\n <span className=\"main\">{paymentPlanConfirmationMain}</span>\n <span className=\"helper\">{paymentPlanConfirmationHelper}</span>\n </>\n )}\n {!data.is_payment_plan && (\n <>\n {data.attach_tickets ? (\n <span className=\"main\">\n Your tickets have been emailed to you\n </span>\n ) : (\n <span className=\"main\">{confirmationMain}</span>\n )}\n <span className=\"helper\">\n {data.attach_tickets\n ? 'Please bring them with you to the event'\n : confirmationHelper}\n </span>\n </>\n )}\n </>\n )}\n </div>\n </div>\n </div>\n {data.custom_confirmation_page_text &&\n !data.custom_confirmation_page_text_full_replacement ? (\n <div\n className=\"custom-confirmation-page-text\"\n dangerouslySetInnerHTML={createMarkup(data.custom_confirmation_page_text)}\n />\n ) : null}\n {showOrderDetailsBtn && (\n <div className=\"order-details-button-container\">\n <Button\n className=\"view-order-button\"\n variant=\"contained\"\n onClick={() => {\n onOrderDetailsClick(data)\n }}\n >\n View Order\n </Button>\n </div>\n )}\n {data.disable_referral === false && isReferralEnabled && (\n <>\n <div className=\"referral_text_image_section\">\n <div className=\"referral_text_section\">\n <div className=\"referral_title_text\">\n Your ticket can become\n <span className=\"strong-text\"> cheaper </span>\n or even\n <span className=\"strong-text\"> FREE!</span>\n </div>\n <div className=\"referral_text\">\n <span className=\"strong-text\"> Invite friends </span>\n and we'll refund up to\n <span className=\"strong-text\"> 100% </span>\n of your ticket money, if they buy tickets as well!\n </div>\n </div>\n <img\n className=\"body-product-image\"\n src={data.product_image}\n alt=\"No Data\"\n />\n </div>\n <div className=\"share_wrapper\">\n <div className=\"share_section\">\n <div className=\"invitation_section\">\n <div className=\"invitation_title\">\n How do you invite your friends?\n </div>\n <div className=\"share_buttons\">\n <div className=\"share-by-link\">\n <h5 className=\"share-by-link label\">Send them this link:</h5>\n <div className=\"share-btn-inner\">\n <input\n ref={inputRef}\n className=\"share-input\"\n value={data.personal_share_link}\n onChange={onChangeShareLink}\n />\n <div\n aria-hidden={true}\n className=\"share-by-link-copy-icon\"\n onClick={() => {\n navigator.clipboard.writeText(\n _get(inputRef, 'current.value') || ''\n )\n setShowCopyModal(true)\n onLinkCopied()\n }}\n >\n {hasCopyIcon ? (\n <img\n src=\"https://img.icons8.com/office/50/000000/copy.png\"\n alt=\"copy\"\n />\n ) : (\n <span className=\"copy-icon\">Copy</span>\n )}\n </div>\n </div>\n </div>\n {(showDefaultShareButtons || !!shareButtons.length) && (\n <SocialButtons\n showDefaultShareButtons={showDefaultShareButtons}\n name={data.product_name}\n appId={messengerAppId}\n shareLink={data.personal_share_link}\n shareButtons={shareButtons}\n clientLabel={clientLabel}\n showReferralsInfoText={showReferralsInfoText}\n />\n )}\n </div>\n </div>\n </div>\n <div className=\"pricing-section\">\n <div className=\"invitation_title\">How much cheaper?</div>\n {_map(data.personal_share_sales, (pricing, index) => (\n <div key={index} className=\"pricing-section_wrapper\">\n <div className=\"pricing-section_label\">\n {pricing.label}\n {pricing.subLabel && (\n <div className=\"pricing-section_sublabel\">\n {pricing.subLabel}\n </div>\n )}\n </div>\n <div className=\"pricing-section_price\"> {pricing.price}</div>\n </div>\n ))}\n {showPricingNoteSection && (\n <div className=\"note-pricing-section\">\n ^ This is based on the most expensive ticket in your order.\n </div>\n )}\n </div>\n </div>\n </>\n )}\n </>\n )}\n </div>\n )\n}\n","import _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport React, { FC, useEffect, useState } from 'react'\n\nimport { getCustomerExistsData } from '../../api/guestTicketDelegation'\nimport { Loader } from '../../components/common'\nimport { LoginForm } from '../../components/loginForm'\nimport { RegistrationForm } from '../../components/registerForm'\nimport { useCookieListener } from '../../hooks/useCookieListener'\nimport { getCookieByName, getQueryVariable } from '../../utils'\nimport IssueComponent from './IssueComponent'\n\ninterface IRegistrationProps {\n registerFormFields?: Array<IFormFieldsSection>;\n classNamePrefix?: string;\n logo?: string;\n onCustomerExistsError?: (error: any) => void;\n issuePageErrorText?: string;\n}\n\nconst X_TF_ECOMMERCE = 'X-TF-ECOMMERCE'\n\nexport const DelegationsContainer: FC<IRegistrationProps> = ({\n registerFormFields,\n classNamePrefix = 'guest-ticket-delegation',\n issuePageErrorText = 'You do not have access to manage these tickets.',\n onCustomerExistsError = _identity,\n logo,\n}) => {\n const [loading, setLoading] = useState(true)\n const [isLoggedIn, setIsLoggedIn] = useState(Boolean(getCookieByName(X_TF_ECOMMERCE)))\n const [isCustomerExsists, setIsCustomerExsists] = useState(false)\n const [issuePageError, setIssuePageError] = useState(false)\n const [customerEmail, setCustomerEmail] = useState('')\n const accessHash = getQueryVariable('hash') || ''\n\n useCookieListener(X_TF_ECOMMERCE, value => setIsLoggedIn(Boolean(value)))\n\n const onGetIssuePageDataError = () => {\n setIssuePageError(true)\n }\n\n useEffect(() => {\n const getCustomerData = async () => {\n try {\n const response = await getCustomerExistsData(accessHash)\n const isCustomerExsists = _get(response, 'data.attributes.customerExists', false)\n setIsCustomerExsists(isCustomerExsists)\n setCustomerEmail(_get(response, 'data.attributes.email', ''))\n setLoading(false)\n } catch (error) {\n onCustomerExistsError(error)\n }\n }\n\n getCustomerData()\n }, [])\n\n return (\n <div className={`${classNamePrefix}__container`}>\n {loading ? (\n <Loader />\n ) : issuePageError ? (\n <div className=\"issue_page_error\">{issuePageErrorText}</div>\n ) : isLoggedIn ? (\n <div>\n <IssueComponent\n classNamePrefix={classNamePrefix}\n onGetIssuePageDataError={onGetIssuePageDataError}\n />\n </div>\n ) : isCustomerExsists ? (\n <LoginForm logo={logo} />\n ) : (\n <RegistrationForm\n customerEmail={customerEmail}\n formFields={registerFormFields}\n registrationType=\"delegation\"\n />\n )}\n </div>\n )\n}\n","import Button from '@mui/material/Button'\nimport { AxiosError } from 'axios'\nimport _identity from 'lodash/identity'\nimport _isEmpty from 'lodash/isEmpty'\nimport React, { useEffect, useState } from 'react'\n\nimport {\n checkCustomerOrder,\n checkVerificationStatus,\n getNetverifyUrl,\n updateVerificationStatus,\n} from '../../api'\nimport {\n GetNetverifyUrlResponseData,\n VerificationStatusResponseData,\n} from '../../types/verification'\nimport { getQueryVariable, isBrowser, isJson } from '../../utils'\nimport Modal from '../common/ModalComponent'\nimport {\n VERIFICATION_MESSAGES,\n VERIFICATION_PROVIDERS,\n VERIFICATION_STATUSES,\n} from './constants'\n\ninterface IDVerificationProps {\n onGetVerifyUrlSuccess?: (response: GetNetverifyUrlResponseData) => void;\n onGetVerifyUrlError?: (error: AxiosError) => void;\n\n onGetVerificationStatusSuccess?: (response: {\n data: VerificationStatusResponseData;\n }) => void;\n onGetVerificationStatusError?: (error: AxiosError) => void;\n\n onVerificationMessageModalClose?: (status: string | null) => void;\n\n onPassVerificationStepsSuccess?: () => void;\n onPassVerificationStepsError?: (error: AxiosError | null) => void;\n}\n\nexport const IDVerification = (props: IDVerificationProps) => {\n const {\n onGetVerifyUrlSuccess = _identity,\n onGetVerifyUrlError = _identity,\n\n onGetVerificationStatusSuccess = _identity,\n onGetVerificationStatusError = _identity,\n\n onVerificationMessageModalClose = _identity,\n\n onPassVerificationStepsSuccess = _identity,\n onPassVerificationStepsError = _identity,\n } = props\n\n const [loadingStatus, setLoadingStatus] = useState(true)\n const [verificationStatus, setVerificationStatus] = useState<string | null>(null)\n const [showModal, setShowModal] = useState(false)\n const [netverifyUrl, setNetverifyUrl] = useState<string | null>(null)\n const [provider, setProvider] = useState<string | null>(null)\n const [hasError, setHasError] = useState<boolean>(false)\n const [lastError, setLastError] = useState(null)\n const [modalData, setModalData] = useState({\n message: '',\n hideCancelBtn: true,\n displaModal: false,\n })\n\n const isAccountVerifiedOrPending =\n (verificationStatus === VERIFICATION_STATUSES.APPROVED ||\n verificationStatus === VERIFICATION_STATUSES.PENDING) &&\n verificationStatus !== VERIFICATION_STATUSES.WRONG_CUSTOMER\n\n const handleClose = () => {\n setModalData({\n message: '',\n displaModal: false,\n hideCancelBtn: true,\n })\n\n onVerificationMessageModalClose(verificationStatus)\n }\n\n useEffect(() => {\n const callbackNetVerify = async (e: any) => {\n // Stripe Events\n if (e.data && e.origin === 'https://verify.stripe.com') {\n const { data } = e\n if (data.type === 'STRIPE_IDENTITY_CLOSE') {\n await getUrl()\n setShowModal(false)\n if (hasError) {\n setHasError(false)\n onPassVerificationStepsError(lastError)\n } else {\n setHasError(false)\n onPassVerificationStepsSuccess()\n }\n } else if (data.type === 'STRIPE_IDENTITY_ERROR') {\n setHasError(true)\n setLastError(data)\n }\n }\n\n if (e.data && isJson(e.data)) {\n try {\n const result = JSON.parse(e.data)\n if (\n result.payload &&\n (result.payload.value === 'success' ||\n result.payload.transactionStatus === 'SUCCESS')\n ) {\n await updateVerificationStatus()\n onPassVerificationStepsSuccess()\n } else if (\n result.payload &&\n (result.payload.value === 'error' ||\n result.payload.transactionStatus === 'ERROR')\n ) {\n setShowModal(false)\n onPassVerificationStepsError(result.payload)\n }\n } catch (e) {\n onPassVerificationStepsError(e)\n }\n }\n }\n\n window.addEventListener('message', callbackNetVerify)\n\n return () => {\n window.removeEventListener('message', callbackNetVerify)\n }\n }, [])\n\n const getUrl = async () => {\n try {\n const urlResponse = await getNetverifyUrl()\n setNetverifyUrl(urlResponse.netverifyUrl)\n setProvider(urlResponse.provider)\n onGetVerifyUrlSuccess(urlResponse)\n } catch (error) {\n onGetVerifyUrlError(error)\n }\n }\n\n useEffect(() => {\n let intervalId: any = null\n const orderHash = getQueryVariable('order_hash') || ''\n\n const getVerificationStatus = async () => {\n try {\n let verificationStatus = null\n // Gets te current status of the variable without modifying it\n setVerificationStatus(status => {\n verificationStatus = status\n return status\n })\n let provider = null\n // Gets te current status of the variable without modifying it\n setProvider(state => {\n provider = state\n return provider\n })\n let verifyUrl = null\n // Gets te current status of the variable without modifying it\n setNetverifyUrl(state => {\n verifyUrl = state\n return state\n })\n const statusResponse = await checkVerificationStatus()\n const { status } = statusResponse.data.attributes\n const isApproved = status === VERIFICATION_STATUSES.APPROVED\n\n if (verificationStatus !== status) {\n setVerificationStatus(status)\n setModalData({\n displaModal: isApproved || status === VERIFICATION_STATUSES.FAILED,\n hideCancelBtn: true,\n message: isApproved\n ? VERIFICATION_MESSAGES.APPROVED\n : status === VERIFICATION_STATUSES.FAILED\n ? VERIFICATION_MESSAGES.FAILED\n : status,\n })\n }\n if (\n provider === VERIFICATION_PROVIDERS.STRIPE &&\n verifyUrl === null &&\n !isApproved\n ) {\n getUrl()\n }\n onGetVerificationStatusSuccess(statusResponse)\n } catch (error) {\n onGetVerificationStatusError(error)\n } finally {\n setLoadingStatus(false)\n }\n }\n\n const getCustomerOrderStatus = async () => {\n const customerOrderResponse = await checkCustomerOrder(orderHash)\n return customerOrderResponse\n }\n\n const makeRequests = async () => {\n try {\n if (orderHash) {\n await getCustomerOrderStatus()\n }\n getUrl()\n getVerificationStatus()\n\n // Check the verification status every 30 seconds\n intervalId = setInterval(() => {\n getVerificationStatus()\n }, 10000)\n } catch (error) {\n if (error.response?.data?.message === VERIFICATION_MESSAGES.WRONG_CUSTOMER) {\n setVerificationStatus(VERIFICATION_STATUSES.WRONG_CUSTOMER)\n setModalData({\n displaModal: true,\n hideCancelBtn: true,\n message: VERIFICATION_MESSAGES.WRONG_CUSTOMER,\n })\n }\n }\n }\n\n makeRequests()\n\n // Clear the interval when the component unmounts\n return () => clearInterval(intervalId)\n }, [])\n\n const iframe = (netverifyUrl: string) => {\n // eslint-disable-next-line max-len\n const iframe = `<iframe allowFullScreen id=\"verificationIframe\" frameBorder=\"0\" width=\"100%\" height=\"570px\" allow=\"camera;fullscreen;accelerometer;gyroscope;magnetometer\" src=\"${netverifyUrl}\"></iframe>`\n return {\n __html: iframe,\n }\n }\n\n useEffect(() => {\n const orderHash = getQueryVariable('order_hash')\n\n if (isBrowser) {\n const checkoutData = JSON.parse(window.localStorage.getItem('checkoutData') || '{}')\n if (_isEmpty(checkoutData) && orderHash) {\n window.localStorage.setItem('checkoutData', JSON.stringify({ hash: orderHash }))\n }\n }\n }, [])\n\n return (\n <div>\n <h2 className=\"page-header\">Account Verification</h2>\n {loadingStatus ? null : (\n <>\n {!isAccountVerifiedOrPending && (\n <div className=\"verify-message\">\n To complete the purchase, please verify your identity.\n </div>\n )}\n {verificationStatus === VERIFICATION_STATUSES.APPROVED && (\n <div className=\"verify-message\">{VERIFICATION_MESSAGES.APPROVED}</div>\n )}\n {(verificationStatus === VERIFICATION_STATUSES.PENDING ||\n (provider === VERIFICATION_PROVIDERS.STRIPE &&\n netverifyUrl === null &&\n verificationStatus !== VERIFICATION_STATUSES.APPROVED)) && (\n <div className=\"verify-message\">{VERIFICATION_MESSAGES.PENDING}</div>\n )}\n {!isAccountVerifiedOrPending && netverifyUrl !== null && (\n <Button\n type=\"button\"\n variant=\"contained\"\n className=\"verify-button\"\n onClick={() => {\n setShowModal(true)\n }}\n >\n Verify\n </Button>\n )}\n </>\n )}\n\n {modalData.displaModal && (\n <Modal\n modalClassName=\"verification-message-modal\"\n actions={[\n {\n id: 'ok',\n label: 'Ok',\n variant: 'contained',\n onClick: handleClose,\n },\n ]}\n >\n <div className=\"verify-message\">{modalData.message}</div>\n </Modal>\n )}\n\n {showModal && (\n <Modal\n modalClassName=\"id-verification-modal\"\n actions={[\n {\n id: 'close',\n label: 'Close',\n variant: 'contained',\n onClick: () => {\n setShowModal(false)\n },\n },\n ]}\n >\n <div dangerouslySetInnerHTML={iframe(netverifyUrl || '')} />\n </Modal>\n )}\n </div>\n )\n}\n","import './style.css'\n\nimport Autocomplete from '@mui/material/Autocomplete'\nimport CircularProgress from '@mui/material/CircularProgress'\nimport Paper from '@mui/material/Paper'\nimport Table from '@mui/material/Table'\nimport TableBody from '@mui/material/TableBody'\nimport TableCell from '@mui/material/TableCell'\nimport TableContainer from '@mui/material/TableContainer'\nimport TableHead from '@mui/material/TableHead'\nimport TablePagination from '@mui/material/TablePagination'\nimport TableRow from '@mui/material/TableRow'\nimport TextField from '@mui/material/TextField'\nimport axios from 'axios'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport React, { useEffect, useState } from 'react'\n\nimport { getOrders } from '../../api'\nimport { getCookieByName } from '../../utils'\nimport { LoginModal } from '../loginModal'\nimport MyTicketsRow from './row'\nimport tableConfig from './tableConfig'\n\ninterface MyTicketsTypes {\n handleDetailsInfo: (id: string | number) => void;\n onGetOrdersSuccess: (res: any) => void;\n onGetOrdersError: (err: any) => void;\n logo?: string;\n theme?: 'light' | 'dark';\n selectEventsLabel?: string;\n openLoginModal?: () => void;\n hideDetailsButton?: boolean;\n customNoOrderContent?: React.ReactNode;\n columns?: IColumnData[];\n}\n\ninterface EventFilter {\n event_name: string;\n url_name: string;\n}\n\nexport const MyTicketsContainer = ({\n handleDetailsInfo = _identity,\n onGetOrdersSuccess = _identity,\n onGetOrdersError = _identity,\n theme = 'dark',\n selectEventsLabel = 'Events',\n logo,\n hideDetailsButton = false,\n columns = [],\n openLoginModal,\n customNoOrderContent = null,\n}: MyTicketsTypes) => {\n const [data, setData] = useState<any>(null)\n const [loading, setLoading] = useState(true)\n const [limit, setLimit] = useState(10)\n const [filter, setFilter] = useState('')\n\n const isWindowDefined = typeof window !== 'undefined'\n const [isLogged, setIsLogged] = useState(\n isWindowDefined ? !!getCookieByName('X-TF-ECOMMERCE') : false\n )\n const [showModalLogin, setShowModalLogin] = useState(false)\n const [userExpired, setUserExpired] = useState(false)\n\n //just once\n useEffect(() => {\n fetchData(1, limit, filter)\n }, [isLogged])\n\n const fetchData = async (page: number, limit: number, eventSlug: string) => {\n try {\n setLoading(true)\n const response = await getOrders(page, limit, eventSlug)\n onGetOrdersSuccess(response)\n\n const data = _get(response, 'data.attributes')\n data.page -= 1\n\n setData(data)\n } catch (error) {\n if (axios.isAxiosError(error)) {\n if (_get(error, 'response.data.error') === 'invalid_token') {\n if (isWindowDefined) {\n window.localStorage.removeItem('user_data')\n setUserExpired(true)\n setShowModalLogin(true)\n }\n }\n }\n onGetOrdersError(error)\n } finally {\n setLoading(false)\n }\n }\n\n const handleChangePage = (_event: any, newPage: number) => {\n fetchData(newPage + 1, limit, filter)\n }\n\n const handleChangeRowsPerPage = (event: React.ChangeEvent<HTMLInputElement>) => {\n fetchData(1, +event.target.value, filter)\n setLimit(+event.target.value)\n }\n\n const onChange = (\n _event: React.SyntheticEvent<Element, Event>,\n eventFilter: EventFilter | null\n ) => {\n fetchData(1, limit, eventFilter?.url_name || '')\n setFilter(eventFilter?.url_name || '')\n }\n\n const noOrderContent = customNoOrderContent || (<div className=\"no_orders_section\">\n <div className=\"nodata_title\">\n You have no current ticket orders on this account\n </div>\n <div className=\"nodata_subtitle\">\n Discover your next nite out <a href=\"/events\">here</a>.\n </div>\n </div>)\n\n return (\n <div className={`my-ticket ${theme}`}>\n <>\n {showModalLogin || !isLogged ? (\n openLoginModal ? (\n openLoginModal()\n ) : (\n <LoginModal\n onClose={() => {\n setShowModalLogin(false)\n }}\n onLogin={() => {\n setShowModalLogin(false)\n setUserExpired(false)\n setIsLogged(true)\n }}\n userExpired={userExpired}\n logo={logo}\n showForgotPasswordButton\n />\n )\n ) : null}\n </>\n {data?.orders?.length ? (\n <>\n <h2>My Ticket Orders</h2>\n <Autocomplete\n disablePortal\n id=\"combo-box-demo\"\n getOptionLabel={(option: EventFilter) => option.event_name}\n onChange={onChange}\n options={data.purchased_events}\n sx={{ width: 300 }}\n renderInput={params => <TextField {...params} label={selectEventsLabel} />}\n />\n {loading ? (\n <div className=\"loading\">\n <CircularProgress />\n </div>\n ) : (\n <>\n <TableContainer component={Paper} className=\"my-ticket-table\">\n <Table aria-label=\"collapsible table\">\n <TableHead>\n <TableRow>\n {tableConfig(columns).header.map(\n (column: string, index: number) => (\n <TableCell key={index}>{column}</TableCell>\n )\n )}\n {!hideDetailsButton && <TableCell />}\n </TableRow>\n </TableHead>\n <TableBody>\n {data.orders?.map((row: RowItems) => (\n <MyTicketsRow\n key={row.id}\n row={row}\n handleDetailsInfo={handleDetailsInfo}\n columns={columns}\n hideDetailsButton={hideDetailsButton}\n />\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n <TablePagination\n rowsPerPageOptions={[10, 25, 100]}\n component=\"div\"\n count={data.total_count}\n rowsPerPage={limit}\n page={data.page}\n onPageChange={handleChangePage}\n onRowsPerPageChange={handleChangeRowsPerPage}\n />\n </>\n )}\n </>\n ) : (\n !loading && (\n <>\n <h2>My Ticket Orders</h2>\n {noOrderContent}\n </>\n )\n )}\n <>\n {showModalLogin && (\n <LoginModal\n onClose={() => {\n setShowModalLogin(false)\n }}\n onLogin={() => {\n setShowModalLogin(false)\n setUserExpired(false)\n setIsLogged(true)\n }}\n userExpired={userExpired}\n showForgotPasswordButton\n />\n )}\n </>\n </div>\n )\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport './style.css'\n\nimport { Backdrop, CircularProgress, ThemeOptions } from '@mui/material'\nimport Paper from '@mui/material/Paper'\nimport { createTheme, ThemeProvider } from '@mui/material/styles'\nimport Table from '@mui/material/Table'\nimport TableBody from '@mui/material/TableBody'\nimport TableCell from '@mui/material/TableCell'\nimport TableContainer from '@mui/material/TableContainer'\nimport TableHead from '@mui/material/TableHead'\nimport TableRow from '@mui/material/TableRow'\nimport { CSSProperties } from '@mui/styles'\nimport _find from 'lodash/find'\nimport _get from 'lodash/get'\nimport _has from 'lodash/has'\nimport _identity from 'lodash/identity'\nimport _isEmpty from 'lodash/isEmpty'\nimport _map from 'lodash/map'\nimport moment from 'moment-timezone'\nimport React, { useEffect, useMemo, useState } from 'react'\nimport SVG from 'react-inlinesvg'\n\nimport {\n getOrderDetails,\n removeFromResale,\n resaleTicket,\n updateOrderCustomFields,\n updateTicketHoldersCustomFields,\n} from '../../api'\nimport EditSvg from '../../assets/images/edit.svg'\nimport { isBrowser } from '../../utils'\nimport ConfirmModal from '../confirmModal'\nimport { InitialValuesTypes, TicketResaleModal } from '../ticketResaleModal'\nimport { CustomFieldsForm } from './CustomFieldsForm'\nimport TicketsTable, { IActionColumns, ITicketTypes } from './ticketsTable'\nimport { isFieldUpdatable, renderCustomFieldValue } from './utils'\n\ninterface TicketTypes {\n currency: string;\n discount: string;\n name: string;\n price: string;\n quantity: string;\n total: string;\n groupName: string;\n guests_count: string;\n deposit_paid: string;\n remaining: string;\n}\n\ninterface OrderDetailsTypes {\n columns: Array<{ label: string }>;\n onGetOrdersSuccess: (res: any) => void;\n onGetOrdersError: (err: any) => void;\n onReturnButtonClick: (data: any) => void;\n onRemoveFromResaleSuccess: () => void;\n onRemoveFromResaleError: (err: any) => void;\n onResaleTicketSuccess: () => void;\n onResaleTicketError: (err: any) => void;\n onUpdateOrderCustomFieldsSuccess: (val: any) => void;\n onUpdateOrderCustomFieldsError: (err: any) => void;\n onUpdateTicketHolderCustomFieldsSuccess: (val: any) => void;\n onUpdateTicketHolderCustomFieldsError: (err: any) => void;\n personalLinkIcon?: string;\n displayColumnNameInRow?: boolean;\n canSellTicket?: boolean;\n themeOptions?: ThemeOptions & {\n input?: CSSProperties;\n checkbox?: CSSProperties;\n };\n ticketsTableColumns?: Array<{\n id?: string | number;\n key: keyof ITicketTypes & keyof IActionColumns;\n label: string | number | null | undefined;\n }>;\n ordersPath?: string;\n orderId?: string | number;\n referralTitle?: string;\n itemsTitle?: string;\n ticketsTitle?: string;\n displayLoading?: boolean;\n onDataLoaded?: (data: any) => void;\n}\n\nexport interface CustomFieldOption {\n id: string;\n name: string;\n value: string;\n order: string;\n}\n\nexport interface CustomFieldTypes {\n description: string;\n enabled: string;\n id: string;\n label: string;\n name: string;\n orderId: string;\n required: boolean;\n settings: {\n showOnMyTickets: boolean;\n allowUpdate: boolean;\n className: string;\n };\n type: string;\n value: string | Array<string>;\n\n ticketHash?: string;\n options?: CustomFieldOption[];\n}\n\nconst getTotal = (data: any) => {\n if (data?.total && data?.tickets && data.tickets[0]?.currency)\n return data.tickets[0].currency + data.total\n if (!data?.total || !_has(data, 'items.ticket_types.length')) return ''\n\n return data.items.ticket_types[0].currency + data.total\n}\n\nexport const OrderDetailsContainer = ({\n columns = [],\n onGetOrdersSuccess = _identity,\n onGetOrdersError = _identity,\n onRemoveFromResaleSuccess = _identity,\n onRemoveFromResaleError = _identity,\n onResaleTicketSuccess = _identity,\n onResaleTicketError = _identity,\n onUpdateOrderCustomFieldsSuccess = _identity,\n onUpdateOrderCustomFieldsError = _identity,\n onUpdateTicketHolderCustomFieldsSuccess = _identity,\n onUpdateTicketHolderCustomFieldsError = _identity,\n onReturnButtonClick,\n personalLinkIcon = '',\n displayColumnNameInRow = false,\n canSellTicket = true,\n ticketsTableColumns,\n ordersPath,\n orderId: pOrderId,\n referralTitle = '',\n itemsTitle = '',\n ticketsTitle = 'Your Tickets',\n themeOptions,\n displayLoading = true,\n onDataLoaded = _identity,\n}: OrderDetailsTypes) => {\n const [data, setData] = useState<any>({})\n const [removeFromResaleLoading, setRemoveFromResaleLoading] = useState(false)\n const [resaleTicketLoading, setResaleTicketLoading] = useState(false)\n const [showResaleModal, setShowResaleModal] = useState(false)\n const [showRemoveResaleModal, setShowRemoveResaleModal] = useState(false)\n const [activeTicket, setActiveTicket] = useState<any>(null)\n const [showOrderCustomFieldsSection, setShowOrderCustomFieldsSection] = useState(false)\n const [isLoading, setIsLoading] = useState(false)\n\n const isTable = _get(data, 'tickets[0].is_table', false)\n const columnsProps = isTable\n ? [\n { label: 'Items' },\n { label: 'Price' },\n { label: 'Guests count' },\n { label: 'Deposit paid' },\n { label: 'Remaining' },\n ]\n : columns\n const ticketHoldersCustomFields = _get(data, 'ticket_data_capture', [])\n\n const orderCustomFields = _get(data, 'data_capture', [])\n const [orderUpdatableCustomFields, orderNotUpdatableCustomFields] = useMemo(() => {\n const allowedFields: CustomFieldTypes[] = []\n const notAllowedFields: CustomFieldTypes[] = []\n\n orderCustomFields.forEach((field: CustomFieldTypes) => {\n if (isFieldUpdatable(field)) {\n allowedFields.push(field)\n } else {\n notAllowedFields.push(field)\n }\n })\n return [allowedFields, notAllowedFields]\n }, [orderCustomFields])\n const orderEditableFieldsFormInitialValues = useMemo(() => {\n const initialValues = orderUpdatableCustomFields.map((field: CustomFieldTypes) => [\n field.name,\n field.type === 'checkbox' ? Boolean(field.value) : field.value || '',\n ])\n return Object.fromEntries(initialValues)\n }, [orderUpdatableCustomFields])\n\n let orderId = String(pOrderId) || ''\n if (isBrowser && !pOrderId) {\n const params: URLSearchParams = new URL(`${window.location}`).searchParams\n orderId = params.get('o') || ''\n }\n\n let orderSummery = `ID ${data.id}, placed`\n if (data.date && data.timezone) {\n const date = moment.tz(data.date, data.timezone).format('dddd, DD MMMM YYYY')\n orderSummery += ` ${date}`\n }\n\n useEffect(() => {\n (async () => {\n try {\n let orderId = pOrderId || ''\n if (isBrowser && !pOrderId) {\n const params: URLSearchParams = new URL(`${window.location}`).searchParams\n orderId = params.get('o') || ''\n }\n setIsLoading(true)\n const response = await getOrderDetails(String(orderId))\n onGetOrdersSuccess(response)\n\n const data = _get(response, 'data.attributes')\n setData(data)\n setIsLoading(false)\n onDataLoaded(data)\n } catch (error) {\n onGetOrdersError(error)\n setIsLoading(false)\n }\n })()\n }, [onGetOrdersError, onGetOrdersSuccess, onDataLoaded, pOrderId])\n\n const handleSellTicket = (ticket: ITicketTypes) => {\n const ticketTypesArr = data.items.ticket_types\n const sellTicketType = _find(\n ticketTypesArr,\n ticketType => ticketType.hash === ticket.ticket_type_hash\n )\n setActiveTicket({\n ...ticket,\n ticket_type_is_active: sellTicketType?.active,\n })\n setShowResaleModal(true)\n }\n\n const handleOnClose = () => {\n setShowResaleModal(false)\n setActiveTicket(null)\n }\n\n const handleOnSubmit = async (values: InitialValuesTypes) => {\n if (resaleTicketLoading) {\n return\n }\n\n try {\n setResaleTicketLoading(true)\n const { to, first_name, last_name, email, confirm_email, confirm } = values\n const formData = new FormData()\n formData.append('to', to)\n formData.append('first_name', first_name)\n formData.append('last_name', last_name)\n formData.append('email', email)\n formData.append('confirm_email', confirm_email)\n formData.append('confirm', String(confirm))\n\n await resaleTicket(formData, activeTicket.hash)\n const response = await getOrderDetails(orderId)\n onGetOrdersSuccess(response)\n\n const data = _get(response, 'data.attributes')\n const updatedData = { ...data }\n updatedData?.tickets?.forEach((ticket: ITicketTypes) => {\n if (ticket.hash === activeTicket.hash) {\n ticket.is_sellable = false\n ticket.is_on_sale = true\n }\n })\n\n setData(updatedData)\n onResaleTicketSuccess()\n } catch (error) {\n onResaleTicketError(error)\n } finally {\n setShowResaleModal(false)\n setResaleTicketLoading(false)\n }\n }\n\n const handleRemoveFromResale = (ticket: ITicketTypes) => {\n setShowRemoveResaleModal(true)\n setActiveTicket(ticket)\n }\n\n const onCloseRemoveResale = () => {\n setShowRemoveResaleModal(false)\n setActiveTicket(null)\n }\n\n const onConfirmRemoveResale = async () => {\n if (removeFromResaleLoading) {\n return\n }\n\n try {\n setRemoveFromResaleLoading(true)\n await removeFromResale(activeTicket.hash)\n const response = await getOrderDetails(orderId)\n onGetOrdersSuccess(response)\n\n const data = _get(response, 'data.attributes')\n const updatedData = { ...data }\n updatedData?.tickets?.forEach((ticket: ITicketTypes) => {\n if (ticket.hash === activeTicket.hash) {\n ticket.is_sellable = true\n ticket.is_on_sale = false\n }\n })\n\n setData(updatedData)\n onRemoveFromResaleSuccess()\n } catch (error) {\n onRemoveFromResaleError(error)\n } finally {\n setShowRemoveResaleModal(false)\n setRemoveFromResaleLoading(false)\n }\n }\n\n const handleOrderCustomFieldsUpdate = async (values: Record<string, any>) => {\n setShowOrderCustomFieldsSection(false)\n try {\n // Collect all updatable and non updatable values for bulk update\n const fullUpdatableValues = orderNotUpdatableCustomFields.reduce(\n (acc, customField) => {\n acc[customField.name] = customField.value\n return acc\n },\n { ...values }\n )\n const eventId = _get(data, 'event_id')\n const response = await updateOrderCustomFields(\n eventId,\n orderId,\n fullUpdatableValues\n )\n const updatedCustomFields = _get(response, 'data.data.attributes', [])\n\n setData((prevState: Record<string, any>) => ({\n ...prevState,\n data_capture: updatedCustomFields,\n }))\n onUpdateOrderCustomFieldsSuccess(response)\n } catch (error) {\n onUpdateOrderCustomFieldsError(error)\n }\n }\n\n const handleTicketHoldersUpdate = async (\n values: Record<string, any>,\n ticketHash: string\n ) => {\n try {\n const eventId = _get(data, 'event_id')\n const response = await updateTicketHoldersCustomFields(eventId, values, ticketHash)\n const updatedFields = _get(response, 'data.data.attributes', [])\n const notUpdatedFields = ticketHoldersCustomFields.filter(\n (field: CustomFieldTypes) => field.ticketHash !== ticketHash\n )\n\n setData((prevState: Record<string, any>) => ({\n ...prevState,\n ticket_data_capture: [...updatedFields, ...notUpdatedFields],\n }))\n onUpdateTicketHolderCustomFieldsSuccess(response)\n } catch (error) {\n onUpdateTicketHolderCustomFieldsError(error)\n }\n }\n\n const theme = createTheme(themeOptions ?? {})\n\n if (isLoading || _isEmpty(data)) {\n if (displayLoading) {\n return (\n <ThemeProvider theme={theme}>\n <Backdrop\n sx={{ color: '#fff', backgroundColor: '#000000bd', zIndex: 1205 }}\n open={true}\n >\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n </ThemeProvider>\n )\n }\n\n return null\n }\n\n return (\n <ThemeProvider theme={theme}>\n <div className=\"order-details\">\n <div className=\"layout-block\">\n <h1 className=\"layout-title\">Order Details</h1>\n {!_isEmpty(orderUpdatableCustomFields) && (\n <SVG src={EditSvg} onClick={() => setShowOrderCustomFieldsSection(true)} />\n )}\n </div>\n <div className=\"order-summary-box\">\n <div className=\"summary-block\">\n <div className=\"summary-item\">\n <h6 className=\"sub-title\">Order Summary</h6>\n <p className=\"order-summary-date\">{orderSummery}</p>\n </div>\n <div className=\"summary-item\">\n <div className=\"return-button-container\">\n <button\n type=\"button\"\n className=\"return-button\"\n onClick={() => {\n if (isBrowser) {\n window.location.assign(ordersPath ?? '/orders')\n }\n }}\n >\n Back to Orders\n </button>\n </div>\n </div>\n </div>\n {!_isEmpty(orderCustomFields) && (\n <>\n <div className=\"custom-field-value-container\">\n {orderCustomFields.map((customField: CustomFieldTypes) => (\n <div className=\"info-item\" key={customField.id}>\n <b>{customField.label} :</b> {renderCustomFieldValue(customField)}\n </div>\n ))}\n </div>\n {!_isEmpty(orderUpdatableCustomFields) && (\n <div\n className={`custom-fields-block ${\n showOrderCustomFieldsSection ? 'show' : ''\n }`}\n >\n <p className=\"title\">Aditional Information Request</p>\n <CustomFieldsForm\n initialValues={orderEditableFieldsFormInitialValues}\n fields={orderUpdatableCustomFields}\n handleFormSubmit={handleOrderCustomFieldsUpdate}\n handleFormClose={() => setShowOrderCustomFieldsSection(false)}\n />\n </div>\n )}\n </>\n )}\n {!data?.disable_referral && (\n <>\n {referralTitle && (\n <h4 className=\"referral-title sub-title\">{referralTitle}</h4>\n )}\n <div className=\"personal-link\">\n <div className=\"link-item\">\n <span>Personal Share Link: </span>\n <a href={data?.personal_share_link} target=\"_blank\" rel=\"noreferrer\">\n {Boolean(personalLinkIcon) && (\n <img src={personalLinkIcon} alt=\"Icon\" />\n )}\n {data?.personal_share_link}\n </a>\n </div>\n {data?.sales_referred ? (\n <div className=\"link-item\">\n <p className=\"total-referrer\">{`So far, you’ve referred ${data.sales_referred} tickets`}</p>\n </div>\n ) : null}\n </div>\n </>\n )}\n {itemsTitle && <h4 className=\"items-title sub-title\">{itemsTitle}</h4>}\n <TableContainer component={Paper}>\n <Table className=\"tt-type\" aria-label=\"collapsible table\">\n <TableHead>\n <TableRow>\n {_map(columnsProps, item => (\n <TableCell>{item.label || ''}</TableCell>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {data?.items?.ticket_types?.map((ticket: TicketTypes, index: number) =>\n data?.tickets && !data?.tickets[0].is_table ? (\n <TableRow key={index}>\n <TableCell>\n <b>Ticket Type:</b> {ticket.name}\n </TableCell>\n <TableCell>{ticket.currency + ticket.price}</TableCell>\n <TableCell>{ticket.quantity}</TableCell>\n <TableCell>{ticket.currency + ticket.total}</TableCell>\n </TableRow>\n ) : (\n <TableRow key={index}>\n <TableCell>\n <b>Ticket Type:</b> {ticket.name}\n </TableCell>\n <TableCell>{ticket.currency + ticket.price}</TableCell>\n <TableCell>{ticket.guests_count}</TableCell>\n <TableCell>{ticket.deposit_paid}</TableCell>\n <TableCell>{ticket.remaining}</TableCell>\n </TableRow>\n )\n )}\n {data?.items?.add_ons?.map((ticket: TicketTypes, index: number) => (\n <TableRow key={index}>\n <TableCell>\n <div>\n <b>Add-On</b>\n <div>\n {ticket.groupName && `${ticket.groupName}: `} {ticket.name}\n </div>\n </div>\n </TableCell>\n <TableCell>{ticket.currency + ticket.price}</TableCell>\n <TableCell>{ticket.quantity}</TableCell>\n <TableCell>{ticket.currency + ticket.total}</TableCell>\n </TableRow>\n ))}\n <TableRow className=\"total-row\">\n <TableCell />\n <TableCell />\n <TableCell>Total</TableCell>\n <TableCell>{getTotal(data)}</TableCell>\n </TableRow>\n </TableBody>\n </Table>\n </TableContainer>\n </div>\n <TicketsTable\n ticketsTitle={ticketsTitle}\n tickets={data.tickets}\n columns={\n ticketsTableColumns?.length\n ? ticketsTableColumns\n : [\n { key: 'hash' as never, label: 'Ticket ID' },\n { key: 'ticket_type' as never, label: 'Ticket Type' },\n { key: 'holder_name' as never, label: 'Ticket Holder' },\n { key: 'status' as never, label: 'Status' },\n { key: 'download' as never, label: '' },\n { key: 'sell_ticket' as never, label: '' },\n ]\n }\n handleSellTicket={handleSellTicket}\n handleRemoveFromResale={handleRemoveFromResale}\n displayColumnNameInRow={displayColumnNameInRow}\n canSellTicket={canSellTicket}\n ticketHoldersCustomFields={ticketHoldersCustomFields}\n handleTicketHoldersUpdate={handleTicketHoldersUpdate}\n />\n <div className=\"return-button-container\">\n <button\n type=\"button\"\n className=\"return-button\"\n onClick={() => {\n if (onReturnButtonClick) {\n onReturnButtonClick(data)\n } else if (isBrowser) {\n window.location.assign(ordersPath ?? '/orders')\n }\n }}\n >\n Return to Order History\n </button>\n </div>\n {showResaleModal && (\n <TicketResaleModal\n ticket={activeTicket}\n onClose={handleOnClose}\n onSubmit={handleOnSubmit}\n loading={resaleTicketLoading}\n />\n )}\n {showRemoveResaleModal && (\n <ConfirmModal\n message=\"Are you sure you want to withdraw your ticket from resale?\"\n onClose={onCloseRemoveResale}\n onConfirm={onConfirmRemoveResale}\n loading={removeFromResaleLoading}\n />\n )}\n </div>\n </ThemeProvider>\n )\n}\n","import { createTheme, ThemeProvider } from '@mui/material/styles'\nimport _identity from 'lodash/identity'\nimport _slice from 'lodash/slice'\nimport React, { useEffect, useState } from 'react'\n\nimport { getPreRegistrationInfluencers } from '../../api/preRegistrationComplete'\nimport { Influancers } from './Influancers'\nimport { Prewards } from './Prewards'\n\nexport const PreRegistrationInformations = (props: IPreRegistrationInformationProps) => {\n const {\n classNamePrefix,\n eventId,\n onGetPreregistrationDataSuccess = _identity,\n onGetPreregistrationDataError = _identity,\n influancersHeaderNode,\n prewardsHeaderNode,\n themeOptions,\n } = props\n\n const themeMui = createTheme(themeOptions)\n\n const [prizes, setPrizes] = useState([] as Array<IPrizeData>)\n const [influencers, setInfluencers] = useState([] as Array<IInfluencerData>)\n const topInfluancers = _slice(influencers, 0, 10)\n useEffect(() => {\n const fetchPreregistrationData = async () => {\n try {\n const preregistrationData = await getPreRegistrationInfluencers({\n eventId,\n })\n setPrizes(preregistrationData.data.attributes.prizes)\n setInfluencers(preregistrationData.data.attributes.influencers)\n onGetPreregistrationDataSuccess()\n } catch (error) {\n if (error) {\n onGetPreregistrationDataError()\n }\n }\n }\n fetchPreregistrationData()\n }, [eventId, onGetPreregistrationDataError, onGetPreregistrationDataSuccess])\n\n return (\n <ThemeProvider theme={themeMui}>\n <div className={`${classNamePrefix}_pre_registration_info_container`}>\n <Prewards\n headerNode={prewardsHeaderNode}\n data={prizes}\n classNamePrefix={classNamePrefix}\n />\n <Influancers\n headerNode={influancersHeaderNode}\n data={topInfluancers}\n classNamePrefix={classNamePrefix}\n />\n </div>\n </ThemeProvider>\n )\n}\n","import { Alert } from '@mui/material'\nimport axios from 'axios'\nimport _find from 'lodash/find'\nimport _forEach from 'lodash/forEach'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport _isEmpty from 'lodash/isEmpty'\nimport _isEqual from 'lodash/isEqual'\nimport _keys from 'lodash/keys'\nimport _map from 'lodash/map'\nimport _values from 'lodash/values'\nimport moment from 'moment'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\nimport Countdown, { CountdownRenderProps } from 'react-countdown'\n\nimport {\n getSeatMapData,\n getSeatMapStatuses,\n removeSeatReserve,\n reserveSeat,\n} from '../../api'\nimport { useOnline } from '../../hooks/useOnline'\nimport { showZero } from '../../utils/showZero'\nimport { ReferralLogic } from '../ticketsContainer/ReferralLogic'\nimport { addToCartFunc } from './addToCart'\nimport { SeatMapComponent } from './SeatMapComponent'\nimport { TicketsSection } from './TicketsSection'\nimport {\n getAddToCartRequestData,\n getOwnReservationsBasedOnStatuses,\n getTicketDropdownData,\n getTierIdBasedOnSeatId,\n} from './utils'\n\nconst OFFLINE_MESSAGE = 'Offline.'\n\ninterface IGuestCounts {\n [key: string]: number;\n}\n\nexport const SeatMapContainer = (props: IMapContainerProps) => {\n const {\n event: {\n id: eventId,\n currency: { symbol },\n tableMapEnabled,\n country,\n },\n mapContainerId,\n timerMessage = '',\n onAddToCartSuccess = _identity,\n onCountdownFinish = _identity,\n ticketDeleteButtonContent,\n ticketInfoContent,\n } = props\n\n const [seatMapData, setSeatMapData] = useState({\n seatMap: '',\n } as {\n seatMap: string;\n seatReservationTime: number;\n seatMapType: string | null;\n tierPrices: any;\n predefinedSeats: any;\n })\n const eventSeatsRef = useRef([] as EventSeat[])\n const ticketTypeTierRelationsRef = useRef({} as TicketTypeTierRelations)\n const [selectedTickets, setSelectedTickets] = useState<{\n [seatId: string]: string;\n }>({})\n const [seatMapStatuses, setSeatMapStatuses] = useState('')\n const [reservedSeats, setReservedSeats] = useState<Array<SeatReservationData>>([])\n const [isLoadingSeatMapData, setIsLoadingSeatMapData] = useState(true)\n const [isLoadingStatuses, setIsLoadingStatuses] = useState(false)\n const [isReserving, setIsReserving] = useState(false)\n const [isAddingToCart, setIsAddingToCart] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [showTimer, setShowTimer] = useState(\n Date.now() <= Number(localStorage.getItem(`reservationStart-${eventId}`))\n )\n const [guestCounts, setGuestCounts] = useState<IGuestCounts>({} as IGuestCounts)\n const [isOnline, setIsOnline] = useState(true)\n const isGuestCountsSet = useRef(false)\n\n useOnline(setIsOnline)\n\n const updateGuestCounts = (data: any) => {\n _forEach(data, (item: any) => {\n const tierTickets = ticketTypeTierRelationsRef.current[item.tierId]\n const seatTicketsArray = _values(tierTickets)\n\n setGuestCounts((prevState: any) => ({\n [item.seatId]: Number(seatTicketsArray[0].ticket_type_min_number_of_guests),\n ...prevState,\n }))\n })\n }\n\n const fetchSeatMapData = useCallback(async () => {\n try {\n const seatMapDataResponse = await getSeatMapData(eventId)\n const {\n data: {\n attributes: {\n seatData,\n ticketTypeTierRelations,\n eventSeats,\n seatReservationTime,\n seatMapType,\n tierPrices,\n predefinedSeats,\n },\n },\n } = seatMapDataResponse\n eventSeatsRef.current = eventSeats\n ticketTypeTierRelationsRef.current = ticketTypeTierRelations\n setSeatMapData({\n seatMap: JSON.parse(seatData),\n seatReservationTime,\n seatMapType,\n tierPrices,\n predefinedSeats,\n })\n } catch (error) {\n setError('Something went wrong')\n } finally {\n setIsLoadingSeatMapData(false)\n }\n }, [eventId])\n\n const fetchSeatMapReservations = useCallback(async () => {\n if (isOnline) {\n try {\n const statusesResponse = await getSeatMapStatuses(eventId)\n const statuses = _get(statusesResponse, 'data.attributes') || {}\n const reservationData: Array<SeatReservationData> = []\n const ownReservations: string[] = getOwnReservationsBasedOnStatuses(statuses)\n\n _forEach(ownReservations, reservation => {\n const tierIdOfReservation = getTierIdBasedOnSeatId(\n reservation,\n eventSeatsRef.current\n ) as string\n reservationData.push({\n seatId: reservation,\n tierId: tierIdOfReservation,\n type: 'reserve',\n })\n })\n\n localStorage.setItem('reservationData', JSON.stringify(reservationData))\n\n if (!_isEqual(seatMapStatuses, statusesResponse.data.attributes)) {\n setSeatMapStatuses(statusesResponse.data.attributes)\n }\n if (!_isEqual(reservationData, reservedSeats)) {\n setReservedSeats(reservationData)\n }\n\n // automatically set ticket/table type if it's the only one\n if (\n ticketTypeTierRelationsRef.current &&\n !_isEqual(reservationData, reservedSeats)\n ) {\n if (!isGuestCountsSet.current) {\n updateGuestCounts(reservationData)\n isGuestCountsSet.current = true\n }\n _forEach(reservationData, (item: any) => {\n const tierTickets = ticketTypeTierRelationsRef.current[item.tierId]\n const seatTicketsArray = _values(tierTickets)\n\n setSelectedTickets((prevState: any) => ({\n ...prevState,\n [item.seatId]:\n seatTicketsArray.length === 1 ? seatTicketsArray[0].ticket_type_id : '',\n }))\n })\n\n if (_isEmpty(reservationData)) {\n setGuestCounts({})\n setSelectedTickets({})\n }\n }\n } catch (error) {\n setError('Something went wrong')\n }\n }\n }, [eventId, seatMapStatuses, reservedSeats, isOnline])\n\n const startTimer = useCallback(\n (duration: number) => {\n setShowTimer(true)\n\n if (!localStorage.getItem(`reservationStart-${eventId}`)) {\n localStorage.setItem(`reservationStart-${eventId}`, String(Date.now() + duration))\n }\n },\n [eventId]\n )\n\n const endTimer = useCallback(() => {\n localStorage.removeItem(`reservationStart-${eventId}`)\n setShowTimer(false)\n }, [eventId])\n\n const handleSeatReservation = async (\n eventId: string,\n tierId: string,\n seatId: string\n ) => {\n setIsReserving(true)\n try {\n await reserveSeat(eventId, tierId, seatId)\n await fetchSeatMapReservations()\n\n startTimer(seatMapData.seatReservationTime * 60000)\n const reservationData = JSON.parse(localStorage.getItem('reservationData') || '')\n setReservedSeats(reservationData)\n updateGuestCounts(reservationData)\n\n // automatically set ticket/table type if it's the only one\n const relations = _keys(ticketTypeTierRelationsRef.current[tierId])\n const [firstItem] = _keys(ticketTypeTierRelationsRef.current[tierId])\n handleTicketSelect(relations.length === 1 ? firstItem : '', seatId)\n } catch (error) {\n setError(\n error?.response?.data?.message === 'Selected seat is not available'\n ? // eslint-disable-next-line max-len\n 'No more of this ticket type are available right now - they’re either sold out or in people’s shopping carts. Try refreshing the page!'\n : 'Something went wrong'\n )\n } finally {\n setIsReserving(false)\n }\n }\n\n const handleCancelSeatReservtion = async (\n eventId: string,\n tierId: string,\n seatId: string\n ) => {\n setIsReserving(true)\n try {\n await removeSeatReserve(eventId, tierId, [seatId])\n await fetchSeatMapReservations()\n if (_isEmpty(JSON.parse(localStorage.getItem('reservationData') as string))) {\n endTimer()\n }\n const reservationData = JSON.parse(localStorage.getItem('reservationData') || '')\n const currentSelectedTickets = { ...selectedTickets }\n delete currentSelectedTickets[seatId]\n setReservedSeats(reservationData)\n setSelectedTickets(currentSelectedTickets)\n } catch (error) {\n setError('Something went wrong')\n } finally {\n setIsReserving(false)\n }\n }\n\n const onSeatClick = async (seatInfo: {\n seat: {\n tierId: string;\n seatId: string;\n status: string;\n };\n }) => {\n const {\n seat: { tierId, seatId, status },\n } = seatInfo\n\n const reservationData = JSON.parse(localStorage.getItem('reservationData') || '[]')\n if (status === 'B' || status === 'R' || status === 'BLOCKED' || status === 'RE')\n return\n if (_find(reservationData, data => data.seatId === seatId)) {\n handleCancelSeatReservtion(eventId, tierId, seatId)\n } else if (reservationData.length >= 10) {\n setError('Limit exceeded')\n } else {\n handleSeatReservation(eventId, tierId, seatId)\n }\n }\n\n const handleTicketSelect = (ticketId: string, seatId: string) => {\n const currentSelectedTickets = { ...selectedTickets }\n currentSelectedTickets[seatId] = ticketId\n setSelectedTickets(currentSelectedTickets)\n }\n\n const handleGetTicketBtnClick = async () => {\n setIsAddingToCart(true)\n const ticketsDropdownsData = getTicketDropdownData(\n reservedSeats,\n ticketTypeTierRelationsRef.current\n )\n let selectedSeats = {}\n _forEach(ticketsDropdownsData, ticketData => {\n selectedSeats = {\n ...selectedSeats,\n [ticketData.seatId]: ticketData.ticketsData,\n }\n })\n const addToCartData = getAddToCartRequestData({\n eventId,\n reservations: _map(reservedSeats, seat => seat.seatId),\n selectedSeats,\n selectedTickets,\n guestCounts,\n })\n try {\n const response = await addToCartFunc({\n eventId,\n data: addToCartData,\n ticketQuantity: addToCartData?.attributes?.product_cart_quantity,\n })\n localStorage.removeItem('reservationData')\n onAddToCartSuccess(response)\n } catch (error) {\n if (axios.isAxiosError(error)) {\n const message = _get(error, 'response.data.message', '')\n setError(message)\n }\n } finally {\n setIsAddingToCart(false)\n }\n }\n\n useEffect(() => {\n if (Date.now() > Number(localStorage.getItem(`reservationStart-${eventId}`))) {\n setSelectedTickets({})\n setReservedSeats([])\n }\n\n const makeRequests = async () => {\n try {\n setIsLoadingStatuses(true)\n await fetchSeatMapData()\n await fetchSeatMapReservations()\n } catch (error) {\n setError('Something went wrong')\n } finally {\n setIsLoadingStatuses(false)\n }\n }\n\n makeRequests()\n\n if (country) {\n localStorage.setItem('eventCountry', country)\n }\n }, [country, eventId, fetchSeatMapData])\n\n useEffect(() => {\n const intervalId = setInterval(() => {\n fetchSeatMapReservations()\n }, 3000)\n\n return () => {\n clearInterval(intervalId)\n }\n }, [fetchSeatMapReservations])\n\n useEffect(() => {\n if (!isOnline) {\n setError(OFFLINE_MESSAGE)\n } else if (isOnline && error === OFFLINE_MESSAGE) {\n setError(null)\n }\n }, [error, isOnline])\n\n return (\n <>\n {error && (\n <Alert\n severity=\"error\"\n onClose={() => {\n setError(null)\n }}\n variant=\"filled\"\n style={{ width: '350px' }}\n >\n {error}\n </Alert>\n )}\n {showTimer && (\n <Countdown\n date={moment(\n Number(localStorage.getItem(`reservationStart-${eventId}`))\n ).valueOf()}\n renderer={(props: CountdownRenderProps) => (\n <div className=\"reservation-countdown\">\n <span className=\"reservation-message\">{timerMessage}</span>\n <span className=\"reservation-timer\">\n {showZero(props.minutes)}:{showZero(props.seconds)}\n </span>\n </div>\n )}\n onComplete={() => {\n endTimer()\n setSelectedTickets({})\n setReservedSeats([])\n if (onCountdownFinish) {\n onCountdownFinish()\n }\n }}\n />\n )}\n {!isLoadingSeatMapData && !isLoadingStatuses && <ReferralLogic eventId={eventId} />}\n <TicketsSection\n selectedTickets={selectedTickets}\n handleTicketSelect={handleTicketSelect}\n handleCancelReservation={(seatId: string, tireId: string) =>\n handleCancelSeatReservtion(eventId, tireId, seatId)\n }\n handleGetTicketClick={handleGetTicketBtnClick}\n isAddingToCart={isAddingToCart}\n reservedSeats={reservedSeats}\n ticketDeleteButtonContent={ticketDeleteButtonContent}\n ticketInfoContent={ticketInfoContent}\n ticketTypeTierRelations={ticketTypeTierRelationsRef.current}\n currencySymbol={symbol}\n tableMapEnabled={Boolean(tableMapEnabled)}\n guestCounts={guestCounts}\n setGuestCounts={setGuestCounts}\n />\n <SeatMapComponent\n seatMapProps={{\n seatData: seatMapData.seatMap,\n statuses: seatMapStatuses,\n tierPrices: seatMapData.tierPrices,\n seatMapType: seatMapData.seatMapType,\n ticketTypeTierRelations: ticketTypeTierRelationsRef.current,\n seatMapEvents: { onSeatClick },\n isReserving,\n predefinedSeats: seatMapData.predefinedSeats,\n isLoadingSeatMapData,\n }}\n mapContainerId={mapContainerId}\n />\n </>\n )\n}\n","import { useEffect } from 'react'\n\nexport const useOnline = (handler: (value: boolean) => void) => {\n useEffect(() => {\n const handleOffline = () => {\n handler(false)\n }\n const handleOnline = () => {\n handler(true)\n }\n\n window.addEventListener('offline', handleOffline)\n window.addEventListener('online', handleOnline)\n\n return () => {\n window.removeEventListener('offline', handleOffline)\n window.removeEventListener('online', handleOnline)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n}\n","import { AxiosError } from 'axios'\nimport _get from 'lodash/get'\nimport React, { useEffect, useState } from 'react'\n\nimport { declineInvitation, processTicket } from '../../api'\n\nexport interface ITicketResaleContainer {\n onProcessTicketSuccess: (res: any) => void;\n onProcessTicketError: (e: AxiosError) => void;\n onDeclineTicketPurchaseSuccess: (res: any) => void;\n onDeclineTicketPurchaseError: (e: AxiosError) => void;\n orderHash?: string;\n billingPath?: string;\n defaultRedirection?: boolean;\n}\n\nexport const TicketResaleContainer = ({\n onProcessTicketSuccess = () => {},\n onProcessTicketError = () => {},\n onDeclineTicketPurchaseSuccess = () => {},\n onDeclineTicketPurchaseError = () => {},\n orderHash,\n billingPath,\n defaultRedirection = true,\n}: ITicketResaleContainer) => {\n const isWindowDefined = typeof window !== 'undefined'\n const [error, setError] = useState('')\n const [successMessage, setSuccessMessage] = useState('')\n\n useEffect(() => {\n (async () => {\n if (isWindowDefined) {\n const params: URLSearchParams = new URL(`${window.location}`).searchParams\n const hash = params.get('invitation_hash') || orderHash || null\n const isDeclined = params.get('decline') || false\n window.localStorage.removeItem('checkoutAdditionalConfigs')\n\n if (hash) {\n // Process of declining ticket purchase invitation\n if (isDeclined) {\n try {\n const response = await declineInvitation(hash)\n onDeclineTicketPurchaseSuccess(response)\n setSuccessMessage(\n \"Thanks for letting us know! We'll offer this ticket to someone else!\"\n )\n } catch (error) {\n setError(error?.response?.data?.message)\n onDeclineTicketPurchaseError(error.response)\n }\n return\n }\n\n try {\n const response = await processTicket(hash)\n const event_id = _get(response.data.data.attributes, 'event_id')\n const eventHasAddons = _get(response.data.data.attributes, 'has_add_on')\n const invitationIncludesAddons = _get(response.data.data.attributes, 'include_add_on')\n window.localStorage.setItem('checkoutAdditionalConfigs', JSON.stringify({\n resale: true,\n resaleWithAddons: eventHasAddons && invitationIncludesAddons,\n }))\n\n onProcessTicketSuccess(response.data)\n if (defaultRedirection) {\n window.location.href = `${billingPath ?? '/billing/billing-info'}?event_id=${event_id}`\n }\n } catch (error) {\n setError(error?.response?.data?.message)\n onProcessTicketError(error.response)\n }\n } else {\n window.location.href = '/'\n }\n }\n })()\n }, [])\n\n return (\n <div className=\"ticket-resale-page\">\n <div className={`${successMessage ? 'success-block' : 'error-block'}`}>\n <h3>{successMessage ? successMessage : error}</h3>\n </div>\n </div>\n )\n}\n","import { useEffect, useState } from 'react'\n\nexport function useLocalStorageListener(\n key: string,\n callback: (value: string | null) => void\n): string | null {\n const isWindowDefined = typeof window !== 'undefined'\n const [value, setValue] = useState<string | null>(\n isWindowDefined ? localStorage.getItem(key) : ''\n )\n\n useEffect(() => {\n const intervalId = setInterval(() => {\n const newValue = localStorage.getItem(key)\n if (newValue !== value) {\n setValue(newValue)\n if (newValue) {\n const parsed = JSON.parse(newValue)\n if (parsed) {\n callback(parsed)\n }\n }\n }\n }, 100)\n\n return () => {\n clearInterval(intervalId)\n }\n }, [key, value, callback])\n\n return value\n}\n"],"names":["headers","Accept","Content-Type","isWindowDefined","window","authGuestToken","localStorage","getItem","publicRequest","axios","create","baseURL","withCredentials","interceptors","request","use","config","getCookieByName","setBaseUrl","baseUrl","defaults","setGuestToken","guestToken","common","generalDomain","CONFIGS","FEES_STYLE","getQueryVariable","variable","vars","location","search","substring","split","i","length","pair","decodeURIComponent","ErrorFocus","connect","componentDidUpdate","prevProps","formik","isSubmitting","isValidating","keys","Object","errors","errorElement","document","querySelector","focus","Component","getDomain","url","subdomain","publicSuffix","updatedUrl","replace","updatedPublicSuffix","startsWith","slice","join","indexOf","cname","name","ca","cookie","c","charAt","deleteCookieByName","hostname","endsWith","domain","undefined","downloadPDF","pdfUrl","xtfCookie","X-TF-ECOMMERCE","fetch","credentials","then","response","_context","blob","blobValue","fileNameHeader","get","fileName","Error","file","Blob","type","fileURL","URL","createObjectURL","link","createElement","href","setAttribute","body","appendChild","click","removeChild","error","createCheckoutDataBodyWithDefaultHolder","ticketsQuantity","logedInValues","includeDob","userCredentials","ticket_holders","first_name","_get","last_name","phone","email","push","attributes","confirm_email","holderAgeDate","Date","dob_day","getDate","dob_month","getMonth","dob_year","getFullYear","createMarkup","data","__html","replaceVarInString","message","varArray","re","RegExp","index","_","value","isBrowser","getFormInitialValues","fieldsSections","initialValues","userData","JSON","parse","_forEach","item","fields","fieldItem","setLoggedUserData","id","firstName","lastName","confirmEmail","city","country","countryId","street_address","streetAddress","state","stateId","zip","zipCode","logoutUser","onLogoutSuccess","onLogoutError","setIsLogged","logout","removeItem","event","CustomEvent","dispatchEvent","getFieldsKeys","customFields","_map","field","isJson","e","additionalCookiesHeaderValue","X_SOURCE_ORIGIN","BASE_URL","setItem","method","days","expires","date","setTime","getTime","toUTCString","setCustomCookie","_error$response","status","Promise","reject","optionsAdapter","options","option","label","fieldDataAdapter","required","description","restValues","adaptedField","className","multiline","radios","isMultiple","customFieldsDataAdapter","adaptedTicketFields","adaptedOrderFields","adaptedAddOnFields","ticketFields","orderFields","addOnFields","ticketField","orderField","addOnField","ticketsFields","authorize","post","CLIENT_ID","register","_context3","getProfileData","_context4","_context5","checkEmailExists","_context6","formData","FormData","append","_publicRequest$defaul","exists","console","getOrders","page","limit","eventSlug","slug","EVENT_SLUG","BRAND_SLUG","getOrderDetails","orderId","_context2","addToCart","Referer-Url","referrer","getCart","postOnCheckout","freeTicket","updateCheckout","getEvent","pk","referralValue","params","referralId","searchParams","referral_key","_split","referralIdlocal","invitationHash","Referrer-Id","getTickets","eventId","promoCode","promoterId","String","ticketsArr","tickets","adaptedResponse","getTimeSlotsByDate","remove_past_slots","getCountries","getStates","sendRSVPInfo","addToWaitingList","_context7","postReferralVisits","_context8","validatePhoneNumber","_context9","getPaymentData","hash","handlePaymentSuccess","orderHash","handleFreeSuccess","getConfirmationData","getConditions","adaptedData","nanoid","text","checked","returnData","resaleTicket","removeFromResale","processTicket","declineInvitation","getCustomerExistsData","accessHash","getDelegationTickets","issueTicket","setCustomHeader","guestHeaderResponseValue","guestHeaderExistingValue","guestHeader","createPaymentPlan","stripePaymentMethodId","stripe_payment_method_id","forgotPassword","getAddons","addons","getCheckoutPageConfigs","getCustomFields","updateOrderCustomFields","customFieldsData","put","order_id","data_capture","updateTicketHoldersCustomFields","ticketHash","ticket_hash","ticket_data_capture","confirmPreRegistration","getSeatMapData","reservedSeatsHash","reserved_seats_hash","getSeatMapStatuses","reserveSeat","tierId","seatId","ttl","removeSeatReserve","seatIds","_context10","getNetverifyUrl","_context11","checkVerificationStatus","_context12","updateVerificationStatus","_context13","patch","verification","verificationStatus","checkCustomerOrder","_context14","withCustomFields","Children","props","_props$ticketHoldersF","ticketHoldersFields","_props$skipCustomFiel","skipCustomFields","_props$onGetCustomFie","onGetCustomFieldsError","_identity","_props$onGetCustomFie2","onGetCustomFieldsSuccess","args","useState","lodaing","setLoading","setCustomFieldsData","customFieldsOrderKeys","setCustomFieldsOrderKeys","customFieldsTicketHolderKeys","setCustomFieldsTicketHolderKeys","customFieldsAddOnKeys","setCustomFieldsAddOnKeys","getFields","orderFieldsKeys","ticketHoldersFieldsKeys","addOnFieldsKeys","useEffect","initialData","_isEmpty","dataWithCustomFields","ticketHoldersWithCustomFields","orderWithCustomFields","groupClassname","groupItems","initialDataFields","splice","ticketHoldersFieldsArr","ticketHoldersCustomFieldsBlueprint","getDataWithCustomFields","addOnDataWithCustomFields","React","CircularProgress","size","appendScriptsToHeader","code","tempEl","innerHTML","scripts","getElementsByTagName","script","src","head","addGTagToHeader","tagId","links","_document","_document2","trim","scriptBody","dataLayer","gtag","_window","domains","usePixel","getScript","page_url","pageOptions","pageUrl","order_hash","brandGoogleTagKey","eventGoogleTagKey","eventGoogleTagManagerLinkerDomains","emailRegex","combineValidators","validators","error_message","requiredValidator","errorMessage","addEventListener","err","isFalsy","emailValidator","test","passwordValidator","password","currencyNormalizerCreator","currency","getCurrencySymbolByCurrency","createFixedFloatNormalizer","fixedValue","toFixed","style","position","top","left","transform","minWidth","backgroundColor","border","outline","padding","maxHeight","overflow","Modal","_ref$actions","actions","_ref$modalClassName","modalClassName","MuiModal","open","onClose","Box","children","action","Button","key","onClick","disabled","loading","variant","VerificationPendingModal","displayModal","showModal","setShowModal","Boolean","InfoIcon","xmlns","width","height","viewBox","fill","cx","cy","r","stroke","strokeWidth","x","y","showZero","intNumber","Number","_isNumber","TimerWidget","expires_at","buyLoading","_ref$onCountdownFinis","onCountdownFinish","container","showTimer","setShowTimer","handleCountdownFinish","timerComponent","timerRl","visibility","SVG","Countdown","now","renderer","minutes","seconds","completed","ReactDOM","createPortal","memo","addonsWithGroupsAdapter","addonsData","addOnsGroups","addOnGroupsWithVariants","addOnsWithoutVariants","forEach","addon","addOnGroupId","currentGroupId","exsistingGroupIndex","findIndex","addOnGroup","variants","group","find","concat","map","cartAdapter","cart","cartData","quantity","expiresAt","CheckboxField","_ref$form","form","isTouched","touched","errorText","hasError","customTheme","useTheme","FormControl","FormGroup","FormControlLabel","control","Checkbox","componentsProps","typography","checkbox","FormHelperText","rest","_rest$form","CheckboxMaterial","_rest$form2","CustomField","_ref2$type","_ref2$selectOptions","selectOptions","_ref2$form","submitCount","theme","_ref2$inputProps","inputProps","pInputProps","_ref2$InputProps","InputProps","inputRef","onChange","_ref2$multiline","_ref2$minRows","minRows","maxRows","isShrinked","setIsShrinked","showPassword","setShowPassword","_ref","useRef","isAutoFilled","current","_ref$current","matches","_ref$current2","isSelectField","isPasswordField","_includes","sx","input","finalInputProps","endAdornment","InputAdornment","IconButton","onMouseDown","preventDefault","edge","color","_customTheme$input","VisibilityOff","Visibility","_isFunction","_isObject","TextField","placeholder","select","fullWidth","helperText","onFocus","SelectProps","native","MenuProps","PaperProps","& .MuiMenuItem-root","paddingLeft","paddingRight","InputLabelProps","shrink","onBlur","MenuItem","PhoneNumberField","setFieldError","values","setFieldValue","setFieldTouched","setErrors","_ref$disableDropdown","disableDropdown","_ref$defaultCountry","defaultCountry","_ref$fill","setPhoneValidationIsLoading","isCountryCodeEditable","isSubmitAttempted","debounceCb","useCallback","_debounce","cb","newErrors","MuiPhoneNumber","dialCode","autoFormat","disableAreaCodes","countryCodeEditable","Loader","SelectField","_ref$options","_ref$onChange","_field$value","selectId","getSelectedItemLabel","selectedValue","selectedItem","InputLabel","Select","labelId","multiple","target","OutlinedInput","renderValue","selected","textAlign","ListItemText","primary","CopyMessageModal","showCopyModal","compactStyles","& > div","& > div > div, & > div > div > div, & .MuiCalendarPicker-root","& .MuiTypography-caption","margin","& .PrivatePickersSlideTransition-root","minHeight","DATE_SIZE","& .PrivatePickersSlideTransition-root [role=\"row\"]","& .MuiPickersDay-dayWithMargin","& .MuiPickersDay-root","& .MuiPickersArrowSwitcher-spacer","& [role=\"presentation\"] .PrivatePickersFadeTransitionGroup-root","marginRight","DatePickerField","isCompact","baseThemeOptions","_ref$useCompact","useCompact","themeOptions","_ref$dateFormat","dateFormat","_ref$placeholder","ThemeProvider","createTheme","assign","components","MuiPaper","defaultProps","LocalizationProvider","dateAdapter","AdapterMoment","DatePicker","PopperProps","placement","showDaysOutsideCurrentMonth","disableFuture","inputFormat","mask","renderInput","evt","NativeSelectField","_ref$type","_ref$selectOptions","htmlFor","RadioGroupField","_ref$radios","radioId","FormLabel","RadioGroup","radio","Radio","getInitialValues","propsInitialValues","userValues","results","_flatMapDeep","ticketHoldersCustomFields","_ticketHoldersFields","_ticketHoldersFields$","groupItem","_ticketHoldersFields$2","ticketHoldersCustomFieldsInitValues","selectedTicketsCount","customField","getValidateFunctions","element","states","validationFunctions","onValidate","confirmPassword","assingUniqueIds","itemValue","_isArray","some","uniqueId","getFieldLabel","configs","flagRequirePhone","collectMandatoryWalletAddress","isRequiredField","isValidElement","getFieldComponent","select_multi","AddonComponent","classNamePrefix","_ref$handleAddonChang","handleAddonChange","_ref$onCustomFieldCha","onCustomFieldChange","active","stock","_isNull","Field","component","fieldName","Comp","validate","v","_e$target","getNormalizedPrice","generateSelectOptions","minCount","maxCount","generateStockBasedOnLimitations","ticketQuantity","allowedStockCount","maxQuantity","limitPerTicket","flagLimitToTicketQuantity","stockBasedOnLimitPerTicket","filterStockBasedOnAvailability","generatedStock","availableStock","filteredStockCount","getAddonSelectOptions","choosedTicketCount","addonsWithOptions","groupsWithSelectedVariantsInfo","groupsWithVariants","simpleAddonStock","variantId","variantStock","stockBasedOnLimitation","choosedVariants","selectedCount","allowedVariantStockCount","variantOptions","addonOptions","getTicketRelatedAddons","ticketId","filter","prerequisiteTicketTypeIds","includes","getSortedAddons","sortDirection","addonsCopy","unsortedVariants","sortOrder","sortedVariants","_sortBy","sortedAddons","_reverse","AddonsContainter","_ref$enableBillingInf","enableBillingInfoAutoCreate","_ref$enableTimer","enableTimer","_ref$onGetAddonsPageI","onGetAddonsPageInfoSuccess","_ref$onGetAddonsPageI2","onGetAddonsPageInfoError","_ref$onPostCheckoutSu","onPostCheckoutSuccess","_ref$onPostCheckoutEr","onPostCheckoutError","_ref$onConfirmSelecti","onConfirmSelectionSuccess","_ref$onConfirmSelecti2","onConfirmSelectionError","_ref$onPendingVerific","onPendingVerification","samePage","_ref$descriptionTrigg","descriptionTrigger","_ref$onAddOnSelect","onAddOnSelect","setAddons","addonsOptions","setAddonsOptions","groupsWithSelectedVariants","setGroupsWithSelectedVariants","groupsWithInitialVariantsValues","setGroupsWithInitialVariantsValues","cartExpirationTime","setCartExpirationTime","pendingVerificationMessage","setPendingVerificationMessage","visibleDescription","setVisibleDescription","_cartAdapter","choosedTicketID","adaptedAddons","ticketRelatedAddons","sortedTicketAddons","_getAddonSelectOption","getAddonsPageInfo","onFieldChange","changeableGroup","currGroupId","currSelectedVariantId","currSelectedVariantCount","updatedGroupsWithSelectedVariants","groupId","changedGroupd","remainingGroupStock","recreatedVariantsOptions","variantCurrSelectedValue","prevState","recreateGroupVariantsSelectOptions","handleConfirm","skipAddonPage","pageConfigsData","skipBillingPage","skip_billing_page","checkoutBody","add_ons","checkoutResponse","_checkoutResponse$dat","_checkoutResponse$dat2","total","_checkoutResponse$dat3","_checkoutResponse$dat4","event_id","_error$response$data","_error$response$data$","hasUnverifiedOrder","_error$response2","_error$response2$data","stringify","handleClearAddons","useMemo","addOnsData","_addOnDataWithCustomF","addOnIsIncluded","isResale","Formik","onSubmit","selectedAddons","isConfirmDisabled","fromEntries","entries","Form","autoComplete","price","feeIncluded","cost","isAddonFree","addOnNormalizedCost","addonNormalizedPrice","imageUrl","alt","onMouseEnter","onMouseLeave","marginLeft","cursor","display","Tooltip","place","dangerouslySetInnerHTML","fieldGroup","SimpleAddonsContainer","_ref$handleConfirm","collectAddonFieldUpdates","allValues","out","k","handleCustomFieldChange","_groupId","existing","addonId","next","_addOnDataWithCustomF2","log","fieldUpdates","SnackbarAlert","_ref$autoHideDuration","autoHideDuration","Snackbar","isOpen","anchorOrigin","vertical","horizontal","classes","root","Alert","severity","icon","filled","PoweredBy","Schema","Yup","shape","ForgotPasswordModal","_ref$onLoginButtonCli","onLoginButtonClick","_ref$onForgotPassword","onForgotPasswordSuccess","_ref$onForgotPassword2","onForgotPasswordError","_ref$showPoweredByIma","showPoweredByImage","_ref$displaySuccessMe","displaySuccessMessage","successMessage","setSuccessMessage","showSuccess","onForgotPassword","success","isAxiosError","validationSchema","isValid","dirty","handleSubmit","SignUpForm","onSignUpSuccess","_ref$onGetProfileData","onGetProfileDataSuccess","_ref$onGetProfileData2","onGetProfileDataError","logo","setError","setIsSubmitting","countries","setCountries","setStates","phoneValidationIsLoading","mappedCountries","fetchCountries","enableReinitialize","passwordConfirmation","CLIENT_SECRET","profileResponse","profileDataObj","errorData","errorMessages","messages","l","toUpperCase","Array","isArray","whiteSpace","Grid","spacing","xs","sm","overflowY","md","mappedStates","fetchStatesForCountry","mobileStyle","LoginModal","onLogin","_ref$alreadyHasUser","alreadyHasUser","_ref$userExpired","userExpired","_ref$onSignup","onSignup","_ref$modalClassname","modalClassname","_ref$showForgotPasswo","showForgotPasswordButton","_ref$showSignUpButton","showSignUpButton","activeTab","setActiveTab","isMobile","useMediaQuery","useCustomSignup","@media screen and (orientation:landscape)","Tabs","_event","newValue","marginBottom","& .MuiTabs-indicator","Tab","fontFamily","fontWeight","fontSize","textTransform","&.Mui-selected","authRes","handlePaymentMiddleWare","reviewData","isFreeTickets","paymentPlanIsAvailable","showPaymentPlanSection","handlePayment","setPaymentIsLoading","orderData","onPaymentError","order_details","paymentSuccessResponse","_window$dataLayer","orderValue","orderCurrency","event_details","PaymentPlanSection","paymentPlanConfig","paymentPlanUseSavedCard","setPaymentPlanUseSavedCard","total_installments","price_per_installment","interval","has_admin_fee","admin_fee","requires_deposit","deposit","non_refundable_type","non_refundable_amount","saved_card","_paymentPlanConfig$sa","last_4_digits","StripeWrapper","onStripeReady","stripe","useStripe","elements","useElements","PaymentElement","initialPaymentPlanConfiguration","stripe_setup_intent_secret","initialOrderValues","product_name","ticketType","guest_count","pay_now","initialReviewValues","payment_method","stripe_client_secret","stripe_payment_plan_enabled","stripe_payment_plan_configuration","stripe_publishable_key","stripeConnectedAccount","billing_info","flagSeatMapAllowed","PaymentContainer","paymentFields","_ref2$formTitle","formTitle","checkoutData","_ref2$onErrorClose","onErrorClose","_ref2$onGetPaymentDat","onGetPaymentDataSuccess","_ref2$onGetPaymentDat2","onGetPaymentDataError","_ref2$onPaymentError","elementsOptions","paymentElementOptions","_ref2$onCountdownFini","_ref2$enableTimer","_ref2$orderInfoLabel","orderInfoLabel","_ref2$paymentInfoLabe","paymentInfoLabel","_ref2$displayPaymentB","displayPaymentButton","_ref2$hidePaymentForm","hidePaymentForm","_ref2$hideFieldsBlock","hideFieldsBlock","_ref2$isSinglePageChe","isSinglePageCheckout","stripePublishableKey","stripeAccountId","_ref2$onStripeReady","_ref2$enablePaymentPl","enablePaymentPlan","setReviewData","setOrderData","paymentIsLoading","paymentDataIsLoading","setPaymentDataIsLoading","conditions","setConditions","setCurrency","setShowPaymentPlanSection","setPaymentPlanIsAvailable","setPaymentPlanConfig","showFormTitle","showErrorText","fetchPaymentData","paymentDataResponse","_paymentDataResponse$","ticket","orderDataArray","_cart$","count","_cart$2","debt","tableTypes","subtotal","fees","conditionsInfo","fetchConditions","getPublishableKey","getStripePromise","stripeAccount","loadStripe","themeMui","hasTableTypes","paymentFieldsData","normalizer","parseFloat","isTable","paymentMethod","paymentPlanAvailable","_paymentPlanConfig$sa2","sessionData","session","_reviewData$order_det","Container","maxWidth","_field$className","_field$normalizer","flexDirection","tableTypeItem","gridTemplateColumns","gridColumnGap","groupName","showPaymentForm","Elements","paymentMethodId","_paymentPlanConfig$sa3","SignupSchema","min","oneOf","SignupModal","_ref$onLogin","_ref$onRegisterSucces","onRegisterSuccess","_ref$onRegisterError","onRegisterError","set","LogicRunner","setValues","setUserValues","onGetStatesSuccess","onGetStatesError","shouldFetchCountries","brandOptIn","prevCountry","prevBuyerData","hasLoadedUserData","res","stateExists","_mappedStates$find","_mappedStates$","fetchStates","buyerFirstName","buyerLastName","buyerEmail","buyerPhone","lastNameChanged","emailChanged","phoneChanged","userDataEncoded","parsedData","mappedValues","brand_opt_in","holderFirstName-0","holderLastName-0","holderEmail-0","holderPhone-0","extraDataJSON","extraData","getStoredUserData","EmailExistenceChecker","isLoggedIn","setEmailExists","checkEmail","timeoutId","setTimeout","clearTimeout","WithCustomFieldsBillingInfoContainer","_ref6$ticketHoldersFi","_ref6$initialValues","_ref6$buttonName","buttonName","_ref6$freeOrderButton","freeOrderButtonName","_ref6$handleSubmit","_ref6$theme","_ref6$onRegisterSucce","_ref6$onRegisterError","_ref6$onSubmitError","onSubmitError","_ref6$onGetCartSucces","onGetCartSuccess","_ref6$onGetCartError","onGetCartError","_ref6$onGetCountriesS","onGetCountriesSuccess","_ref6$onGetCountriesE","onGetCountriesError","_ref6$onGetStatesSucc","_ref6$onGetStatesErro","_ref6$onGetProfileDat","_ref6$onGetProfileDat2","_ref6$onLoginSuccess","onLoginSuccess","_ref6$onCheckoutUpdat","onCheckoutUpdateSuccess","_ref6$onCheckoutUpdat2","onCheckoutUpdateError","_ref6$isLoggedIn","pIsLoggedIn","_ref6$accountInfoTitl","accountInfoTitle","hideLogo","_ref6$onErrorClose","_ref6$hideErrorsAlert","hideErrorsAlertSection","_ref6$onSkipBillingPa","onSkipBillingPage","_ref6$skipPage","skipPage","_ref6$canSkipHolderNa","canSkipHolderNames","_ref6$onForgotPasswor","_ref6$onForgotPasswor2","_ref6$shouldFetchCoun","_ref6$onCountdownFini","_ref6$enableTimer","_ref6$showForgotPassw","_ref6$showSignUpButto","_ref6$brandOptIn","_ref6$showPoweredByIm","_ref6$isCountryCodeEd","_ref6$onPendingVerifi","_ref6$onGetCheckoutCo","onGetCheckoutConfigsSuccess","_ref6$onGetCheckoutCo2","onGetCheckoutConfigsError","_ref6$includeAddons","includeAddons","addonsProps","_ref6$isSinglePageChe","_ref6$paymentProps","paymentProps","paymentSectionAddon","setExtraData","isConfigLoading","setIsConfigLoading","setConfigs","elementsRef","stripeRef","_data$data","additionalConfigs","resale","resaleWithAddons","dataWithUniqueIds","setDataWithUniqueIds","setIsLoggedIn","cartInfoData","setCartInfo","showModalLogin","setShowModalLogin","setUserExpired","showModalSignup","setShowModalSignup","showModalForgotPassword","setShowModalForgotPassword","setTicketsQuantity","holderFirstName","holderLastName","holderAge","cardLoading","setCardLoading","isCountriesLoading","setIsCountriesLoading","emailExists","emailLogged","firstNameLogged","lastNameLogged","phoneLogged","showDOB","age_required","showTicketHolders","names_required","optedInFieldValue","ttfOptIn","hideTtfOptIn","expirationTime","phone_required","collect_mandatory_wallet_address","flagFreeTicket","free_ticket","hidePhoneField","hide_phone_field","hideWalletAddressField","collect_optional_wallet_address","collectMandatoryCompany","collect_mandatory_company","hideCompanyField","collect_optional_company","collectMandatoryJobTitle","collect_mandatory_job_title","hideJobTitleField","collect_optional_job_title","collectMandatoryInstagram","collect_mandatory_instagram","hideInstagramField","collect_optional_instagram","collectMandatoryBusinessCategory","collect_mandatory_business_category","eventHasAddons","has_add_on","hideBusinessCategoryField","collect_optional_business_category","setCheckoutData","checkoutUpdateData","setCheckoutUpdateData","prevData","addAddOnsInAttributes","selectedAddOns","addOnDataCapture","add_on_data_capture","singleCheckoutAddons","setSingleCheckoutAddOns","orderIsFree","hasUniqueId","isEqualData","_isEqual","getQuantity","qty","fetchCart","updateCheckoutWithAddOns","cartInfo","_cartInfo$cart","fetchUserData","profileSpecifiedData","userDataResponse","is_from_resale","checkoutUpdateResponse","cartPriceBreakdown","checkoutAttributes","fetchCheckoutUpdate","removeReferralKey","removeAdditionalConfigs","collectPaymentData","collectCheckoutBody","profileData","holders","individualHolder","_loop","holder","filteredRestValue","createCheckoutDataBody","_checkoutBody$attribu","holderIndex","holderDataCapture","customFieldKey","customFieldHolderName","val","match","fieldKey","storedAddOnDataCapture","parsed","mergedAttributes","urlParams","URLSearchParams","isPaymentReturn","clientSecret","storedContext","paymentContext","retrievePaymentIntent","paymentIntent","paymentResponse","updatedOrderData","formikHelpers","history","replaceState","title","pathname","handlePaymentReturn","usePaymentRedirect","processPayment","paymentData","submit","submitError","timestamp","confirmPayment","confirmParams","return_url","redirect","confirmError","useStripePayment","addOns","mergedAddOns","amount","checkoutDataObj","handleAddOnSelect","parseInt","currentAddOns","currentDataCapture","updatedAddOns","updatedDataCapture","initialCountry","_find","toLowerCase","_reviewData$payment_m","additional_payment_information","_checkoutUpdateData$a","basic_config","_checkoutUpdateData$a2","apiKey","_reviewData$payment_m2","stripe_connected_account","_checkoutUpdateData$a3","_checkoutUpdateData$a4","accountId","addOnsIncludedOnInvitation","_checkoutUpdateData$a5","elements_config","Backdrop","zIndex","ttf_opt_in","instagram","company","businessCategory","jobTitle","holdersCount","hasHolderPhoneError","userDataObj","_checkoutBody$attribu3","_e$response","setSubmitting","labelClassName","filteredGroupItems","el","filterBillingInfoFields","Fragment","renderComponentWithProps","handleBlur","format","_item","wallets","applePay","_checkoutUpdateData$a6","stripe_wallets","_checkoutUpdateData$a7","googlePay","_checkoutUpdateData$a8","_checkoutUpdateData$a9","getImage","image","require","SocialButton","facebook","FacebookShareButton","FacebookIcon","messenger","FacebookMessengerShareButton","FacebookMessengerIcon","twitter","TwitterShareButton","XIcon","linkedin","LinkedinShareButton","LinkedinIcon","pinterest","PinterestShareButton","PinterestIcon","vk","VKShareButton","VKIcon","ok","OKShareButton","OKIcon","telegram","TelegramShareButton","TelegramIcon","whatsapp","WhatsappShareButton","WhatsappIcon","reddit","RedditShareButton","RedditIcon","tumblr","TumblrShareButton","TumblrIcon","mailru","MailruShareButton","MailruIcon","EmailShareButton","EmailIcon","livejournal","LivejournalShareButton","LivejournalIcon","viber","ViberShareButton","ViberIcon","workplace","WorkplaceShareButton","WorkplaceIcon","line","LineShareButton","LineIcon","pocket","PocketShareButton","PocketIcon","instapaper","InstapaperShareButton","InstapaperIcon","weibo","WeiboShareButton","WeiboIcon","hatena","HatenaShareButton","HatenaIcon","spotify","SocialComponent","mainLabel","subLabel","platform","shareData","points","onAfterShare","alreadyApplied","oneTimeAction","_ref$btnClassName","btnClassName","_config","Icon","_config2","isActionDisabled","onKeyDown","round","isNaN","SocialButtons","showDefaultShareButtons","shareLink","appId","shareButtons","_ref2$titleText","titleText","_ref2$footerText","footerText","clientLabel","_ref2$onAfterShare","_ref2$showReferralsIn","showReferralsInfoText","quote","shareButton","eventActionId","getPreRegistrationInfluencers","getPreRegistrationShareOptions","submitShareAction","accessToken","phase","useCookieListener","handler","getCookie","intervalValue","setIntervalValue","cookieRef","handleCookieChange","setInterval","clearInterval","ConfirmModal","_ref$loading","_ref$hideCancelBtn","hideCancelBtn","_ref$onClose","_ref$onConfirm","onConfirm","isTimeExpired","startDate","timezone","moment","isAfter","tz","_ref$timezone","guess","_ref$title","_ref$message","_ref$showMessage","showMessage","_ref$disableLeadingZe","disableLeadingZero","_ref$callback","callback","duration","setDuration","timeExpired","setTimeExpired","timer","currentDate","diffTime","diff","dateArr","year","years","month","months","day","hour","hours","minute","second","timeLeft","unit","isDocumentDefined","SectionContainer","getFieldClassNames","existingClassNames","elem","getElementById","parentElement","_elem$parentElement","clientWidth","FieldsSection","formFields","_ref2$countries","_ref2$containerClass","containerClass","groupLabel","_item$groupLabelVars","groupLabelVars","_item$groupClassName","groupClassName","groupLabelClassName","elementId","childNodes","insertAdjacentHTML","insertHTML","fieldData","fieldIndex","_fieldData$className","_fieldData$options","Prewards","_props$classNamePrefi","_props$headerNode","headerNode","prize","CopyField","copyValue","_props$copyIconSrc","copyIconSrc","_props$copyTitle","copyTitle","_props$hasCopyIcon","hasCopyIcon","_props$onLinkCopied","onLinkCopied","_props$messageText","messageText","ref","defaultValue","readOnly","navigator","clipboard","writeText","ShareOptions","_props$headerText","headerText","updateShareActionData","shareActionData","shareUrl","socialUrl","point","shareOptionsAdapter","isShareLinkEnabled","_some","tokenShuffleMethod","reverse","lengthOfStr","part1","words","shuffledStr","shareActionToken","PreRegistrationComplete","pEventId","_ref$classNamePrefix","_ref$onLinkCopied","_ref$hasCopyIcon","_ref$pageHeader","pageHeader","_ref$onGetConfirmatio","onGetConfirmationDataError","_ref$onGetConfirmatio2","onGetConfirmationDataSuccess","_ref$pageMessage","pageMessage","_ref$onLoginSuccess","_ref$skipInitialValid","skipInitialValidation","localStorageHash","queryHash","setShowCopyModal","prizes","setPrizes","shareOptions","setShareOptions","setShareActionData","shareOptionsData","fetchConfirmationData","_isEmpaty","PreRegistration","pFormFields","additionalFieldAttribute","isPreregistrationStarted","_ref$onGetCountriesSu","_ref$onGetCountriesEr","_ref$onConfirmationSu","onConfirmationSuccess","_ref$onConfirmationEr","onConfirmationError","setAlreadyHasUser","show","confirmModalState","setConfirmModalState","setUserData","isPreRegistrationComplete","setIsPreRegistrationComplete","clientName","formFieldsLoggedIn","CLIENT_NAME","formFieldsNotLoggedIn","getFormFieldsNotLoggedIn","fieldSection","fieldSectionAttributes","updatedFields","updateFormFieldsAttributes","referrerId","updatedValues","dobDay","dobMonth","dobYear","shareHash","confirmationData","bodyFormData","profileRes","emailErrors","errorDataMessage","generateQuantity","n","quantityList","WaitingList","_ref$defaultMaxQuanti","defaultMaxQuantity","showSuccessMessage","setShowSuccessMessage","ticketTypesList","d","displayName","showTicketsField","ticketTypeId","selectedTicket","waitingListMaxQuantity","AccessCodeSection","setCode","updateTickets","isAccessCodeHasValue","onKeyPress","PromoCodeSection","codeIsApplied","showPromoInput","setShowPromoInput","setCodeIsApplied","codeIsInvalid","setCodeIsInvalid","promoText","showAlertIcons","isPromoCodeHasValue","appliedPromoCode","_window$localStorage","preProcessor","ReferralLogic","isAlreadyCounted","_asyncToGenerator","getTicketSelectOptions","multiplier","Math","TicketRow","ticketTier","prevTicketTier","selectedTickets","handleTicketSelect","isSeatMapAllowed","tableType","soldOutMessage","isSalesClosed","eventDatesInfo","salesStarted","presalesStarted","presalesEnded","salesEnded","presalesEnabled","defineIsSalesClosed","presales_enabled","maxGuests","minGuests","minQuantity","ticketsClosedMessage","canPurchaseTicket","displayTicket","isDirectPurchaseAllowed","onSaleContent","borderRadius","displayEmpty","aria-label","returnValue","sold_out","slotGroupId","soldOut","decodeHTML","html","textArea","TicketsSection","ticketsList","sortBySoldOut","ticketsHeaderComponent","tableTicketsHeaderComponent","hideTicketsHeader","hideTableTicketsHeader","showGroupNameBlock","currencySymbol","tableTickets","symbol","sortedTicketsList","showGroup","priceSymbol","handleDescriptionToggle","arr","ticketPriceWithoutFees","ticketPriceWithFees","basePrice","ticketOldPriceWithFees","oldBasePrice","ticketOldPriceWithoutFees","oldCost","isSoldOut","ticketIsDiscounted","oldPrice","ticketIsFree","discountTicketPriceElem","ticketPriceElem","isNewGroupTicket","_arr","descriptionRich","_arr2","depositPercent","TimeSlotTicketRow","ticketKey","availableTimeSlots","selectedTimeSlots","handleTimeSlotSelect","currentSelectedTimeKey","currentTicketInstance","slot","timeKey","_availableTimeSlots$f","ticketInstance","currentSelectedQuantity","alignItems","justifyContent","gap","marginTop","selectedTimeKey","selectedOption","slotStartDate","TimeSlotsSection","availableDates","selectedDate","timeSlotGroups","setSelectedDate","getTimeSlots","setSelectedTimeSlots","handleDateChange","uniqueTickets","ticketMap","ticketsArray","t","prev","handleTicketSelectWithTimeSlot","shouldDisableDate","formattedDate","showToolbar","actionBar","disablePast","checkUserPreregistration","preregisteredUsers","userDataString","isPreregisteredUser","user","EventInfoItem","tableConfig","columns","header","ItemComponent","row","columnProps","eventName","Row","handleDetailsInfo","_ref$columns","hideDetailsButton","TableRow","& > *","borderBottom","column","TableCell","scope","onCellClick","RadioField","schema","yup","to","when","is","confirm","TicketResaleModal","_ref$onSubmit","holder_name","event_name","retain_amount_on_sale","ticket_type_is_active","CustomFieldsForm","_ref$fields","_ref$handleFormSubmit","handleFormSubmit","_ref$handleFormClose","handleFormClose","adaptedCustomField","resetForm","renderCustomFieldValue","getLabel","singleValue","isFieldUpdatable","settings","_field$settings","allowUpdate","TicketHolderCustomFields","holderCustomFields","_ref$handleTicketHold","handleTicketHoldersUpdate","showHolderCustomFieldsSection","setShowHolderCustomFieldsSection","allowedFields","notAllowedFields","allowedHolderCustomFields","notAllowedHolderCustomFields","holderEditableFieldsFormInitialValues","getHolderCustomFieldsInitialValues","EditSvg","notUpdatableCustomFieldsValues","fullUpdatableValues","reduce","acc","TicketsTable","_ref$icon","_ref$displayColumnNam","displayColumnNameInRow","_ref$canSellTicket","canSellTicket","_ref$ticketsTitle","ticketsTitle","_ref$ticketHoldersCus","_ref$handleSellTicket","handleSellTicket","_ref$handleRemoveFrom","handleRemoveFromResale","pdfError","setPdfError","pdfDownload","setPdfDownload","TableContainer","Paper","Table","TableHead","TableBody","columnIndex","ticketIsDownloading","pdf_link","is_on_sale","pdfDownloadError","is_sellable","getRow","colSpan","_ticket$add_ons","add_on","password_confirmation","LoginForm","_ref$onLoginError","onLoginError","onForgotPasswordButtonClick","_ref$onSignupButtonCl","onSignupButtonClick","_ref$registerUrl","registerUrl","rel","_ref2$states","_ref2$setPhoneValidat","_ref2$onFieldChange","disableField","collectStates","formDefaultFields","RegistrationForm","registrationType","customerEmail","_ref$onRegisterAccoun","onRegisterAccountSuccess","_ref$onRegisterAccoun2","onRegisterAccountError","_ref$onGetStatesSucce","_ref$onGetStatesError","setErrorMessage","showErrorModal","setshowErrorModal","updatedFormFields","fetchCountryId","handleRegisterAccount","VERIFICATION_STATUSES","PENDING","APPROVED","FAILED","WRONG_CUSTOMER","IssueTicketForm","_ref$handleSubmit","selectTicketTypeOptions","TicketsAssignedTable","tableTitle","issuePageData","_ref$noTicketsAssigne","noTicketsAssignedText","_issuePageData$ticket","_issuePageData$ticket2","TicketsAvailableTable","ticketTypes","optionValue","delegationMaxQuantity","delegationQuantityIssued","IssueComponent","_ref$headTitle","headTitle","_ref$onGetIssuePageDa","onGetIssuePageDataSuccess","_ref$onGetIssuePageDa2","onGetIssuePageDataError","showMaxQtyModal","setShowMaxQtyModal","showSuccessModal","setShowSuccessModal","setIssuePageData","_res$data","_res$data$data","fetchDelegationTickets","eventImage","addToCartFunc","result","pageConfigsDataResponse","_pageConfigsData$skip","hasAddOn","getOwnReservationsBasedOnStatuses","statuses","ownReservations","groupRowId","seatIndex","getTicketDropdownData","reservationData","tierReleations","ticketsDropdownsData","reservation","ticketsData","_values","ticket_type_tier_id","ticket_type_name","ticket_type_price","ticket_type_id","getAddToCartRequestData","_ref$reservations","reservations","_ref$selectedSeats","selectedSeats","_ref$selectedTickets","_ref$guestCounts","guestCounts","hasGuests","addToCartData","alternative_view_id","product_cart_quantity","product_options","product_id","ticket_types","productOptions","sitem","ticket_type_option","_ticketTypes$ticket$t","ticket_price","SeatMapComponent","seatMapProps","mapContainerId","seatData","_seatMapProps$seatMap","seatMapType","_seatMapProps$seatMap2","seatMapEvents","_seatMapProps$ticketT","ticketTypeTierRelations","tierPrices","isReserving","predefinedSeats","isLoadingSeatMapData","ticketTypeTireRelationsArray","mapComponent","SeatMapView","events","isSelectionOn","isBlockMap","isTableMap","ReactDom","render","reservedSeats","_props$theme","getTicketsBtnLabel","_props$contentStyle","contentStyle","_props$isButtonScroll","isButtonScrollable","handleGetTicketClick","handleCancelReservation","_props$ticketDeleteBu","ticketDeleteButtonContent","_props$ticketInfoCont","ticketInfoContent","_props$tableMapEnable","tableMapEnabled","setGuestCounts","isAddingToCart","selectedTicketsInfo","setSelectedTicketsInfo","bookButtonIsDisabled","_keys","handleShowtTicketInfo","ticketItem","dropdownData","selectedTicketData","startNum","ticket_type_min_number_of_guests","endNum","ticket_type_max_number_of_guests","numLength","showGuestCountDropdown","showDescription","guestPrice","guest_price","finalPrice","handleTicketChange","fee_included","ticket_type_deposit","arrow","tooltip","& .MuiTooltip-arrow","m","from","getButtonLabel","Influancers","influencer","prereg_id","SimpleCountdown","confirmationLabels","isReferralEnabled","_ref$messengerAppId","messengerAppId","_ref$shareButtons","_ref$showReferralsInf","_ref$showCopyInfoModa","showCopyInfoModal","_ref$showPricingNoteS","showPricingNoteSection","_ref$showOrderDetails","showOrderDetailsBtn","_ref$onOrderDetailsCl","onOrderDetailsClick","_ref$showProductImage","showProductImage","eventTitle","eventDate","eventLocation","setData","dataEncoded","confirmationDataResponse","personal_share_sales","salesItem","salesData","sales","unshift","product_price","_data$product_price","confirmationTitle","_confirmationLabels$c2","confirmationMain","_confirmationLabels$c3","confirmationHelper","_confirmationLabels$p","paymentPlanConfirmationTitle","_confirmationLabels$p2","paymentPlanConfirmationMain","_confirmationLabels$p3","paymentPlanConfirmationHelper","product_image","is_payment_plan","custom_confirmation_page_text","custom_confirmation_page_text_full_replacement","attach_tickets","disable_referral","personal_share_link","newData","pricing","registerFormFields","_ref$issuePageErrorTe","issuePageErrorText","_ref$onCustomerExists","onCustomerExistsError","isCustomerExsists","setIsCustomerExsists","issuePageError","setIssuePageError","setCustomerEmail","getCustomerData","onGetVerifyUrlSuccess","_props$onGetVerifyUrl2","onGetVerifyUrlError","_props$onGetVerificat","onGetVerificationStatusSuccess","_props$onGetVerificat2","onGetVerificationStatusError","_props$onVerification","onVerificationMessageModalClose","_props$onPassVerifica","onPassVerificationStepsSuccess","_props$onPassVerifica2","onPassVerificationStepsError","loadingStatus","setLoadingStatus","setVerificationStatus","netverifyUrl","setNetverifyUrl","provider","setProvider","setHasError","lastError","setLastError","displaModal","modalData","setModalData","isAccountVerifiedOrPending","callbackNetVerify","origin","getUrl","payload","transactionStatus","removeEventListener","urlResponse","intervalId","getVerificationStatus","verifyUrl","isApproved","statusResponse","getCustomerOrderStatus","makeRequests","iframe","_ref$onGetOrdersSucce","onGetOrdersSuccess","_ref$onGetOrdersError","onGetOrdersError","_ref$theme","_ref$selectEventsLabe","selectEventsLabel","_ref$hideDetailsButto","openLoginModal","_ref$customNoOrderCon","customNoOrderContent","setLimit","setFilter","isLogged","fetchData","noOrderContent","orders","_data$orders","Autocomplete","disablePortal","getOptionLabel","eventFilter","url_name","purchased_events","_data$orders2","MyTicketsRow","TablePagination","rowsPerPageOptions","total_count","rowsPerPage","onPageChange","newPage","onRowsPerPageChange","_ref3$paymentFieldsDa","_ref3$customMobileTex","customMobileText","_ref3$handleCountdown","isExpanded","setIsExpanded","totalField","totalValue","guestCount","defaultTableRenderer","defaultItemRenderer","_ref$onRemoveFromResa","onRemoveFromResaleSuccess","_ref$onRemoveFromResa2","onRemoveFromResaleError","_ref$onResaleTicketSu","onResaleTicketSuccess","_ref$onResaleTicketEr","onResaleTicketError","_ref$onUpdateOrderCus","onUpdateOrderCustomFieldsSuccess","_ref$onUpdateOrderCus2","onUpdateOrderCustomFieldsError","_ref$onUpdateTicketHo","onUpdateTicketHolderCustomFieldsSuccess","_ref$onUpdateTicketHo2","onUpdateTicketHolderCustomFieldsError","onReturnButtonClick","_ref$personalLinkIcon","personalLinkIcon","ticketsTableColumns","ordersPath","pOrderId","_ref$referralTitle","referralTitle","_ref$itemsTitle","itemsTitle","_ref$displayLoading","displayLoading","_ref$onDataLoaded","onDataLoaded","removeFromResaleLoading","setRemoveFromResaleLoading","resaleTicketLoading","setResaleTicketLoading","showResaleModal","setShowResaleModal","showRemoveResaleModal","setShowRemoveResaleModal","activeTicket","setActiveTicket","showOrderCustomFieldsSection","setShowOrderCustomFieldsSection","isLoading","setIsLoading","columnsProps","orderCustomFields","orderUpdatableCustomFields","orderNotUpdatableCustomFields","orderEditableFieldsFormInitialValues","orderSummery","handleOnSubmit","updatedData","_updatedData$tickets","onConfirmRemoveResale","_updatedData$tickets2","handleOrderCustomFieldsUpdate","updatedCustomFields","notUpdatedFields","sales_referred","items","_data$items","_data$items$ticket_ty","is_table","guests_count","deposit_paid","remaining","_data$items2","_data$items2$add_ons","_data$tickets$","_has","getTotal","sellTicketType","ticket_type_hash","_props$onGetPreregist","onGetPreregistrationDataSuccess","_props$onGetPreregist2","onGetPreregistrationDataError","influancersHeaderNode","prewardsHeaderNode","setInfluencers","topInfluancers","_slice","preregistrationData","influencers","fetchPreregistrationData","_ref$onClickOk","onClickOk","token","tokenProps","_ref$onResetPasswordS","onResetPasswordSuccess","_ref$onResetPasswordE","onResetPasswordError","showSection","modal","setModal","handleModalClose","requestData","_props$timerMessage","timerMessage","_props$onAddToCartSuc","onAddToCartSuccess","_props$onCountdownFin","seatMap","seatMapData","setSeatMapData","eventSeatsRef","ticketTypeTierRelationsRef","setSelectedTickets","seatMapStatuses","setSeatMapStatuses","setReservedSeats","setIsLoadingSeatMapData","isLoadingStatuses","setIsLoadingStatuses","setIsReserving","setIsAddingToCart","isOnline","setIsOnline","isGuestCountsSet","handleOffline","handleOnline","updateGuestCounts","seatTicketsArray","fetchSeatMapData","_seatMapDataResponse$","seatReservationTime","eventSeats","fetchSeatMapReservations","statusesResponse","tierIdOfReservation","seats","seatsCount","rowId","tier_id","startTimer","endTimer","handleSeatReservation","relations","_keys2","firstItem","handleCancelSeatReservtion","currentSelectedTickets","onSeatClick","seatInfo","_seatInfo$seat","seat","handleGetTicketBtnClick","ticketData","_addToCartData$attrib","valueOf","onComplete","tireId","onProcessTicketSuccess","_ref$onProcessTicketE","onProcessTicketError","_ref$onDeclineTicketP","onDeclineTicketPurchaseSuccess","_ref$onDeclineTicketP2","onDeclineTicketPurchaseError","billingPath","_ref$defaultRedirecti","defaultRedirection","isDeclined","invitationIncludesAddons","getTicketsLabel","_ref$contentStyle","_ref$onAddToCartError","onAddToCartError","_ref$onGetTicketsSucc","onGetTicketsSuccess","_ref$onGetTicketsErro","onGetTicketsError","_ref$onLogoutSuccess","_ref$onLogoutError","_ref$onGetTicketsPres","onGetTicketsPress","_ref$queryPromoCode","queryPromoCode","_ref$isPromotionsEnab","isPromotionsEnabled","_ref$isAccessCodeEnab","isAccessCodeEnabled","_ref$hideSessionButto","hideSessionButtons","_ref$hideWaitingList","hideWaitingList","_ref$isButtonScrollab","_ref$sortBySoldOut","_ref$disableCountdown","disableCountdownLeadingZero","_ref$isLoggedIn","ActionsSectionComponent","actionsSectionComponent","_ref$hideTicketsHeade","_ref$hideTableTickets","_ref$enableInfluencer","enableInfluencersSection","_ref$enableAddOns","enableAddOns","_ref$handleNotInvited","handleNotInvitedModalClose","_ref$handleInvalidLin","handleInvalidLinkModalClose","_ref$showGroupNameBlo","_ref$currencySymbol","_ref$onReserveButtonC","onReserveButtonClick","_ref$showAlertIcons","_ref$onPreRegistratio","onPreRegistrationSuccess","_ref$onPreRegistratio2","onPreRegistrationError","_ref$onPreRegistratio3","onPreRegistrationGetCountriesSuccess","_ref$onPreRegistratio4","onPreRegistrationGetCountriesError","showLoginModal","setShowLoginModal","setTickets","setEvent","showWaitingList","setShowWaitingList","codeIsLoading","setCodeIsLoading","handleBookIsLoading","setHandleBookIsLoading","showAccessCodeSection","setShowAccessCodeSection","showPromoCodeSection","setShowPromoCodeSection","isNotInvitedError","setIsNotInvitedError","isInvalidLinkError","setIsInvalidLinkError","setPreregisteredUsers","ticketsNotAvailableModalOpen","setTicketsNotAvailableModalOpen","isPreregistered","setIsPreregistered","ticketsContainerRef","isTimeSlotEvent","setAvailableDates","setTimeSlotGroups","setValue","useLocalStorageListener","getTicketsApi","fetchPreregisteredData","handleLogout","handleExternalLogin","groupedTickets","timeSlotsResponse","timeslots","dateKeyChunks","dateKey","ticketList","_timeSlotsResponse$da","ValidPromoCode","is_access_code","_getTicketsApi","isUpdatingCode","previewKey","eventResponse","timeslotSettings","_event$timeslotSettin2","_response$data","_fetchPreregisteredData","toString","allowMultipleTicketTypePurchases","newState","handleBook","timeSlotTickets","_flatten","slots","selectedTicketIds","ticketTypesData","totalProductCartQuantity","firstTicket","optionName","firstOptionName","firstTicketId","errorResponse","_errorResponse$data","_errorResponse$data$d","_errorResponse$data2","isTicketOnSale","eventHasTickets","scrollIntoView","behavior","block","inline","isTicketAvailable","wrappedActionsSectionComponent","cloneElement","externalUrl","redirectUrl","eventSaleIsNotStarted","salesStart","referralsEnabled","referrals","hideTopInfluencers","isTableMapEnabled","notAvailableTicketsMessage","_filter","ordinaryTickets","isPreRegistrationMode","preregEnabled","preregStarted","preregEnded","enableWaitingList","_influencer$lastName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tf-checkout-react.cjs.production.min.js","sources":["../src/api/publicRequest.ts","../src/constants/index.ts","../src/utils/cookies.ts","../src/utils/setConfigs.ts","../src/utils/getQueryVariable.ts","../src/utils/formikErrorFocus.ts","../src/utils/getDomain.ts","../src/utils/downloadPDF.tsx","../src/utils/createCheckoutDataBodyWithDefaultHolder.ts","../src/utils/createMarkup.ts","../src/utils/replaceVarInString.ts","../src/utils/isBrowser.ts","../src/utils/form.ts","../src/utils/auth.ts","../src/utils/customFields.ts","../src/utils/jsonUtils.ts","../src/api/interceptors.ts","../src/adapters/customFields.ts","../src/api/auth.ts","../src/api/orders.ts","../src/api/cart.ts","../src/api/checkout.ts","../src/api/common.ts","../src/api/payment.ts","../src/api/resale.ts","../src/api/guestTicketDelegation.ts","../src/api/index.ts","../src/hoc/CustomFields/index.tsx","../src/hooks/usePixel.ts","../src/validators/index.ts","../src/normalizers/index.ts","../src/components/common/ModalComponent/index.tsx","../src/components/idVerificationContainer/VerificationPendingModal.tsx","../src/components/ticketsContainer/InfoIcon.tsx","../src/utils/showZero.tsx","../src/components/timerWidget/index.tsx","../src/components/addonsContainer/adapters/index.tsx","../src/components/common/CheckboxField/index.tsx","../src/components/common/Checkbox.tsx","../src/components/common/CustomField.tsx","../src/components/common/PhoneNumberField.tsx","../src/components/common/Loader.tsx","../src/components/common/SelectField/index.tsx","../src/components/common/CopyMessageModal.tsx","../src/components/common/DatePickerField.tsx","../src/components/common/NativeSelectFeild/index.tsx","../src/components/common/RadioGroupField/index.tsx","../src/components/billing-info-container/utils.tsx","../src/components/addonsContainer/AddonComponent.tsx","../src/components/addonsContainer/normalizers/index.ts","../src/components/addonsContainer/utils/index.tsx","../src/components/addonsContainer/index.tsx","../src/components/addonsContainer/SimpleAddonsContainer.tsx","../src/components/common/SnackbarAlert.tsx","../src/components/common/PoweredBy.tsx","../src/components/forgotPasswordModal/index.tsx","../src/components/loginModal/SignUpForm.tsx","../src/components/loginModal/index.tsx","../src/components/loginModal/constants.ts","../src/components/paymentContainer/handlePayment.ts","../src/components/paymentContainer/PaymentPlanSection.tsx","../src/components/paymentContainer/index.tsx","../src/components/signupModal/index.tsx","../src/components/billing-info-container/index.tsx","../src/components/billing-info-container/hooks/usePaymentRedirect.ts","../src/components/billing-info-container/hooks/useStripePayment.ts","../src/utils/getImage.ts","../src/components/common/socials.tsx","../src/components/confirmationContainer/config.ts","../src/components/confirmationContainer/social-buttons.tsx","../src/utils/isValidNumber.ts","../src/api/preRegistrationComplete.ts","../src/hooks/useCookieListener.ts","../src/components/confirmModal/index.tsx","../src/components/countdown/index.tsx","../src/components/preRegistration/constants.tsx","../src/components/preRegistration/utils.ts","../src/components/preRegistration/FieldsSection.tsx","../src/components/preRegistration/Prewards.tsx","../src/components/common/CopyField.tsx","../src/components/preRegistration/ShareOptions.tsx","../src/components/preRegistration/PreRegistrationComplete.tsx","../src/components/preRegistration/index.tsx","../src/components/waitingList/index.tsx","../src/components/ticketsContainer/AccessCodeSection.tsx","../src/components/ticketsContainer/PromoCodeSection.tsx","../src/components/ticketsContainer/ReferralLogic.tsx","../src/components/ticketsContainer/utils.ts","../src/components/ticketsContainer/TicketRow.tsx","../src/components/ticketsContainer/TicketsSection.tsx","../src/components/ticketsContainer/TimeSlotTicketRow.tsx","../src/components/ticketsContainer/TimeSlotsSection.tsx","../src/components/ticketsContainer/index.tsx","../src/components/myTicketsContainer/tableConfig.tsx","../src/components/myTicketsContainer/row.tsx","../src/components/common/RadioField.tsx","../src/components/ticketResaleModal/index.tsx","../src/components/orderDetailsContainer/CustomFieldsForm.tsx","../src/components/orderDetailsContainer/utils/index.tsx","../src/components/orderDetailsContainer/TicketHolderCustomFields.tsx","../src/components/orderDetailsContainer/ticketsTable.tsx","../src/components/resetPasswordContainer/index.tsx","../src/components/loginForm/index.tsx","../src/components/common/FieldSection/utils/index.tsx","../src/components/common/FieldSection/index.tsx","../src/components/registerForm/adapters/index.tsx","../src/components/registerForm/constants.tsx","../src/components/registerForm/index.tsx","../src/components/idVerificationContainer/constants.ts","../src/components/delegationsContainer/IssueTicketForm.tsx","../src/components/delegationsContainer/TicketsAssignedTable.tsx","../src/components/delegationsContainer/TicketsAvailableTable.tsx","../src/components/delegationsContainer/IssueComponent.tsx","../src/components/seatMapContainer/addToCart.ts","../src/components/seatMapContainer/utils.ts","../src/components/seatMapContainer/SeatMapComponent.tsx","../src/components/seatMapContainer/TicketsSection.tsx","../src/components/common/RedirectModal.tsx","../src/components/rsvpContainer/index.tsx","../src/components/preRegistration/Influancers.tsx","../src/components/paymentContainer/OrderDetails.tsx","../src/components/confirmationContainer/index.tsx","../src/components/delegationsContainer/index.tsx","../src/components/idVerificationContainer/index.tsx","../src/components/myTicketsContainer/index.tsx","../src/components/orderDetailsContainer/index.tsx","../src/components/preRegistration/PreRegistrationInformations.tsx","../src/components/seatMapContainer/index.tsx","../src/hooks/useOnline.ts","../src/components/ticketResale/index.tsx","../src/hooks/useLocalStorageListener.ts"],"sourcesContent":["import axios, { AxiosInstance } from 'axios'\n\nimport { getCookieByName } from '../utils'\n\nconst headers: { [key: string]: string } = {\n Accept: 'application/vnd.api+json',\n 'Content-Type': 'application/vnd.api+json',\n}\n\nconst isWindowDefined = typeof window !== 'undefined'\nconst authGuestToken = isWindowDefined ? localStorage.getItem('auth_guest_token') : ''\nif (isWindowDefined && authGuestToken) {\n headers['Authorization-Guest'] = authGuestToken\n}\n\nexport const setAxiosHeader = (key: string, value: string | number) => {\n headers[key] = `${value}`\n}\n\ninterface IPublicRequest extends AxiosInstance {\n setBaseUrl: (baseUrl: string) => void;\n setGuestToken: (guestToken: string) => void;\n}\n\nexport const publicRequest: IPublicRequest = axios.create({\n baseURL: 'https://www.ticketfairy.com/api',\n headers,\n withCredentials: true,\n}) as IPublicRequest\n\npublicRequest.interceptors.request.use(config => {\n if (getCookieByName('X-TF-ECOMMERCE')) {\n config.headers['X-TF-ECOMMERCE'] = getCookieByName('X-TF-ECOMMERCE')\n }\n\n return config\n})\n\npublicRequest.setBaseUrl = (baseUrl: string) =>\n (publicRequest.defaults.baseURL = baseUrl + '/api')\n\npublicRequest.setGuestToken = (guestToken: string) =>\n (publicRequest.defaults.headers.common['Authorization-Guest'] = guestToken)\n\nexport const setBaseUrl = (baseUrl: string) => {\n publicRequest.setBaseUrl(baseUrl)\n}\n","export const X_TF_ECOMMERCE = 'X-TF-ECOMMERCE'\nexport const FEES_STYLES = { TRADITIONAL: 'TRADITIONAL', DISPLAY_BOTH: 'DISPLAY_BOTH', FINAL_WITH_BREAKDOWN: 'FINAL_WITH_BREAKDOWN' }\nexport const DEFAULT_FEES_STYLE = FEES_STYLES.TRADITIONAL\n","import { getDomain } from './getDomain'\n\nlet generalDomain: string\n\nexport function setCustomCookie(name: string, value: string, days = 5) {\n let expires = ''\n if (days) {\n const date = new Date()\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000)\n expires = '; expires=' + date.toUTCString()\n }\n if (typeof window === 'undefined') {\n return\n }\n\n const { hostname } = window.location\n\n if (generalDomain && generalDomain.endsWith(getDomain(hostname))) {\n document.cookie = name + '=' + (value || '') + expires + `; path=/;domain=${generalDomain}`\n return\n }\n\n let previousDomain = undefined\n let domain = undefined\n do {\n previousDomain = domain\n domain = getDomain(hostname, undefined, previousDomain)\n document.cookie = name + '=' + (value || '') + expires + `; path=/;domain=${domain}`\n } while (getCookieByName(name) === '' && hostname !== domain)\n generalDomain = domain\n}\n\nexport function getCookieByName(cname: string) {\n if (typeof window === 'undefined') return ''\n const name = cname + '='\n const ca = document.cookie.split(';')\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i]\n while (c.charAt(0) === ' ') {\n c = c.substring(1)\n }\n if (c.indexOf(name) === 0) {\n return c.substring(name.length, c.length)\n }\n }\n return ''\n}\n\nexport function deleteCookieByName(name: string) {\n if (getCookieByName(name) === '') {\n return\n }\n\n if (typeof window === 'undefined') {\n return\n }\n\n const { hostname } = window.location\n\n if (generalDomain && generalDomain.endsWith(getDomain(hostname))) {\n document.cookie = name + `=; Path=/;domain=${generalDomain}; Expires=Thu, 01 Jan 1970 00:00:01 GMT;`\n return\n }\n\n let previousDomain = undefined\n let domain = undefined\n do {\n previousDomain = domain\n domain = getDomain(hostname, undefined, previousDomain)\n document.cookie = name + `=; Path=/;domain=${domain}; Expires=Thu, 01 Jan 1970 00:00:01 GMT;`\n } while (getCookieByName(name) !== '' && hostname !== domain)\n generalDomain = domain\n}\n","import _forEach from 'lodash/forEach'\n\nimport { publicRequest } from '../api/publicRequest'\nimport { DEFAULT_FEES_STYLE } from '../constants'\n\nexport interface IConfigs {\n BASE_URL: string;\n CLIENT_ID: string;\n CLIENT_SECRET: string;\n STRIPE_PUBLISHABLE_KEY: string;\n X_SOURCE_ORIGIN: string;\n FEES_STYLE: string;\n [key: string]: string | number;\n}\n\nexport const CONFIGS: IConfigs = { FEES_STYLE: DEFAULT_FEES_STYLE } as IConfigs\n\nexport const setConfigs = (configs: IConfigs) => {\n _forEach(configs, (value, key) => {\n CONFIGS[key] = value\n })\n\n publicRequest.setBaseUrl(CONFIGS.BASE_URL)\n}\n","export const getQueryVariable = (variable: string) => {\n if (typeof window !== 'undefined') {\n const query = window.location.search.substring(1)\n const vars = query.split('&')\n for (let i = 0; i < vars.length; i++) {\n const pair = vars[i].split('=')\n if (pair[0] === variable) {\n return decodeURIComponent(pair[1])\n }\n }\n }\n return false\n}\n","import { connect, FormikContextType } from 'formik'\nimport { Component } from 'react'\n\ninterface IProps {\n formik: FormikContextType<any>;\n}\n\nclass ErrorFocusInternal extends Component<IProps> {\n public componentDidUpdate(prevProps: IProps) {\n const { isSubmitting, isValidating, errors } = prevProps.formik\n const keys = Object.keys(errors)\n if (keys.length > 0 && isSubmitting && !isValidating) {\n const selector = `[name=\"${keys[0]}\"]`\n const errorElement = document.querySelector(selector) as HTMLElement\n if (errorElement) {\n errorElement.focus()\n }\n }\n }\n\n public render = () => null;\n}\n\nexport const ErrorFocus = connect<{}>(ErrorFocusInternal)\n","export function getDomain(url: string, subdomain?: string, publicSuffix?: string): string {\n let updatedUrl: any = url.replace(/(https?:\\/\\/)?(www.)?/i, '')\n\n if (!subdomain) {\n if (publicSuffix) {\n const updatedPublicSuffix = publicSuffix.startsWith('.') ? publicSuffix : '.' + publicSuffix\n updatedUrl = url.replace(updatedPublicSuffix, '').split('.')\n updatedUrl = updatedUrl.length > 0 ? updatedUrl[updatedUrl.length - 1] : ''\n updatedUrl += updatedPublicSuffix\n } else {\n updatedUrl = updatedUrl.split(\".\")\n updatedUrl = updatedUrl.slice(updatedUrl.length - 2).join(\".\")\n }\n }\n\n if (updatedUrl.indexOf('/') !== -1) {\n return updatedUrl.split('/')[0]\n }\n\n return updatedUrl\n}\n","import { getCookieByName } from './cookies'\n\nexport const downloadPDF = (pdfUrl: string) => {\n if (typeof window === 'undefined') return\n\n const xtfCookie = getCookieByName('X-TF-ECOMMERCE')\n\n if (!xtfCookie) return\n\n let headers = {}\n\n if (xtfCookie) {\n headers = {\n 'X-TF-ECOMMERCE': xtfCookie,\n }\n }\n\n return fetch(pdfUrl, {\n headers,\n credentials: 'include',\n })\n .then(async response => {\n const blobValue = await response.blob()\n const fileNameHeader = response.headers.get('content-disposition') || ''\n const fileName = fileNameHeader.split('\"')[1]\n return { blobValue, fileName }\n })\n .then(({ blobValue, fileName }) => {\n if (!fileName) {\n throw Error('Something went wrong.')\n }\n const file = new Blob([blobValue], { type: 'application/pdf' })\n const fileURL = URL.createObjectURL(file)\n const link = document.createElement('a')\n link.href = fileURL\n link.setAttribute('download', fileName)\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n })\n .catch(error => error)\n}\n","import _get from 'lodash/get'\n\ntype Type1 = string | number | null | undefined\ninterface ICheckoutBody {\n attributes: {\n [key: string]:\n | Type1\n | Record<string | number, Type1>\n | Array<Type1 | IticketHolder>;\n };\n data_capture?: {\n [key: string]: any;\n };\n}\n\ninterface IticketHolder {\n first_name?: string;\n last_name?: string;\n phone?: string;\n email?: string;\n}\n\ninterface IUserCredentialsValues {\n emailLogged?: string;\n firstNameLogged?: string;\n lastNameLogged?: string;\n phoneLogged?: string;\n}\n\nexport const createCheckoutDataBodyWithDefaultHolder = (\n ticketsQuantity: number,\n logedInValues: Record<string, string | undefined>,\n includeDob = false,\n userCredentials: IUserCredentialsValues = {}\n): ICheckoutBody => {\n const ticket_holders: IticketHolder[] = []\n\n const first_name =\n _get(logedInValues, 'firstName') ||\n _get(logedInValues, 'first_name') ||\n _get(userCredentials, 'firstNameLogged') ||\n ''\n\n const last_name =\n _get(logedInValues, 'lastName') ||\n _get(logedInValues, 'last_name') ||\n _get(userCredentials, 'lastNameLogged') ||\n ''\n const phone =\n _get(logedInValues, 'phone') || _get(userCredentials, 'phoneLogged') || ''\n const email =\n _get(logedInValues, 'email') || _get(userCredentials, 'emailLogged') || ''\n\n for (let i = 0; i <= ticketsQuantity - 1; i++) {\n const individualHolder = i\n ? { first_name: '', last_name: '', phone: '', email: '' }\n : { first_name, last_name, phone, email }\n\n ticket_holders.push(individualHolder)\n }\n\n const body: ICheckoutBody = {\n attributes: {\n ...logedInValues,\n email,\n confirm_email: email,\n first_name,\n last_name,\n ticket_holders,\n },\n }\n\n if (includeDob) {\n const holderAgeDate = new Date(_get(logedInValues, 'holderAge', ''))\n body.attributes.dob_day = holderAgeDate.getDate()\n body.attributes.dob_month = holderAgeDate.getMonth() + 1\n body.attributes.dob_year = holderAgeDate.getFullYear()\n }\n\n return body\n}\n","export const createMarkup = (data: string) => ({ __html: data })","export const replaceVarInString = (message = '', varArray: Array<string>) => {\n const re = new RegExp(/\\{.*?\\}/g)\n let index = 0\n return message.replace(re, _ => {\n const value = varArray[index] || ''\n index++\n return value\n })\n}\n","export const isBrowser =\n typeof window !== 'undefined' && typeof window.document !== 'undefined'\n","import _forEach from 'lodash/forEach'\nimport _get from 'lodash/get'\n\nexport const getFormInitialValues = (fieldsSections: IFormFieldsSection[]) => {\n const initialValues: { [key: string]: string | number | boolean } = {}\n const isWindowDefined = typeof window !== 'undefined'\n const userData = JSON.parse(\n isWindowDefined ? window.localStorage.getItem('user_data') || '{}' : '{}'\n ) as IProfileData\n\n _forEach(fieldsSections, item => {\n _forEach(item.fields, fieldItem => {\n switch (fieldItem.name) {\n case 'country':\n case 'numTickets':\n case 'state':\n initialValues[fieldItem.name] = ''\n break\n case 'brandOptIn':\n initialValues[fieldItem.name] = true\n break\n case 'confirmEmail':\n initialValues[fieldItem.name] =\n _get(userData, fieldItem.name) || _get(userData, 'email') || ''\n break\n default:\n initialValues[fieldItem.name] = _get(userData, fieldItem.name) || ''\n break\n }\n })\n })\n\n return initialValues\n}\n","import { AxiosError } from 'axios'\n\nimport { logout } from '../api'\nimport { deleteCookieByName } from './cookies'\nimport { isBrowser } from './isBrowser'\n\nexport const setLoggedUserData = (data: IProfileData) => ({\n id: data.id,\n first_name: data.firstName,\n last_name: data.lastName,\n email: data.email,\n confirmEmail: data.email,\n city: data?.city || '',\n country: data?.countryId || '',\n phone: data?.phone || '',\n street_address: data?.streetAddress || '',\n state: data?.stateId || '',\n zip: data?.zipCode || '',\n})\n\ninterface LogoutUserParams {\n onLogoutSuccess?: () => void;\n onLogoutError?: (error: AxiosError) => void;\n setIsLogged?: (isLogged: boolean) => void;\n}\n\nexport const logoutUser = async ({\n onLogoutSuccess,\n onLogoutError,\n setIsLogged,\n}: LogoutUserParams) => {\n try {\n await logout()\n onLogoutSuccess && onLogoutSuccess()\n if (isBrowser) {\n window.localStorage.removeItem('user_data')\n setIsLogged && setIsLogged(false)\n const event = new window.CustomEvent('tf-logout')\n deleteCookieByName('X-TF-ECOMMERCE')\n window.document.dispatchEvent(event)\n }\n } catch (e) {\n onLogoutError && onLogoutError(e as AxiosError)\n }\n}\n","import _isEmpty from 'lodash/isEmpty'\nimport _map from 'lodash/map'\n\nimport { IBillingInfoData } from '../types'\n\nexport const getDataWithCustomFields = (\n initialData: IBillingInfoData[],\n ticketHoldersFields: IBillingInfoData,\n customFields: any\n) => {\n // Custom Fields are not specified case\n if (_isEmpty(customFields)) {\n const dataWithCustomFields = { ...initialData }\n const ticketHoldersWithCustomFields = { ...ticketHoldersFields }\n return { dataWithCustomFields, ticketHoldersWithCustomFields }\n }\n\n // Add Custom Fields for Order\n const orderWithCustomFields = {\n groupClassname: 'billing-info-container__customFields',\n groupItems: [...customFields.orderFields],\n }\n const initialDataFields = [...initialData[0].fields]\n\n // Add Custom Fields to penultimate position\n initialDataFields.splice(initialDataFields.length - 1, 0, {\n ...orderWithCustomFields,\n })\n\n const dataWithCustomFields = [\n {\n ...initialData[0],\n fields: initialDataFields,\n },\n ]\n\n // Add Custom Fields for Ticket Holders\n const ticketHoldersFieldsArr = ticketHoldersFields.fields || []\n\n const ticketHoldersCustomFieldsBlueprint = {\n id: ticketHoldersFieldsArr.length + 1,\n customFields: true,\n groupClassname: 'billing-info-container__customFields',\n groupItems: [...customFields.ticketsFields],\n }\n\n const ticketHoldersWithCustomFields = {\n ...ticketHoldersFields,\n fields: _isEmpty(ticketHoldersFieldsArr)\n ? []\n : [...ticketHoldersFieldsArr, ticketHoldersCustomFieldsBlueprint],\n }\n\n return { dataWithCustomFields, ticketHoldersWithCustomFields }\n}\n\nexport const getAddOnDataWithCustomFields = (customFields: any) => {\n // Custom Fields are not specified case\n if (_isEmpty(customFields)) {\n return { addOnDataWithCustomFields: [] }\n }\n\n // Add Custom Fields for Order\n const orderWithCustomFields = [\n {\n id: 1,\n groupClassname: 'billing-info-container__customFields',\n groupItems: [...customFields.addOnFields],\n },\n ]\n\n const addOnDataWithCustomFields = {\n fields: orderWithCustomFields,\n }\n\n return { addOnDataWithCustomFields }\n}\n\nexport const getFieldsKeys = (customFields: any) =>\n _map(customFields, field => field.name)\n","export const isJson = (value: any): boolean => {\n try {\n JSON.parse(value)\n } catch (e) {\n return false\n }\n return true\n}\n","import { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios'\nimport _get from 'lodash/get'\n\nimport { CONFIGS, isBrowser } from '../utils'\nimport { getCookieByName, setCustomCookie } from '../utils/cookies'\nimport { publicRequest } from './publicRequest'\n\npublicRequest.interceptors.request.use((config: InternalAxiosRequestConfig) => {\n const guestToken = isBrowser ? window.localStorage.getItem('auth_guest_token') : null\n if (guestToken) {\n config.headers['Authorization-Guest'] = guestToken\n }\n\n const xtfCookie = getCookieByName('X-TF-ECOMMERCE')\n if (xtfCookie) {\n config.headers['X-TF-ECOMMERCE'] = xtfCookie\n }\n\n const additionalCookiesHeaderValue = isBrowser ? document.cookie ?? '' : ''\n if (additionalCookiesHeaderValue !== '') {\n config.headers['Additional-Cookies'] = additionalCookiesHeaderValue\n }\n\n if (CONFIGS.X_SOURCE_ORIGIN) {\n config.headers['X-Source-Origin'] = CONFIGS.X_SOURCE_ORIGIN\n }\n\n if (CONFIGS.BASE_URL) {\n config.baseURL = CONFIGS.BASE_URL + '/api'\n }\n\n return config\n})\n\npublicRequest.interceptors.response.use(\n (response: AxiosResponse) => {\n const authGuestToken: string | null = _get(\n response,\n 'headers.authorization-guest',\n ''\n )\n\n if (isBrowser && authGuestToken) {\n window.localStorage.setItem('auth_guest_token', authGuestToken)\n publicRequest.setGuestToken(authGuestToken)\n }\n\n const xtfCookie = _get(response, 'headers.x-tf-ecommerce')\n const url = _get(response, 'config.url')\n const method = _get(response, 'config.method')\n\n if (xtfCookie && !(url === '/auth' && method === 'delete')) {\n setCustomCookie('X-TF-ECOMMERCE', xtfCookie)\n }\n\n return response\n },\n (error: AxiosError) => {\n if (error?.response?.status === 401) {\n if (isBrowser) {\n window.localStorage.removeItem('user_data')\n const errorType = _get(error, 'response.data.error')\n if (errorType === 'invalid_token') {\n window.location.href = '/'\n }\n }\n }\n\n const authGuestToken = _get(error, 'response.headers.authorization-guest')\n if (isBrowser && authGuestToken) {\n window.localStorage.setItem('auth_guest_token', authGuestToken)\n publicRequest.setGuestToken(authGuestToken)\n }\n\n return Promise.reject(error)\n }\n)\n","import _forEach from 'lodash/forEach'\nimport _get from 'lodash/get'\nimport _map from 'lodash/map'\n\nimport { IGroupItem } from '../types'\n\nexport const optionsAdapter = (options: any) => {\n const adaptedOptions = _map(options, option => ({\n id: option.id,\n label: option.name,\n value: option.value,\n }))\n return adaptedOptions\n}\n\nexport const fieldDataAdapter = (field: IGroupItem) => {\n const {\n name,\n label,\n required,\n description,\n type,\n options,\n ...restValues\n } = field\n\n const adaptedField: IGroupItem = {\n name,\n label,\n required,\n description,\n type,\n className: _get(restValues, 'settings.className', ''),\n value: _get(restValues, 'defaultValue'),\n }\n\n switch (type) {\n case 'textarea':\n adaptedField.type = 'text'\n adaptedField.multiline = true\n break\n case 'radio':\n adaptedField.radios = optionsAdapter(options)\n break\n case 'select_multi':\n adaptedField.isMultiple = true\n adaptedField.options = optionsAdapter(options)\n break\n case 'select':\n adaptedField.type = 'select_multi'\n adaptedField.isMultiple = false\n adaptedField.options = optionsAdapter(options)\n break\n default:\n break\n }\n\n return adaptedField\n}\n\nexport const customFieldsDataAdapter = (data: any) => {\n const adaptedTicketFields: Array<IGroupItem> = []\n const adaptedOrderFields: Array<IGroupItem> = []\n const adaptedAddOnFields: Array<IGroupItem> = []\n\n _forEach(data, field => {\n const ticketFields = _get(field, 'ticket.group.fields')\n const orderFields = _get(field, 'order.group.fields')\n const addOnFields = _get(field, 'add-on.group.fields')\n\n _forEach(ticketFields, ticketField => {\n adaptedTicketFields.push(fieldDataAdapter(ticketField))\n })\n\n _forEach(orderFields, orderField => {\n adaptedOrderFields.push(fieldDataAdapter(orderField))\n })\n\n _forEach(addOnFields, addOnField => {\n adaptedAddOnFields.push(fieldDataAdapter(addOnField))\n })\n })\n\n return { ticketsFields: adaptedTicketFields, orderFields: adaptedOrderFields, addOnFields: adaptedAddOnFields }\n}\n","import { AxiosRequestConfig, AxiosResponse } from 'axios'\n\nimport { CONFIGS } from '../utils'\nimport { publicRequest } from './publicRequest'\n\nexport const authorize = async (\n data: IAuthorizeRequestData\n): Promise<IProfileResponse> => {\n const response: AxiosResponse<IProfileResponse, AxiosRequestConfig> =\n await publicRequest.post(\n `/auth?clientId=${CONFIGS.CLIENT_ID || 'e9d8f8922797b4621e562255afe90dbf'}`,\n data\n )\n return response.data\n}\n\nexport const signUp = async (data: ISignupRequestData): Promise<IProfileResponse> => {\n const response: AxiosResponse<IProfileResponse, AxiosRequestConfig> =\n await publicRequest.post('auth/signup', { ...data })\n return response.data\n}\n\nexport const register = async (data: FormData): Promise<IProfileResponse> => {\n const response: AxiosResponse<IProfileResponse, AxiosRequestConfig> =\n await publicRequest.post('v1/oauth/register-rn', data)\n return response.data\n}\n\nexport const getProfileData = async (): Promise<IProfileResponse> => {\n const response: AxiosResponse<IProfileResponse, AxiosRequestConfig> =\n await publicRequest.get('/customer/profile/')\n return response.data\n}\n\nexport const logout = async (): Promise<IAxiosResponseData> => {\n const response: AxiosResponse<IAxiosResponseData, AxiosRequestConfig> =\n await publicRequest.delete('/auth')\n return response.data\n}\n\n/**\n * Checks whether a given email address already exists via the `/ajax/contact-email` endpoint.\n *\n * The underlying API is expected to return a JSON object containing:\n * - `exists`: `1` if the email exists, `0` otherwise\n * - `error`: `1` if an error occurred, `0` otherwise\n * - `message`: an optional error message when `error === 1`\n *\n * This function normalizes that response to an object with:\n * - `exists`: a boolean indicating whether the email exists\n * - `error`: an optional string containing an error message, if any\n *\n * On network or unexpected errors, it returns `{ exists: false, error: 'Failed to check email' }`.\n *\n * @param {string} email - The email address to check for existence.\n * @returns {Promise<{ exists: boolean; error?: string }>} A promise that resolves to the normalized\n * result of the email existence check.\n */\nexport const checkEmailExists = async (\n email: string\n): Promise<{ exists: boolean, error?: string }> => {\n try {\n const formData = new FormData()\n formData.append('email', email)\n formData.append('is_checkout_flow', 'true')\n\n const baseUrl = publicRequest.defaults.baseURL?.replace('/api', '') || ''\n const url = `${baseUrl}/ajax/contact-email`\n\n const response: AxiosResponse<any, AxiosRequestConfig> =\n await publicRequest.post(url, formData, {\n headers: {\n 'Content-Type': 'multipart/form-data',\n },\n })\n\n return {\n exists: response.data.exists === 1,\n error: response.data.error === 1 ? response.data.message : undefined,\n }\n } catch (error) {\n console.error('Error checking email:', error)\n return {\n exists: false,\n error: 'Failed to check email',\n }\n }\n}\n","import { AxiosRequestConfig, AxiosResponse } from 'axios'\n\nimport { CONFIGS } from '../utils'\nimport { publicRequest } from './publicRequest'\n\nexport const getOrders = async (\n page: number,\n limit: number,\n eventSlug: string\n): Promise<IOrdersResponse> => {\n const slug = eventSlug || CONFIGS.EVENT_SLUG || ''\n\n const response: AxiosResponse<IOrdersResponse, AxiosRequestConfig> =\n await publicRequest.get(\n `v1/account/orders/?page=${page}&limit=${limit}&filter[event]=${slug}&${\n CONFIGS.BRAND_SLUG\n ? `filter[brand]=${CONFIGS.BRAND_SLUG}&filter[subbrands]=true`\n : ''\n }`\n )\n\n return response.data\n}\n\nexport const getOrderDetails = async (orderId: string): Promise<IOrderResponse> => {\n const response: AxiosResponse<IOrderResponse, AxiosRequestConfig> =\n await publicRequest.get(`v1/account/order/${orderId}`)\n\n return response.data\n}\n","import { AxiosRequestConfig, AxiosResponse } from 'axios'\n\nimport { isBrowser } from '../utils'\nimport { publicRequest } from './publicRequest'\n\nexport const addToCart = async (\n id: string | number,\n data: ICartRequestData\n): Promise<ICartResponse> => {\n const response: AxiosResponse<ICartResponse, AxiosRequestConfig> =\n await publicRequest.post(\n `v1/event/${id}/add-to-cart/`,\n { data },\n {\n headers: {\n ...publicRequest.defaults.headers.common,\n 'Referer-Url': isBrowser ? document.referrer : '',\n },\n }\n )\n return response.data\n}\n\nexport const getCart = async (): Promise<IGetCartResponse> => {\n const response: AxiosResponse<IGetCartResponse, AxiosRequestConfig> =\n await publicRequest.get(`v1/cart`)\n return response.data\n}\n","import { AxiosRequestConfig, AxiosResponse } from 'axios'\n\nimport { ICheckoutResponse } from '../types/api/checkout'\nimport { publicRequest } from './publicRequest'\n\nexport const postOnCheckout = async (\n data: any,\n freeTicket = false\n): Promise<ICheckoutResponse> => {\n if (freeTicket) {\n delete data.attributes.city\n delete data.attributes.country\n delete data.attributes.state\n delete data.attributes.street_address\n }\n\n const response: AxiosResponse<ICheckoutResponse, AxiosRequestConfig> =\n await publicRequest.post(`v1/on-checkout`, { data })\n\n return response.data\n}\n\nexport const updateCheckout = async (data: any): Promise<ICheckoutResponse> => {\n const response: AxiosResponse<ICheckoutResponse, AxiosRequestConfig> =\n await publicRequest.post(`v1/checkout`, { data })\n\n return response.data\n}\n","import { AxiosRequestConfig, AxiosResponse } from 'axios'\nimport _forEach from 'lodash/forEach'\n\nimport { getQueryVariable, isBrowser } from '../utils'\nimport { publicRequest } from './publicRequest'\n\nexport const getEvent = async (\n id: string | number,\n pk?: string\n): Promise<IEventResponse> => {\n let referralValue = ''\n let invitationHash\n if (isBrowser) {\n const params = new URL(`${window.location}`)\n const referralId = params.searchParams.get('ttf_r') || ''\n const referral_key = window.localStorage.getItem('referral_key')\n const [, referralIdlocal] = (referral_key || '').split('.')\n referralValue = referralId || (referralIdlocal ?? '')\n invitationHash = params.searchParams.get('invitation-hash') || null\n }\n\n const response: AxiosResponse<IEventResponse, AxiosRequestConfig> =\n await publicRequest.get(`v1/event/${id}`, {\n params: { pk, invitationHash },\n headers: {\n ...publicRequest.defaults.headers.common,\n 'Referer-Url': isBrowser ? document.referrer : '',\n 'Referrer-Id': isBrowser ? referralValue : '',\n },\n })\n return response.data\n}\n\nexport const getTickets = async (\n eventId: string | number,\n promoCode: string,\n pk?: string\n): Promise<ITicketsAdaptedResponse> => {\n const invitationHash = getQueryVariable('invitation-hash')\n const referralId = getQueryVariable('ttf_r')\n\n if (referralId) {\n window.localStorage.setItem('promoter_id', referralId)\n }\n\n const promoterId = window.localStorage.getItem('promoter_id')\n const params = { pk } as Record<string, string | number | undefined>\n\n if (invitationHash) {\n params['invitation-hash'] = invitationHash\n }\n\n const headers = publicRequest.defaults.headers.common\n\n if (promoterId) {\n headers['Promotion-Event'] = String(eventId)\n headers['Referrer-Id'] = isBrowser ? promoterId : ''\n }\n\n if (promoCode) {\n headers['Promotion-Event'] = String(eventId)\n headers['Promotion-Code'] = promoCode\n window.localStorage.removeItem('promoter_id')\n }\n\n const response: AxiosResponse<ITicketsResponse, AxiosRequestConfig> =\n await publicRequest.get(`v1/event/${eventId}/tickets/`, {\n params,\n headers,\n })\n\n const { tickets } = response.data.data.attributes\n const ticketsArr: ITicketData[] = []\n _forEach(tickets, item => {\n ticketsArr.push(item)\n })\n const adaptedResponse: AxiosResponse<ITicketsAdaptedResponse, AxiosRequestConfig> = {\n ...response,\n data: {\n ...response.data,\n data: {\n ...response.data.data,\n attributes: {\n ...response.data.data.attributes,\n tickets: ticketsArr,\n },\n },\n },\n }\n\n return adaptedResponse.data\n}\n\nexport const getTimeSlotsByDate = async (\n eventId: string | number,\n date: string,\n promoCode?: string,\n pk?: string\n): Promise<ITimeslotsAdaptedResponse> => {\n const invitationHash = getQueryVariable('invitation-hash')\n const referralId = getQueryVariable('ttf_r')\n\n if (referralId) {\n window.localStorage.setItem('promoter_id', referralId)\n }\n\n const promoterId = window.localStorage.getItem('promoter_id')\n const params = { pk } as Record<string, string | number | undefined>\n\n if (invitationHash) {\n params['invitation-hash'] = invitationHash\n }\n\n const headers = publicRequest.defaults.headers.common\n\n if (promoterId) {\n headers['Promotion-Event'] = String(eventId)\n headers['Referrer-Id'] = isBrowser ? promoterId : ''\n }\n\n if (promoCode) {\n headers['Promotion-Event'] = String(eventId)\n headers['Promotion-Code'] = promoCode\n window.localStorage.removeItem('promoter_id')\n }\n\n const response: AxiosResponse<ITimeslotsAdaptedResponse, AxiosRequestConfig> =\n await publicRequest.get(`v1/event/${eventId}/timeslots`, {\n params: {\n date,\n remove_past_slots: true,\n ...params,\n },\n headers,\n })\n return response.data\n}\n\nexport const getCountries = async (): Promise<ICountriesResponse> => {\n const response: AxiosResponse<ICountriesResponse, AxiosRequestConfig> =\n await publicRequest.get('/countries/list')\n return response.data\n}\n\nexport const getStates = async (countryId: string | number): Promise<IStatesResponse> => {\n const response: AxiosResponse<IStatesResponse, AxiosRequestConfig> =\n await publicRequest.get(`/countries/${countryId}/states/`)\n return response.data\n}\n\nexport const sendRSVPInfo = async (\n eventId: number,\n data: { data: IRSVPRequestData }\n): Promise<IRSVPResponse> => {\n const response: AxiosResponse<IRSVPResponse, AxiosRequestConfig> =\n await publicRequest.post(`v1/event/${eventId}/send-rsvp-info`, data)\n\n return response.data\n}\n\nexport const addToWaitingList = async (\n id: number,\n data: IWaitingListRequestData\n): Promise<IWaitingListResponse> => {\n const response: AxiosResponse<IWaitingListResponse, AxiosRequestConfig> =\n await publicRequest.post(`v1/event/${id}/add_to_waiting_list`, {\n data,\n })\n\n return response.data\n}\n\nexport const postReferralVisits = async (\n eventId: string,\n referralId: string\n): Promise<IAxiosResponseData> => {\n const response: AxiosResponse<IAxiosResponseData, AxiosRequestConfig> =\n await publicRequest.post(`v1/event/${eventId}/referrer/`, {\n referrer: `${referralId}`,\n })\n\n return response.data\n}\n\nexport const validatePhoneNumber = async (phone: string): Promise<IAxiosResponseData> => {\n const response: AxiosResponse<IAxiosResponseData, AxiosRequestConfig> =\n await publicRequest.get(`/v1/account/validate_phone?phone=${phone}`)\n\n return response.data\n}\n","import { AxiosRequestConfig, AxiosResponse } from 'axios'\nimport _map from 'lodash/map'\nimport { nanoid } from 'nanoid'\n\nimport { isBrowser } from '../utils'\nimport { publicRequest } from './publicRequest'\n\nexport const getPaymentData = async (hash: string): Promise<IPaymentDataResponse> => {\n const response: AxiosResponse<IPaymentDataResponse, AxiosRequestConfig> =\n await publicRequest.get(`v1/order/${hash}/review`, {\n headers: { 'Referer-Url': isBrowser ? document.referrer : '' },\n })\n\n return response.data\n}\n\nexport const handlePaymentSuccess = async (\n orderHash: string\n): Promise<IPaymentSuccessDataResponse> => {\n const response: AxiosResponse<IPaymentSuccessDataResponse, AxiosRequestConfig> =\n await publicRequest.post(`v1/order/${orderHash}/success`, undefined, {\n headers: {\n ...publicRequest.defaults.headers.common,\n 'Referer-Url': isBrowser ? document.referrer : '',\n },\n })\n return response.data\n}\n\nexport const handleFreeSuccess = async (\n orderHash: string\n): Promise<IFreeRegistrationDataResponse> => {\n const response: AxiosResponse<IFreeRegistrationDataResponse, AxiosRequestConfig> =\n await publicRequest.post(\n `v1/order/${orderHash}/complete_free_registration`,\n undefined,\n { headers: { 'Referer-Url': isBrowser ? document.referrer : '' } }\n )\n return response.data\n}\n\nexport const getConfirmationData = async (\n orderHash: string\n): Promise<ICheckoutCompleteDataResponse> => {\n const response: AxiosResponse<ICheckoutCompleteDataResponse, AxiosRequestConfig> =\n await publicRequest.get(`v1/order/${orderHash}/payment/complete`)\n return response.data\n}\n\nexport const getConditions = async (\n eventId: string\n): Promise<IConditionsAdaptedDataResponse> => {\n const response: AxiosResponse<IConditionsDataResponse, AxiosRequestConfig> =\n await publicRequest.get(`v1/event/${eventId}/conditions`)\n\n const adaptedData: IConditionsAdaptedData[] = _map(\n response.data.data.attributes,\n item => ({\n id: nanoid(),\n text: item,\n checked: false,\n })\n )\n\n const returnData: AxiosResponse<IConditionsAdaptedDataResponse, AxiosRequestConfig> = {\n ...response,\n data: {\n ...response.data,\n data: {\n ...response.data.data,\n attributes: adaptedData,\n },\n },\n }\n\n return returnData.data\n}\n","import { AxiosRequestConfig, AxiosResponse } from 'axios'\n\nimport { publicRequest } from './publicRequest'\n\nexport const resaleTicket = async (\n data: FormData,\n hash: string\n): Promise<IResaleTicketResponse> => {\n const response: AxiosResponse<IResaleTicketResponse, AxiosRequestConfig> =\n await publicRequest.post(`v1/ticket/${hash}/sell`, data)\n\n return response.data\n}\n\nexport const removeFromResale = async (\n hash: string\n): Promise<IRemoveFromResaleResponse> => {\n const response: AxiosResponse<IRemoveFromResaleResponse, AxiosRequestConfig> =\n await publicRequest.delete(`v1/ticket/${hash}/sell`)\n\n return response.data\n}\n\nexport const processTicket = (hash: string) =>\n publicRequest.post(`v1/ticket/${hash}/process`)\n\nexport const declineInvitation = (hash: string) =>\n publicRequest.post(`v1/ticket/${hash}/decline`)\n","import { AxiosRequestConfig, AxiosResponse } from 'axios'\n\nimport { publicRequest } from './publicRequest'\n\nexport const getCustomerExistsData = async (\n accessHash: string\n): Promise<ICheckCustomerExistsData> => {\n const response: AxiosResponse<ICheckCustomerExistsData, AxiosRequestConfig> =\n await publicRequest.get(`/v1/delegation-access/${accessHash}/customer-exists`)\n return response.data\n}\n\ninterface IDelegationTicketType {\n delegationMaxQuantity: number | string;\n}\n\ninterface IIssueTicketResponseData {\n delegationName: string;\n eventImage: string;\n eventName: string;\n ticketTypes: {\n [key: number]: IDelegationTicketType;\n };\n}\n\ninterface IIssueTicketResponse {\n data: {\n attributes: IIssueTicketResponseData;\n relationships: Array<any>;\n type: string;\n message: string;\n };\n}\n\nexport interface IDelegationsTicketType {\n [key: number]: {\n delegationMaxQuantity: string | number;\n delegationQuantityIssued: string | number;\n matrixRecordId: string | number;\n optionValue: string | number;\n };\n}\nexport interface IDelegationsData {\n delegationName: string;\n eventImage: string;\n eventName: string;\n ticketTypes: IDelegationsTicketType;\n tickets: Array<any>;\n}\n\ninterface IDelegationsResponse {\n data: {\n data: {\n attributes: IDelegationsData;\n relationships: Array<any>;\n type: string;\n };\n };\n}\n\nexport const getDelegationTickets = (\n accessHash: string\n): Promise<IDelegationsResponse> => {\n const res = publicRequest.get(`v1/delegation-access/${accessHash}/consumer-page-info`)\n return res\n}\n\nexport const issueTicket = async (\n accessHash: string,\n data: ITicketIssueData\n): Promise<IIssueTicketResponse> => {\n const response: AxiosResponse<IIssueTicketResponse, AxiosRequestConfig> =\n await publicRequest.post(`v1/delegation-access/${accessHash}/issue-ticket`, {\n data: {\n attributes: data,\n },\n })\n return response.data\n}\n","import './interceptors'\n\nimport { AxiosRequestConfig, AxiosResponse } from 'axios'\nimport _get from 'lodash/get'\n\nimport { customFieldsDataAdapter } from '../adapters'\nimport {\n GetNetverifyUrlResponseData,\n UpdateVerificationStatusResponseData,\n VerificationStatusResponseData,\n} from '../types/verification'\nimport { getQueryVariable, isBrowser } from '../utils'\nimport { publicRequest } from './publicRequest'\n\nexport { authorize, getProfileData, signUp, register, logout, checkEmailExists } from './auth'\nexport { setAxiosHeader, setBaseUrl } from './publicRequest'\nexport { getOrders, getOrderDetails } from './orders'\nexport { addToCart, getCart } from './cart'\nexport { postOnCheckout } from './checkout'\n\nexport {\n getEvent,\n getTickets,\n getCountries,\n getStates,\n addToWaitingList,\n sendRSVPInfo,\n postReferralVisits,\n validatePhoneNumber,\n} from './common'\n\nexport {\n getPaymentData,\n getConditions,\n handlePaymentSuccess,\n handleFreeSuccess,\n getConfirmationData,\n} from './payment'\n\nexport {\n resaleTicket,\n removeFromResale,\n processTicket,\n declineInvitation,\n} from './resale'\n\nexport { issueTicket, getDelegationTickets } from './guestTicketDelegation'\n\nexport const setCustomHeader = (response: any) => {\n const guestHeaderResponseValue = _get(response, 'headers.authorization-guest')\n const guestHeaderExistingValue = _get(response, 'config.headers[Authorization-Guest]')\n const guestHeader = guestHeaderResponseValue || guestHeaderExistingValue\n\n if (guestHeader) {\n if (isBrowser) {\n window.localStorage.setItem('auth_guest_token', guestHeader)\n publicRequest.setGuestToken(guestHeader)\n }\n }\n}\n\nexport const handlePaymentData = (orderHash: string, data: any) => {\n const res = publicRequest\n .post(`v1/order/${orderHash}/pay`, {\n data: { attributes: { 'stripe-source': data } },\n })\n .catch(error => {\n throw error\n })\n return res\n}\n\nexport const createPaymentPlan = (orderHash: string, stripePaymentMethodId: string) => {\n const res = publicRequest\n .post(\n `v1/order/${orderHash}/payment_plan/create`,\n {\n stripe_payment_method_id: stripePaymentMethodId,\n },\n {\n headers: {\n 'Referer-Url': isBrowser ? document.referrer : '',\n },\n }\n )\n .catch(error => {\n throw error\n })\n return res\n}\n\n// forgot password\nexport const forgotPassword = (email: string) =>\n publicRequest.post(`/auth/restore-password`, { email })\n\n// reset password\ninterface IResetPasswordData {\n token: string;\n password: string;\n confirmPassword: string;\n}\nexport const resetPassword = (data: IResetPasswordData) =>\n publicRequest.post(`/auth/reset-password`, data)\n\nexport const getAddons = async (eventId: string) => {\n const result = await publicRequest.get(`/v1/event/${eventId}/add-ons`)\n const addons = _get(result, 'data.data.attributes', [])\n return addons\n}\n\nexport const selectAddons = (data: any) => {\n publicRequest.post(`v1/on-checkout`, data)\n}\n\nexport interface AttributesConfig {\n has_add_on: boolean;\n names_required: boolean;\n phone_required: boolean;\n minimum_age?: any;\n age_required: boolean;\n hide_phone_field: boolean;\n event_id: string;\n free_ticket: boolean;\n collect_mandatory_wallet_address: boolean;\n collect_optional_wallet_address: boolean;\n collect_mandatory_company: boolean;\n collect_optional_company: boolean;\n collect_mandatory_job_title: boolean;\n collect_optional_job_title: boolean;\n collect_mandatory_business_category: boolean;\n collect_optional_business_category: boolean;\n collect_mandatory_instagram: boolean;\n collect_optional_instagram: boolean;\n skip_billing_page: boolean;\n cart: ICart[];\n}\n\nexport interface ConfigsData {\n attributes: AttributesConfig;\n relationships: any[];\n type: string;\n}\n\nexport interface ResponseConfigs {\n data: ConfigsData;\n success: boolean;\n error: boolean;\n message: string;\n status: number;\n}\n\nexport const getCheckoutPageConfigs = async (): Promise<ResponseConfigs> => {\n const response = await publicRequest.get(`v1/checkout-configs`)\n return response.data\n}\n\n\nexport const getCustomFields = async (eventId: string) => {\n const response = await publicRequest.get(`/v1/event/${eventId}/custom_fields`)\n const customFields = _get(response, 'data.data.attributes', [])\n const adaptedResponse = customFieldsDataAdapter(customFields)\n return adaptedResponse\n}\n\nexport const updateOrderCustomFields = async (\n eventId: string,\n orderId: string,\n customFieldsData: Record<string, any>\n) => {\n const response = await publicRequest.put(`v1/event/${eventId}/order-data-capture`, {\n data: {\n attributes: {\n order_id: orderId,\n data_capture: customFieldsData,\n },\n },\n })\n return response\n}\n\nexport const updateTicketHoldersCustomFields = async (\n eventId: string,\n customFieldsData: Record<string, any>,\n ticketHash: string\n) => {\n const response = await publicRequest.put(`v1/event/${eventId}/ticket-data-capture`, {\n data: {\n attributes: {\n ticket_hash: ticketHash,\n ticket_data_capture: {\n [ticketHash]: customFieldsData,\n },\n },\n },\n })\n return response\n}\n\nexport const confirmPreRegistration = async (\n eventId: string | number,\n data: IConfirmPreRegistrationRequestData\n) => {\n const response = await publicRequest.post(\n `v1/event/${eventId}/pre-registration/confirm`,\n {\n data: {\n attributes: data,\n },\n }\n )\n return response.data\n}\n\n// seat map <--start-->\n\n// const makeId = (length = 20) => {\n// let result = ''\n// const characters =\n// 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\n// const charactersLength = characters.length\n// for (let i = 0; i < length; i++) {\n// result += characters.charAt(Math.floor(Math.random() * charactersLength))\n// }\n// return result\n// }\n\nexport const getSeatMapData = async (\n eventId: string | number\n): Promise<SeatMapDataResponse> => {\n localStorage.setItem('tierId', '')\n const reservedSeatsHash = getQueryVariable('reserved_seats_hash')\n const params = {} as any\n if (reservedSeatsHash) {\n params.reserved_seats_hash = reservedSeatsHash\n }\n\n const response: AxiosResponse<SeatMapDataResponse, AxiosRequestConfig> =\n await publicRequest.get(`v1/event/${eventId}/seat-map-data`, { params })\n return response.data\n}\n\nexport const getSeatMapStatuses = async (\n eventId: string | number\n): Promise<SeatMapStatusesResponse> => {\n const response = await publicRequest.get(`v1/event/${eventId}/seats/status`)\n return response.data\n}\n\nexport const reserveSeat = async (\n eventId: string | number,\n tierId: string,\n seatId: string\n) => {\n const response = await publicRequest.post(`v1/event/${eventId}/seats/reserve`, {\n data: {\n tierId,\n seatId,\n ttl: 10,\n },\n })\n return response.data\n}\n\nexport const removeSeatReserve = async (\n eventId: string | number,\n tierId: string,\n seatIds: string[]\n) => {\n const response = await publicRequest.delete(\n `v1/event/${eventId}/seats/delete-reserved`,\n {\n data: {\n tierId,\n seatIds,\n },\n }\n )\n\n return response.data\n}\n\n// seat map <--end-->\nexport function getPixelScript(id: string | number, pageOptions: any) {\n const response = publicRequest.get(`v1/event/${id}/track`, {\n params: {\n page_url: pageOptions.pageUrl,\n page: pageOptions.page,\n order_hash: pageOptions.orderHash,\n },\n })\n return response\n}\n\n// ID Verification\nexport const getNetverifyUrl = async (): Promise<GetNetverifyUrlResponseData> => {\n const response: AxiosResponse<GetNetverifyUrlResponseData, AxiosRequestConfig> =\n await publicRequest.get('v1/authenticate/verify')\n return response.data\n}\n\nexport const checkVerificationStatus = async (): Promise<{\n data: VerificationStatusResponseData;\n}> => {\n const response: AxiosResponse<\n { data: VerificationStatusResponseData },\n AxiosRequestConfig\n > = await publicRequest.get('v1/authenticate/get-verification-info')\n return response.data\n}\n\nexport const updateVerificationStatus = async (): Promise<{\n data: UpdateVerificationStatusResponseData;\n}> => {\n const response: AxiosResponse<\n { data: UpdateVerificationStatusResponseData },\n AxiosRequestConfig\n > = await publicRequest.patch('v1/authenticate/verify', {\n data: {\n attributes: {\n verification: {\n verificationStatus: 'PENDING',\n },\n },\n },\n })\n return response.data\n}\n\nexport const checkCustomerOrder = async (orderHash: string): Promise<any> => {\n const response: AxiosResponse<any, AxiosRequestConfig> = await publicRequest.get(\n `v1/order/${orderHash}/verify-customer-order`\n )\n\n return response.data\n}\n\nexport const refreshSeatReservation = async (eventId: string, orderId: string) => {\n const response: AxiosResponse<any, AxiosRequestConfig> = await publicRequest.patch(\n `event/${eventId}/reservation/refresh/`,\n {\n order_id: orderId,\n }\n )\n return response\n}\n","import { CircularProgress } from '@mui/material'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport React, { useEffect, useState } from 'react'\n\nimport { getCustomFields } from '../../api'\nimport {\n getDataWithCustomFields,\n getFieldsKeys,\n getQueryVariable,\n} from '../../utils'\nimport { getAddOnDataWithCustomFields } from '../../utils/customFields'\n\nconst withCustomFields = (Children: any) => (props: any) => {\n const {\n data = [],\n ticketHoldersFields = {\n id: 1,\n fields: [],\n },\n skipCustomFields = true,\n onGetCustomFieldsError = _identity,\n onGetCustomFieldsSuccess = _identity,\n ...args\n } = props\n\n const [lodaing, setLoading] = useState(!skipCustomFields)\n const [customFieldsData, setCustomFieldsData] = useState({} as any)\n const [customFieldsOrderKeys, setCustomFieldsOrderKeys] = useState([] as any)\n const [customFieldsTicketHolderKeys, setCustomFieldsTicketHolderKeys] = useState([] as any)\n const [customFieldsAddOnKeys, setCustomFieldsAddOnKeys] = useState([] as any)\n\n const getFields = async () => {\n try {\n const eventId = getQueryVariable('event_id') || getQueryVariable(\"eventId\") || ''\n const customFields = await getCustomFields(eventId)\n\n const orderFieldsKeys = getFieldsKeys(_get(customFields, 'orderFields', []))\n const ticketHoldersFieldsKeys = getFieldsKeys(_get(customFields, 'ticketsFields', []))\n const addOnFieldsKeys = getFieldsKeys(_get(customFields, 'addOnFields', []))\n\n setCustomFieldsTicketHolderKeys(ticketHoldersFieldsKeys)\n setCustomFieldsOrderKeys(orderFieldsKeys)\n setCustomFieldsData(customFields)\n setCustomFieldsAddOnKeys(addOnFieldsKeys)\n\n onGetCustomFieldsSuccess(customFields)\n } catch (e) {\n onGetCustomFieldsError(e)\n } finally {\n setLoading(false)\n }\n }\n\n useEffect(() => {\n if (!skipCustomFields) {\n getFields()\n }\n }, [])\n\n const {\n dataWithCustomFields,\n ticketHoldersWithCustomFields,\n } = getDataWithCustomFields(data, ticketHoldersFields, customFieldsData)\n\n const { addOnDataWithCustomFields } = getAddOnDataWithCustomFields(customFieldsData)\n\n if (lodaing) {\n return <CircularProgress size={50} />\n }\n\n return (\n <Children\n {...args}\n data={dataWithCustomFields}\n ticketHoldersFields={ticketHoldersWithCustomFields}\n customFieldsOrderKeys={customFieldsOrderKeys}\n customFieldsTicketHolderKeys={customFieldsTicketHolderKeys}\n customFieldsAddOnKeys={customFieldsAddOnKeys}\n addOnDataWithCustomFields={addOnDataWithCustomFields}\n />\n )\n}\n\nexport { withCustomFields }\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport _get from 'lodash/get'\nimport { useEffect } from 'react'\n\nimport { getPixelScript } from '../api'\nimport { isBrowser } from '../utils'\n\nexport interface pageOptions {\n pageUrl: string;\n page?: string;\n orderHash?: string;\n}\n\nfunction appendScriptsToHeader(code: string) {\n if (isBrowser && code) {\n const tempEl = document.createElement('div')\n tempEl.innerHTML = code\n const scripts = tempEl.getElementsByTagName('script')\n\n for (let index = 0; index < scripts.length; ++index) {\n const script = document.createElement('script')\n script.type = 'text/javascript'\n\n if (scripts[index].src) {\n script.src = scripts[index].src\n } else {\n script.innerHTML = scripts[index].innerHTML\n }\n\n document.head.appendChild(script)\n }\n }\n}\n\nconst addGTagToHeader = (tagId?: string, links?: string[]) => {\n if (document?.head && document?.body && tagId) {\n const script = document.createElement('script')\n script.innerHTML = `(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\n new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\n j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\n 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n })(window,document,'script','dataLayer','${tagId}');`.trim()\n document.head.append(script)\n\n const scriptBody = document.createElement('noscript')\n scriptBody.innerHTML = `<iframe src=\"https://www.googletagmanager.com/ns.html?id=${tagId}\"\n height=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"></iframe>`\n document.body.append(scriptBody);\n\n (window as any).dataLayer = (window as any).dataLayer || [];\n (window as any).gtag = function gtag(...args: any){(window as any).dataLayer.push(args)}\n if (links) {\n (window as any)?.gtag('set', 'linker', {\n 'domains': links\n })\n }\n (window as any).gtag('js', new Date());\n (window as any).gtag('config', tagId)\n }\n}\n\nexport const usePixel = async (\n eventId: string | number,\n options: pageOptions\n) => {\n const getScript = async () => {\n if (!eventId) return\n\n try {\n const response = await getPixelScript(eventId, options)\n const pixels = _get(response, 'data.data.attributes.pixels', '')\n appendScriptsToHeader(pixels)\n const brandGoogleTagKey = _get(response, 'data.data.attributes.brandGoogleTagKey', '')\n const eventGoogleTagKey = _get(response, 'data.data.attributes.eventGoogleTagKey', '')\n const eventGoogleTagManagerLinkerDomains = _get(response, 'data.data.attributes.eventGoogleTagManagerLinkerDomains', '')\n addGTagToHeader(brandGoogleTagKey, eventGoogleTagManagerLinkerDomains)\n if (eventGoogleTagKey) {\n addGTagToHeader(eventGoogleTagKey, eventGoogleTagManagerLinkerDomains)\n }\n } catch (e) {\n console.error(e)\n }\n }\n\n useEffect(() => {\n getScript()\n }, [eventId])\n}","export const emailRegex = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/\n\nexport const combineValidators = (...validators: any) => (...value: any) => {\n for (let i = 0; i < validators.length; ++i) {\n const error_message = validators[i](...value)\n if (error_message) return error_message\n }\n}\n\nexport function isFalsy(item: any) {\n try {\n if (\n !item || // handles most, like false, 0, null, etc\n (typeof item === 'object' &&\n Object.keys(item).length === 0 && // for empty objects, like {}, []\n !(typeof item.addEventListener === 'function')) // omit webpage elements\n ) {\n return true\n }\n } catch (err) {\n return true\n }\n\n return false\n}\n\nexport const requiredValidator = (\n value?: string | number | Array<string> | boolean,\n message?: string\n): string => {\n let errorMessage = ''\n\n if (isFalsy(typeof value === 'string' ? value.trim() : value)) {\n errorMessage = message || 'Required'\n }\n return errorMessage\n}\n\nexport const emailValidator = (email: string) =>\n !emailRegex.test(email) ? 'Please enter a valid email address' : ''\n\nexport const passwordValidator = (password: string): string => {\n if (!password || password.length < 6) {\n return 'The password must be at least 6 characters.'\n }\n return ''\n}\n\nexport const confirmPasswordValidator = (confirmPassword: string, password: string): string => {\n if (confirmPassword !== password) {\n return 'Passwords do not match.'\n }\n return ''\n}\n\nexport const confirmEmailValidator = (confirmEmail: string, email: string): string => {\n if (confirmEmail !== email) {\n return 'Emails do not match.'\n }\n return ''\n}\n","export const currencyNormalizerCreator = (\n value: string | number,\n currency: string\n) => (!value ? '' : `${getCurrencySymbolByCurrency(currency)} ${value}`)\n\nexport const createFixedFloatNormalizer = (fixedValue: number) => (\n value: string | number\n) => (value || `${value}` === '0' ? (+value).toFixed(fixedValue) : '')\n\nexport const getCurrencySymbolByCurrency = (currency = '') => {\n switch (currency) {\n case 'GBP':\n return '£'\n case 'EUR':\n return '€'\n case 'INR':\n return '₹'\n case 'JMD':\n return 'J$'\n case 'NZD':\n return 'NZ$'\n case 'MYR':\n return 'RM'\n case 'MXN':\n return 'Mex$'\n case 'SGD':\n return 'S$'\n case 'AUD':\n return 'A$'\n case 'ZAR':\n return 'R'\n case 'ke':\n return 'Ksh'\n case 'TRY':\n return '₺'\n case 'CAD':\n return 'CA$'\n case 'THB':\n return '฿'\n case 'ISK':\n return 'Kr'\n case 'SEK':\n return 'kr'\n default:\n return 'US$'\n }\n}\n\nexport const removePlusSign = (string = '') => string.replace('+', '')\n","import { Modal as MuiModal } from '@mui/material'\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport CircularProgress from '@mui/material/CircularProgress'\nimport _map from 'lodash/map'\nimport React, { FC } from 'react'\n\nexport interface Action {\n id: string;\n label: string;\n onClick: () => void;\n disabled?: boolean;\n loading?: boolean;\n variant?: \"text\" | \"contained\" | \"outlined\";\n}\n\ninterface Props {\n onClose?: () => void;\n actions: Action[];\n modalClassName?: string;\n}\n\nconst style: React.CSSProperties = {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n minWidth: 480,\n backgroundColor: '#e3e3e3',\n border: '1px solid white',\n outline: 'none',\n padding: '14px',\n maxHeight: '85vh',\n overflow: 'auto',\n}\n\nconst Modal: FC<Props> = ({\n onClose,\n actions = [],\n children,\n modalClassName = '',\n}) => (\n <MuiModal\n open={true}\n onClose={onClose}\n aria-labelledby=\"modal-modal-title\"\n aria-describedby=\"modal-modal-description\"\n className={`confirm-modal ${modalClassName}`}\n >\n <Box style={style}>\n <div className=\"modal-body\">{children}</div>\n <div className=\"footer\">\n {_map(actions, (action: Action) => (\n <Button\n key={action.id}\n onClick={action.onClick}\n disabled={action.disabled || action.loading}\n variant={action.variant || \"text\"}\n >\n {action.loading ? <CircularProgress size=\"22px\" /> : action.label}\n </Button>\n ))}\n </div>\n </Box>\n </MuiModal>\n)\n\nexport default Modal\n","import React, { useEffect, useState } from 'react'\n\nimport Modal, { Action } from '../common/ModalComponent'\n\ninterface IDVerificationProps {\n message?: string | null;\n displayModal?: boolean;\n actions?: Action[];\n onClose?: () => void;\n}\n\nexport const VerificationPendingModal = (props: IDVerificationProps) => {\n const { message, displayModal, actions, onClose } = props\n const [showModal, setShowModal] = useState(false)\n\n useEffect(() => {\n if (displayModal === undefined) {\n setShowModal(Boolean(message))\n }\n }, [message, displayModal])\n\n return showModal || displayModal ? (\n <div>\n <Modal\n modalClassName=\"id-verification-modal\"\n actions={\n actions || [\n {\n id: 'okay',\n label: 'OK',\n variant: 'contained',\n onClick: () => {\n setShowModal(false)\n\n if (onClose) {\n onClose()\n }\n },\n },\n ]\n }\n >\n <div>{message}</div>\n </Modal>\n </div>\n ) : null\n}\n","import React from \"react\"\n\nconst InfoIcon = ({ size = 17 }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 17 17\"\n fill=\"none\"\n >\n <circle\n cx=\"8.5\"\n cy=\"8.5\"\n r=\"8\"\n stroke=\"black\"\n strokeWidth=\"1\"\n />\n <rect\n x=\"7.5\"\n y=\"4\"\n width=\"2\"\n height=\"2\"\n fill=\"black\"\n />\n <rect\n x=\"7.5\"\n y=\"7\"\n width=\"2\"\n height=\"5\"\n fill=\"black\"\n />\n </svg>\n)\n\nexport default InfoIcon","import _isNumber from 'lodash/isNumber'\n\nexport const showZero = (value = 0) => {\n const intNumber = Number(value)\n return _isNumber(intNumber)\n ? intNumber >= 0 && intNumber < 10\n ? '0' + intNumber\n : intNumber\n : null\n}\n","import './style.css'\n\nimport _identity from 'lodash/identity'\nimport React, { memo, useState } from 'react'\nimport Countdown from 'react-countdown'\nimport ReactDOM from 'react-dom'\nimport SVG from 'react-inlinesvg'\n\nimport Cross from '../../assets/images/cross.svg'\nimport { showZero } from '../../utils/showZero'\n\nexport interface ITimerWidgetPage {\n expires_at: number;\n buyLoading?: boolean;\n onCountdownFinish?: () => void;\n container?: string;\n}\n\nexport interface IRenderer {\n minutes: number;\n seconds: number;\n completed: number;\n handleCountdownFinish: () => void;\n}\n\nconst TimerWidget = ({\n expires_at,\n buyLoading,\n onCountdownFinish = _identity,\n container,\n}: ITimerWidgetPage) => {\n const [showTimer, setShowTimer] = useState(true)\n\n const handleCountdownFinish = () => {\n setShowTimer(false)\n if (!buyLoading) {\n onCountdownFinish()\n }\n }\n\n const renderer = ({\n minutes,\n seconds,\n completed,\n handleCountdownFinish,\n }: IRenderer) => {\n if (completed) {\n handleCountdownFinish()\n return null\n }\n return (\n <span>\n {showZero(minutes)}:{showZero(seconds)}\n </span>\n )\n }\n\n const hideTimer = () => {\n const timerRl: HTMLElement | null = document.querySelector('.timer')\n if (timerRl) {\n timerRl.style.visibility = 'hidden'\n }\n }\n\n const timerComponent = (\n <div className=\"timer\">\n <div aria-hidden className=\"close-icon\" onClick={hideTimer}>\n <SVG src={Cross} width=\"10\" height=\"10\" fill=\"#fff\" />\n </div>\n <div className=\"toast-message\">\n <p>Please complete your purchase before the timer reaches zero.</p>\n <p className=\"countdown\">\n <Countdown\n date={Date.now() + expires_at * 1000}\n renderer={(props: any) =>\n renderer({\n ...props,\n handleCountdownFinish,\n })\n }\n />\n </p>\n </div>\n </div>\n )\n\n return showTimer && !!expires_at\n ? container\n ? ReactDOM.createPortal(\n timerComponent,\n document.querySelector(container) as HTMLElement\n )\n : timerComponent\n : null\n}\n\nexport default memo(TimerWidget)\n","import _get from 'lodash/get'\nimport _isEmpty from 'lodash/isEmpty'\n\nexport interface IAddOnsData {\n add_on_groups: Array<{ [key: string]: any }>;\n add_ons: Array<[]>;\n}\n\nexport const addonsWithGroupsAdapter = (data: IAddOnsData) => {\n const addonsData = { ...data }\n const addOnsGroups = _get(addonsData, 'add_on_groups', [])\n const addons = _get(addonsData, 'add_ons', [])\n\n if (!_isEmpty(addOnsGroups)) {\n const addOnGroupsWithVariants: any = []\n const addOnsWithoutVariants: any = []\n\n addons.forEach((addon: any) => {\n if (addon.attributes.addOnGroupId) {\n // Collect addons groups inside with their variants\n const currentGroupId = addon.attributes.addOnGroupId\n const exsistingGroupIndex = addOnGroupsWithVariants.findIndex(\n (item: any) => item.id === currentGroupId\n )\n\n if (addOnGroupsWithVariants[exsistingGroupIndex]) {\n const addOnGroup = addOnGroupsWithVariants[exsistingGroupIndex]\n addOnGroupsWithVariants[exsistingGroupIndex] = {\n ...addOnGroup,\n variants: [...addOnGroup.variants, ...addon.attributes],\n }\n } else {\n const group =\n addOnsGroups.find(group => group.attributes.id === currentGroupId) || {}\n\n addOnGroupsWithVariants.push({\n ...group.attributes,\n variants: [...addon.attributes],\n })\n }\n } else {\n addOnsWithoutVariants.push(addon.attributes)\n }\n })\n\n return addOnGroupsWithVariants.concat(addOnsWithoutVariants)\n }\n\n // Adapt only simple addons data\n const adaptedAddons = (addons as any[]).map((addon: any) => ({\n ...addon.attributes,\n }))\n return adaptedAddons\n}\n\nexport const cartAdapter = (cart: any) => {\n const cartData = _get(cart, 'data.attributes', [])\n const { expiresAt, cart: carts_arr } = cartData\n const { id, quantity } = carts_arr[0] || {}\n\n return { id, quantity, expiresAt }\n}\n","import { FormControl, FormHelperText } from '@mui/material'\nimport Checkbox from '@mui/material/Checkbox'\nimport FormControlLabel from '@mui/material/FormControlLabel'\nimport FormGroup from '@mui/material/FormGroup'\nimport { useTheme } from '@mui/styles'\nimport { FieldInputProps, FormikProps } from 'formik'\nimport _get from 'lodash/get'\nimport React from 'react'\n\ninterface ICheckboxField {\n label: string | number | JSX.Element;\n field: FieldInputProps<any>;\n form: FormikProps<any>;\n}\n\nexport const CheckboxField = ({\n label,\n field,\n form: { touched, errors },\n}: ICheckboxField) => {\n const isTouched = Boolean(_get(touched, field.name, false))\n const errorText = _get(errors, field.name)\n const hasError = isTouched && Boolean(errorText)\n const customTheme: any = useTheme()\n\n return (\n <FormControl\n className={`checkbox-field ${hasError ? 'required-checkbox-field' : ''}`}\n error={hasError}\n >\n <FormGroup>\n <FormControlLabel\n control={<Checkbox {...field} checked={Boolean(field.value)} />}\n label={label}\n componentsProps={{ typography: customTheme?.checkbox }}\n />\n </FormGroup>\n {hasError && <FormHelperText>Required</FormHelperText>}\n </FormControl>\n )\n}\n","import { FormControl, FormHelperText } from '@mui/material'\nimport CheckboxMaterial from '@mui/material/Checkbox'\nimport FormControlLabel from '@mui/material/FormControlLabel'\nimport FormGroup from '@mui/material/FormGroup'\nimport { useTheme } from '@mui/styles'\nimport { FieldInputProps } from 'formik'\nimport React from 'react'\n\nexport interface ICheckboxField {\n label: string | number | JSX.Element;\n field?: FieldInputProps<any>;\n}\n\ninterface IOtherProps {\n [key: string]: any;\n}\n\nexport const Checkbox = ({\n label,\n field,\n selectOptions,\n theme,\n setFieldValue,\n disableDropdown,\n setPhoneValidationIsLoading,\n defaultCountry,\n required,\n uniqueId,\n dateFormat,\n datePlaceholder,\n isCountryCodeEditable,\n ...rest\n}: ICheckboxField & IOtherProps) => {\n const customTheme: any = useTheme()\n return (\n <FormControl error={!!(rest?.form?.errors && rest.form.errors[field?.name ?? ''])}>\n <FormGroup>\n <FormControlLabel\n control={<CheckboxMaterial {...field} {...rest} />}\n label={label}\n componentsProps={{\n typography: customTheme?.checkbox,\n }}\n />\n </FormGroup>\n {rest?.form?.errors && rest.form.errors[field?.name ?? ''] ? (\n <FormHelperText>Required</FormHelperText>\n ) : null}\n </FormControl>\n )\n}\n","/* eslint-disable no-underscore-dangle */\n/* eslint-disable import/no-unresolved */\nimport Visibility from '@mui/icons-material/Visibility'\nimport VisibilityOff from '@mui/icons-material/VisibilityOff'\nimport IconButton from '@mui/material/IconButton'\nimport InputAdornment from '@mui/material/InputAdornment'\nimport MenuItem from '@mui/material/MenuItem'\nimport TextField from '@mui/material/TextField'\nimport { useTheme } from '@mui/styles'\nimport { FieldInputProps, FormikProps } from 'formik'\nimport _get from 'lodash/get'\nimport _includes from 'lodash/includes'\nimport _isFunction from 'lodash/isFunction'\nimport _isObject from 'lodash/isObject'\nimport _map from 'lodash/map'\nimport React, { useEffect, useRef, useState } from 'react'\n\nexport interface ISelectOption {\n label: string | number;\n value?: string | number;\n [key: string]: any;\n}\n\nexport interface ICustomField {\n onChange?: (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;\n label: string;\n field: FieldInputProps<any>;\n form: FormikProps<any>;\n theme: 'dark' | 'light';\n // optional\n type?: string;\n selectOptions?: ISelectOption[];\n inputRef?:\n | { current: HTMLInputElement | null }\n | ((node: HTMLInputElement | null) => void);\n multiline?: boolean;\n minRows?: string | number;\n maxRows?: string | number;\n}\n\nexport interface IOtherProps {\n [key: string]: any;\n}\n\nexport const CustomField = ({\n label,\n type = 'text',\n field,\n selectOptions = [] as ISelectOption[],\n form: { touched, errors, submitCount },\n theme,\n inputProps: pInputProps = {},\n InputProps = {},\n inputRef,\n onChange,\n multiline = false,\n minRows = 3,\n maxRows,\n disabled,\n}: ICustomField & IOtherProps) => {\n const [isShrinked, setIsShrinked] = useState(Boolean(field.value))\n const [showPassword, setShowPassword] = useState(false)\n const _ref = useRef<HTMLInputElement>(null)\n const isAutoFilled = _ref.current?.matches ? _ref.current?.matches(':-webkit-autofill') : false\n const isSelectField = type === 'select'\n const isPasswordField = type === 'password'\n const error = _get(errors, field.name)\n const isTouched =\n Boolean(_get(touched, field.name)) ||\n (_includes(field.name, 'holder') && !!error && !!submitCount)\n\n const customTheme: any = useTheme()\n const inputProps: any = { sx: customTheme?.input }\n\n const handleClickShowPassword = () => {\n setShowPassword(!showPassword)\n }\n\n const handleMouseDownPassword = (event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault()\n }\n\n const finalInputProps = isPasswordField\n ? {\n ...InputProps,\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n aria-label=\"toggle password visibility\"\n onClick={handleClickShowPassword}\n onMouseDown={handleMouseDownPassword}\n edge=\"end\"\n size=\"small\"\n sx={{ color: customTheme?.input?.color || 'inherit' }}\n >\n {showPassword ? <VisibilityOff /> : <Visibility />}\n </IconButton>\n </InputAdornment>\n ),\n }\n : InputProps\n\n useEffect(() => {\n if (_isFunction(inputRef)) {\n inputRef(_ref.current)\n } else if (_isObject(inputRef)) {\n inputRef.current = _ref.current\n }\n })\n\n return (\n <TextField\n disabled={disabled}\n placeholder=\"\"\n id={field.name}\n label={label}\n type={isPasswordField ? (showPassword ? 'text' : 'password') : type}\n select={isSelectField}\n fullWidth={true}\n error={!!error && isTouched}\n helperText={isTouched && error}\n onFocus={() => {\n setIsShrinked(true)\n }}\n SelectProps={{\n native: false,\n className: theme,\n MenuProps: {\n className: theme,\n PaperProps: {\n sx: {\n '& .MuiMenuItem-root': {\n paddingLeft: '16px',\n paddingRight: '16px',\n },\n },\n },\n },\n }}\n InputLabelProps={{\n sx: customTheme?.input,\n shrink: isSelectField || isShrinked || Boolean(field.value) || isAutoFilled,\n }}\n InputProps={finalInputProps}\n inputProps={{ ...inputProps, ...pInputProps }}\n inputRef={_ref}\n multiline={multiline}\n minRows={minRows}\n maxRows={maxRows}\n {...field}\n onBlur={(e: React.FocusEvent<any, Element>) => {\n setIsShrinked(Boolean(field.value))\n if (field.onBlur) {\n field.onBlur(e)\n }\n }}\n onChange={onChange ?? field.onChange}\n >\n {isSelectField\n ? _map(selectOptions, option => (\n <MenuItem key={option.value} value={option.value} disabled={option.disabled}>\n {option.label}\n </MenuItem>\n ))\n : null}\n </TextField>\n )\n}\n","import { FieldInputProps, FormikProps } from 'formik'\nimport _debounce from 'lodash/debounce'\nimport _get from 'lodash/get'\nimport MuiPhoneNumber from 'material-ui-phone-number'\nimport React, { useCallback, useEffect } from 'react'\n\nimport { validatePhoneNumber } from '../../api'\n\nexport interface IPhoneNumberField {\n label: string;\n field: FieldInputProps<any>;\n form: FormikProps<any>;\n type: string;\n disableDropdown: boolean;\n fill: boolean;\n setPhoneValidationIsLoading: (isLoading: boolean) => void;\n\n // optional\n defaultCountry?: string;\n isCountryCodeEditable?: boolean;\n}\n\nexport const PhoneNumberField = ({\n label,\n field,\n form: {\n errors,\n touched,\n setFieldError,\n values,\n initialValues,\n setFieldValue,\n setFieldTouched,\n setErrors,\n submitCount,\n },\n disableDropdown = true,\n defaultCountry = 'us',\n fill = false,\n setPhoneValidationIsLoading,\n isCountryCodeEditable,\n}: IPhoneNumberField) => {\n const error = _get(errors, field.name)\n const isTouched = Boolean(_get(touched, field.name))\n const isSubmitAttempted = Boolean(submitCount && submitCount > 0)\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const debounceCb = useCallback(\n _debounce((cb: () => void) => void cb(), 1000),\n []\n )\n\n useEffect(() => {\n if (field.value) {\n setPhoneValidationIsLoading(true)\n }\n\n debounceCb(async () => {\n try {\n if (!values[field.name]) {\n const newErrors = { ...errors }\n delete newErrors[field.name]\n setErrors(newErrors)\n return\n }\n if (values[field.name]) {\n await validatePhoneNumber(values[field.name])\n }\n if (errors[field.name]) {\n const newErrors = { ...errors }\n delete newErrors[field.name]\n setErrors(newErrors)\n }\n } catch (error) {\n const message = _get(\n error,\n 'response.data.message',\n 'Invalid phone number'\n )\n if (values[field.name] && errors[field.name] !== message) {\n setFieldError(field.name, message)\n }\n } finally {\n setPhoneValidationIsLoading(false)\n }\n })\n // eslint-disable-next-line\n }, [field.value])\n\n return (\n <>\n <MuiPhoneNumber\n name={field.name}\n value={fill ? values[field.name] : initialValues[field.name]}\n onChange={(value: any, country?: any) => {\n if (`+${country?.dialCode}` === value || value === '+') {\n setFieldValue(field.name, '')\n setFieldError(field.name, '')\n } else {\n setFieldTouched(field.name, true)\n setFieldValue(field.name, value)\n }\n }}\n variant=\"outlined\"\n defaultCountry={defaultCountry}\n disableDropdown={disableDropdown}\n label={label}\n error={!!error && (isTouched || fill || isSubmitAttempted)}\n helperText={(isTouched || fill || isSubmitAttempted) && error}\n fullWidth\n autoFormat={false}\n disableAreaCodes={true}\n countryCodeEditable={isCountryCodeEditable}\n />\n </>\n )\n}\n","import CircularProgress from '@mui/material/CircularProgress'\nimport React from 'react'\n\nexport const Loader = () => (\n <div className=\"loader-container\">\n <CircularProgress />\n </div>\n)\n","import { FormControl, InputLabel } from '@mui/material'\nimport Checkbox from '@mui/material/Checkbox'\nimport FormHelperText from '@mui/material/FormHelperText'\nimport ListItemText from '@mui/material/ListItemText'\nimport MenuItem from '@mui/material/MenuItem'\nimport OutlinedInput from '@mui/material/OutlinedInput'\nimport Select, { SelectChangeEvent } from '@mui/material/Select'\nimport { FieldInputProps, FormikProps } from 'formik'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport _map from 'lodash/map'\nimport React from 'react'\n\ninterface ISelectOption {\n id: string | number;\n label: string | number;\n value: string | number;\n}\n\ninterface ISelectField {\n field: FieldInputProps<any>;\n form: FormikProps<any>;\n options: ISelectOption[];\n\n // optional\n label?: string;\n isMultiple?: boolean;\n disabled?: boolean;\n onChange?: (e: SelectChangeEvent<string[]>) => void;\n}\n\nfunction SelectField({\n label,\n isMultiple,\n field,\n form: { touched, errors, setFieldValue },\n options = [],\n disabled,\n onChange = _identity,\n}: ISelectField) {\n const { name, value = [] } = field\n const selectId = `select-field-${name}`\n const error = _get(errors, name)\n const isTouched = Boolean(_get(touched, field.name))\n\n const handleChange = (event: SelectChangeEvent<string[]>) => {\n const {\n target: { value },\n } = event\n\n setFieldValue(name, value)\n onChange(event)\n }\n\n const getSelectedItemLabel = (selectedValue: any) => {\n const selectedItem = options.find(option => option.value === selectedValue)\n const label = _get(selectedItem, 'label', '')\n return label\n }\n\n return (\n <>\n <FormControl\n fullWidth={true}\n disabled={disabled}\n error={isTouched && Boolean(error)}\n >\n {label && <InputLabel id={selectId}>{label}</InputLabel>}\n <Select\n id={name}\n labelId={selectId}\n multiple={isMultiple}\n value={value || []}\n onChange={handleChange}\n input={<OutlinedInput label={label} />}\n renderValue={selected => {\n if (isMultiple) {\n const selectedLabels = _map(selected, (selectedValue: string) =>\n getSelectedItemLabel(selectedValue)\n )\n return selectedLabels.join(', ')\n }\n\n const selectedLabel = getSelectedItemLabel(selected)\n return selectedLabel\n }}\n sx={{ textAlign: 'start' }}\n >\n {options?.map((option: ISelectOption) => (\n <MenuItem key={option.label} value={option.value}>\n {isMultiple && <Checkbox checked={value.indexOf(option.value) > -1} />}\n <ListItemText primary={option.label} />\n </MenuItem>\n ))}\n </Select>\n {isTouched && Boolean(error) ? (\n <FormHelperText error>{error}</FormHelperText>\n ) : null}\n </FormControl>\n </>\n )\n}\n\nexport { SelectField }\n","import Modal from '@mui/material/Modal'\nimport React from 'react'\n\ninterface ICopyMessageModalProps {\n showCopyModal: boolean;\n onClose: () => void;\n}\n\nexport const CopyMessageModal = (props: ICopyMessageModalProps) => {\n const { showCopyModal = false, onClose } = props\n return (\n <Modal\n open={showCopyModal}\n onClose={onClose}\n aria-labelledby=\"modal-modal-title\"\n aria-describedby=\"modal-modal-description\"\n className=\"success-copy-modal\"\n >\n <div className=\"message-copy-success-box\">\n <div className=\"message-copy-success\">\n <span>\n Copied to your clipboard! Now paste your link in a Snapchat message,\n </span>\n <span>your Instagram bio, Whatsapp, Facebook or a text :)</span>\n </div>\n <div className=\"footer\">\n <button className=\"footer-button\" type=\"button\" onClick={onClose}>\n OK\n </button>\n </div>\n </div>\n </Modal>\n )\n}\n","import { ThemeOptions } from '@mui/material'\nimport { createTheme, ThemeProvider } from '@mui/material/styles'\nimport { CSSProperties } from '@mui/styles'\nimport { DatePicker } from '@mui/x-date-pickers'\nimport { AdapterMoment } from '@mui/x-date-pickers/AdapterMoment'\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'\nimport { FieldInputProps, FormikProps } from 'formik'\nimport React from 'react'\n\nimport { CustomField } from './CustomField'\n\nconst DATE_SIZE = 32\nconst compactStyles = {\n '& > div': {\n minWidth: 256,\n },\n '& > div > div, & > div > div > div, & .MuiCalendarPicker-root': {\n width: 256,\n },\n '& .MuiTypography-caption': {\n width: DATE_SIZE,\n margin: 0,\n },\n '& .PrivatePickersSlideTransition-root': {\n minHeight: DATE_SIZE * 6,\n },\n '& .PrivatePickersSlideTransition-root [role=\"row\"]': {\n margin: 0,\n },\n '& .MuiPickersDay-dayWithMargin': {\n margin: 0,\n },\n '& .MuiPickersDay-root': {\n width: DATE_SIZE,\n height: DATE_SIZE,\n },\n '& .MuiPickersArrowSwitcher-spacer': {\n width: 0,\n },\n '& [role=\"presentation\"] .PrivatePickersFadeTransitionGroup-root': {\n marginRight: -1,\n },\n}\n\nconst getTheme = (isCompact: boolean, baseThemeOptions?: object | null) => {\n if (isCompact) {\n return createTheme(\n Object.assign(baseThemeOptions ?? {}, {\n components: {\n MuiPaper: {\n defaultProps: {\n sx: compactStyles,\n },\n },\n },\n })\n )\n }\n\n return createTheme(baseThemeOptions ?? {})\n}\n\nexport interface IDatePickerFieldProps {\n label: string;\n\n field: FieldInputProps<any>;\n form: FormikProps<any>;\n theme: 'dark' | 'light';\n themeOptions?: ThemeOptions & {\n input?: CSSProperties;\n checkbox?: CSSProperties;\n };\n\n useCompact?: boolean;\n}\n\ninterface IOtherProps {\n [key: string]: any;\n}\n\nexport const DatePickerField = ({\n label,\n field,\n form,\n theme,\n useCompact = true,\n themeOptions,\n dateFormat = 'DD/MM/YYYY',\n placeholder = 'dd/mm/yyyy',\n}: IDatePickerFieldProps & IOtherProps) => (\n <ThemeProvider theme={getTheme(useCompact, themeOptions ?? null)}>\n <LocalizationProvider dateAdapter={AdapterMoment}>\n <DatePicker\n value={field.value || ''}\n onChange={value => form.setFieldValue(field.name, value)}\n PopperProps={{\n placement: 'bottom-start',\n }}\n showDaysOutsideCurrentMonth={true}\n disableFuture={true}\n inputFormat={dateFormat}\n mask=\"__/__/____\"\n renderInput={(params: any) => (\n <CustomField\n {...params}\n inputProps={{ ...params.inputProps, placeholder }}\n theme={theme}\n field={{\n ...field,\n onChange: (\n evt: React.FormEvent<HTMLInputElement | HTMLTextAreaElement>\n ) => {\n if (params.inputProps && params.inputProps.onChange) {\n params.inputProps.onChange(evt)\n }\n },\n }}\n form={form}\n label={label}\n type=\"tel\"\n />\n )}\n />\n </LocalizationProvider>\n </ThemeProvider>\n)\n","import { FormControl, FormHelperText, InputLabel } from '@mui/material'\nimport Select from '@mui/material/Select'\nimport { useTheme } from '@mui/styles'\nimport { FieldInputProps, FormikProps } from 'formik'\nimport _get from 'lodash/get'\nimport _map from 'lodash/map'\nimport React from 'react'\n\nexport interface ISelectOption {\n label: string | number;\n value?: string | number;\n [key: string]: any;\n}\n\nexport interface ISelectField {\n label: string;\n\n field: FieldInputProps<any>;\n form: FormikProps<any>;\n theme: 'dark' | 'light';\n\n // optional\n type?: string;\n selectOptions?: ISelectOption[];\n onChange?: (e: any) => void;\n}\n\ninterface IOtherProps {\n [key: string]: any;\n}\n\nexport const NativeSelectField = ({\n label,\n type = 'text',\n field,\n selectOptions = [] as ISelectOption[],\n form: { touched, errors, setFieldValue },\n theme,\n onChange = () => {},\n}: ISelectField & IOtherProps) => {\n const isTouched = Boolean(_get(touched, field.name))\n const error = _get(errors, field.name)\n\n const customTheme: any = useTheme()\n\n return (\n <FormControl fullWidth={true}>\n <InputLabel\n style={customTheme?.input}\n htmlFor={field.name}\n error={!!error && isTouched}\n shrink={true}\n >\n {label}\n </InputLabel>\n <Select\n id={field.name}\n label={label}\n type={type}\n fullWidth={true}\n error={!!error && isTouched}\n inputProps={{\n id: field.name,\n }}\n native={true}\n className={`Mui-Select ${theme}`}\n MenuProps={{ className: theme }}\n {...field}\n style={customTheme?.input}\n onChange={e => {\n onChange(e)\n setFieldValue(field.name, e.target.value)\n }}\n >\n {_map(selectOptions, option => (\n <option key={option.value} value={option.value} disabled={option.disabled}>\n {option.label}\n </option>\n ))}\n </Select>\n {isTouched && error ? (\n <FormHelperText error={!!error && isTouched}>{error}</FormHelperText>\n ) : null}\n </FormControl>\n )\n}\n","import FormControl from '@mui/material/FormControl'\nimport FormControlLabel from '@mui/material/FormControlLabel'\nimport FormHelperText from '@mui/material/FormHelperText'\nimport FormLabel from '@mui/material/FormLabel'\nimport Radio from '@mui/material/Radio'\nimport RadioGroup from '@mui/material/RadioGroup'\nimport { FieldInputProps, FormikProps } from 'formik'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport React from 'react'\n\nexport interface IRadio {\n id: string | number;\n label: string | number;\n value: string | number;\n [key: string]: any;\n}\n\nexport interface IRadioGroupField {\n label?: string;\n field: FieldInputProps<any>;\n form: FormikProps<any>;\n radios: IRadio[];\n disabled?: boolean;\n onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\nexport const RadioGroupField = ({\n label,\n field,\n radios = [],\n disabled,\n form: { touched, errors, setFieldValue },\n onChange = _identity,\n}: IRadioGroupField) => {\n const radioId = `radio-${field.name}`\n const error = _get(errors, field.name)\n const isTouched = Boolean(_get(touched, field.name))\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const { value } = e.target as HTMLInputElement\n setFieldValue(field.name, value)\n onChange(e)\n }\n\n if (!radios) return null\n\n return (\n <FormControl disabled={disabled} error={isTouched && Boolean(error)}>\n {isTouched && Boolean(error) ? (\n <FormHelperText className=\"radio-error\" error>\n {error}\n </FormHelperText>\n ) : null}\n {label && <FormLabel id={radioId}>{label}</FormLabel>}\n <RadioGroup\n aria-labelledby={radioId}\n name={field.name}\n value={field.value}\n onChange={handleChange}\n >\n {radios.map(radio => {\n const { id, label, value } = radio\n return (\n <FormControlLabel\n key={id}\n label={label}\n value={value}\n control={<Radio />}\n />\n )\n })}\n </RadioGroup>\n </FormControl>\n )\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { FormikErrors, FormikValues } from 'formik'\nimport _flatMapDeep from 'lodash/flatMapDeep'\nimport _forEach from 'lodash/forEach'\nimport _get from 'lodash/get'\nimport _isArray from 'lodash/isArray'\nimport _isEmpty from 'lodash/isEmpty'\nimport _map from 'lodash/map'\nimport { nanoid } from 'nanoid'\nimport React from 'react'\n\nimport { AttributesConfig } from '../../api'\nimport { IGroupItem } from '../../types'\nimport { CONFIGS } from '../../utils'\nimport { combineValidators, requiredValidator } from '../../validators'\nimport {\n CheckboxField,\n CustomField,\n DatePickerField,\n PhoneNumberField,\n RadioGroupField,\n SelectField,\n} from '../common/index'\n\nexport interface ILoggedInValues {\n emailLogged?: string;\n firstNameLogged?: string;\n lastNameLogged?: string;\n phoneLogged?: string;\n}\n\nexport interface IValues {\n [key: string]: any;\n}\n\nexport const getInitialValues = (\n data: any = [],\n propsInitialValues: IValues = {},\n userValues: any = {},\n ticketHoldersFields: any = {},\n ticketsQuantity: any = []\n): IValues => {\n const results = _flatMapDeep(data, ({ fields }) =>\n _map(fields, ({ groupItems }) =>\n _map(groupItems, ({ name, value }) => ({ name, value }))\n )\n )\n\n // Add Ticket Holder default values for custom fields\n const ticketHoldersCustomFields =\n ticketHoldersFields?.fields?.find((groupItem: any) => groupItem.customFields)\n ?.groupItems || []\n const ticketHoldersCustomFieldsInitValues = {} as IValues\n const selectedTicketsCount =\n ticketsQuantity.length || localStorage.getItem('selectedTicketsQuantity') || 0\n\n if (!_isEmpty(ticketHoldersCustomFields)) {\n for (const customField of ticketHoldersCustomFields) {\n for (let i = 0; i < selectedTicketsCount; i++) {\n const fieldName = `${customField.name}-${i}`\n const fieldValue = customField.value\n ticketHoldersCustomFieldsInitValues[fieldName] = fieldValue\n }\n }\n }\n\n const initialValues: IValues = {}\n _forEach(results, groupItem => {\n const { name, value } = groupItem\n initialValues[name] = value || propsInitialValues[name] || userValues[name] || ''\n })\n\n // set logged in user as first ticket holder\n initialValues['holderFirstName-0'] =\n propsInitialValues.firstName || userValues.firstName || ''\n initialValues['holderLastName-0'] =\n propsInitialValues.lastName || userValues.lastName || ''\n initialValues['holderEmail-0'] = propsInitialValues.email || userValues.email || ''\n initialValues['holderPhone-0'] = propsInitialValues.phone || userValues.phone || ''\n\n return { ...initialValues, ...ticketHoldersCustomFieldsInitValues }\n}\n\nexport const createRegisterFormData = (\n values: IValues = {},\n checkoutBody: { attributes: { [key: string]: any } },\n flagFreeTicket = false\n): FormData => {\n const bodyFormData = new FormData()\n bodyFormData.append('first_name', values.firstName)\n bodyFormData.append('last_name', values.lastName)\n bodyFormData.append('email', values.email)\n bodyFormData.append('password', values.password)\n bodyFormData.append('password_confirmation', values.confirmPassword)\n bodyFormData.append(\n 'client_id',\n CONFIGS.CLIENT_ID || 'e9d8f8922797b4621e562255afe90dbf'\n )\n bodyFormData.append(\n 'client_secret',\n CONFIGS.CLIENT_SECRET || 'b89c191eff22fdcf84ac9bfd88d005355a151ec2c83b26b9'\n )\n bodyFormData.append('check_cart_expiration', 'true')\n\n _forEach(checkoutBody.attributes, (item: any, key: string) => {\n if (\n !(flagFreeTicket && ['country', 'state', 'city', 'street_address'].includes(key))\n ) {\n bodyFormData.append(key, item)\n }\n })\n\n return bodyFormData\n}\n\nexport interface ICheckoutBody {\n attributes: {\n [key: string]: any;\n };\n data_capture?: {\n [key: string]: any;\n };\n}\n\ninterface IticketHolder {\n first_name?: string;\n last_name?: string;\n phone?: string;\n email?: string;\n}\n\nexport const createCheckoutDataBody = (\n ticketsQuantity: number,\n values: IValues = {},\n logedInValues: ILoggedInValues = {},\n includeDob = false\n): ICheckoutBody => {\n const { firstName, lastName, holderAge, confirmEmail, confirmPassword, ...restValues } =\n values\n\n const holders = []\n let ticket_holders: IticketHolder[] = []\n\n for (let i = 0; i <= ticketsQuantity; i++) {\n const individualHolder = Object.fromEntries(\n Object.entries(values).filter(([key, _val]) => key.includes(String(i)))\n )\n holders.push(individualHolder)\n }\n\n const filteredHolders = holders.filter(holder => Object.entries(holder).length > 0)\n ticket_holders = filteredHolders.map((item, index) => ({\n first_name: !index\n ? item[`holderFirstName-${index}`] || logedInValues.firstNameLogged || ''\n : item[`holderFirstName-${index}`] || '',\n last_name: !index\n ? item[`holderLastName-${index}`] || logedInValues.lastNameLogged || ''\n : item[`holderLastName-${index}`] || '',\n phone: !index\n ? item[`holderPhone-${index}`] || logedInValues.phoneLogged || ''\n : item[`holderPhone-${index}`] || '',\n email: !index\n ? item[`holderEmail-${index}`] || logedInValues.emailLogged || ''\n : item[`holderEmail-${index}`] || '',\n }))\n\n const filteredRestValue: { [key: string]: any } = {}\n _forEach(restValues, (value, key) => {\n if (!key.includes('holder')) {\n filteredRestValue[key] = value\n }\n })\n\n const body: ICheckoutBody = {\n attributes: {\n ...filteredRestValue,\n email: restValues.email || logedInValues.emailLogged,\n confirm_email: restValues.email || logedInValues.emailLogged,\n first_name: firstName || logedInValues.firstNameLogged,\n last_name: lastName || logedInValues.lastNameLogged,\n ticket_holders,\n },\n }\n\n if (includeDob) {\n const holderAgeDate = new Date(holderAge)\n body.attributes.dob_day = holderAgeDate.getDate()\n body.attributes.dob_month = holderAgeDate.getMonth() + 1\n body.attributes.dob_year = holderAgeDate.getFullYear()\n }\n return body\n}\n\nexport const getValidateFunctions = (\n element: IGroupItem,\n states: Array<{ [key: string]: any }>,\n values: FormikValues,\n errors: FormikErrors<any>\n) => {\n const validationFunctions: any[] = []\n\n if (element.required) {\n if (element.name !== 'state' || (element.name === 'state' && states.length)) {\n validationFunctions.push(requiredValidator)\n }\n }\n\n if (element.onValidate) {\n validationFunctions.push(element.onValidate)\n }\n\n if (element.name === 'phone') {\n const invalidPhone = () =>\n errors.phone === 'Invalid phone number' ? 'Invalid phone number' : null\n validationFunctions.push(invalidPhone)\n }\n\n if (element.name === 'confirmEmail') {\n const isSameEmail = (confirmEmail?: string) =>\n values.email !== confirmEmail ? 'Please confirm your email address correctly' : null\n validationFunctions.push(isSameEmail)\n }\n\n if (element.name === 'confirmPassword') {\n const isSame = (confirmPassword?: string) =>\n values.password !== confirmPassword ? 'Password confirmation does not match' : null\n validationFunctions.push(isSame)\n }\n\n return combineValidators(...validationFunctions)\n}\n\nexport const assingUniqueIds = (data: any): any => {\n if (_get(data[0], 'uniqueId')) {\n return data\n }\n\n return _map(data, (item: any) => {\n _forEach(item, (itemValue: string, key) => {\n if (_isArray(itemValue) && !itemValue.some(item => typeof item === 'string')) {\n item[key] = assingUniqueIds(itemValue)\n }\n })\n\n return { ...item, uniqueId: nanoid() }\n })\n}\n\nexport const isRequiredField = (\n element: IGroupItem,\n configs?: null | AttributesConfig\n) => {\n const { name, required } = element\n const flagRequirePhone = _get(configs, 'phone_required', false)\n const collectMandatoryWalletAddress = _get(\n configs,\n 'collect_mandatory_wallet_address',\n false\n )\n\n if (\n required ||\n (name === 'phone' && flagRequirePhone) ||\n (name === 'data_capture[wallet_address]' && !collectMandatoryWalletAddress)\n ) {\n return true\n }\n\n return false\n}\n\nexport const getFieldLabel = (element: IGroupItem, configs?: null | AttributesConfig) => {\n if (isRequiredField(element, configs) || React.isValidElement(element.label)) {\n return element.label\n }\n\n return `${element.label} (optional)`\n}\n\nexport const getFieldComponent = (element: IGroupItem) => {\n const type = _get(element, 'type', 'text')\n\n const fieldComponentConfigs = {\n checkbox: CheckboxField,\n select: CustomField, // Temp change untill refactoring\n select_multi: SelectField,\n phone: PhoneNumberField,\n date: DatePickerField,\n radio: RadioGroupField,\n text: CustomField,\n }\n\n const fieldComponent = _get(fieldComponentConfigs, type, CustomField)\n return fieldComponent\n}\n\n/**\n * Renders a React component with the provided props\n * @param Component - The React component to render\n * @param props - The props to apply to the component\n * @returns JSX element with applied props\n */\nexport const renderComponentWithProps = <T extends Record<string, any>>(\n Component: React.ComponentType<T>,\n props: T\n): React.ReactElement<T> => <Component {...props} />\n\nexport const filterBillingInfoFields = (\n fields: IGroupItem[],\n options: {\n showDOB: boolean;\n hideTtfOptIn: boolean;\n hidePhoneField: boolean;\n flagRequirePhone: boolean;\n collectMandatoryWalletAddress: boolean;\n collectMandatoryJobTitle: boolean;\n collectMandatoryBusinessCategory: boolean;\n collectMandatoryCompany: boolean;\n collectMandatoryInstagram: boolean;\n flagFreeTicket: boolean;\n hideWalletAddressField: boolean;\n hideJobTitleField: boolean;\n hideBusinessCategoryField: boolean;\n hideCompanyField: boolean;\n hideInstagramField: boolean;\n }\n) => {\n const {\n showDOB,\n hideTtfOptIn,\n hidePhoneField,\n flagRequirePhone,\n collectMandatoryWalletAddress,\n collectMandatoryJobTitle,\n collectMandatoryBusinessCategory,\n collectMandatoryCompany,\n collectMandatoryInstagram,\n flagFreeTicket,\n hideWalletAddressField,\n hideJobTitleField,\n hideBusinessCategoryField,\n hideCompanyField,\n hideInstagramField,\n } = options\n return fields.filter(el => {\n if (el.name === 'holderAge' && !showDOB) {\n return false\n }\n if (el.name === 'ttf_opt_in' && hideTtfOptIn) {\n return false\n }\n if (el.name === 'phone') {\n if (!hidePhoneField) {\n el.required = flagRequirePhone\n } else {\n return false\n }\n }\n if (el.name === 'data_capture[wallet_address]') {\n if (collectMandatoryWalletAddress) {\n el.required = true\n }\n }\n if (el.name === 'data_capture[jobTitle]') {\n if (collectMandatoryJobTitle) {\n el.required = true\n }\n }\n if (el.name === 'data_capture[businessCategory]') {\n if (collectMandatoryBusinessCategory) {\n el.required = true\n }\n }\n if (el.name === 'data_capture[company]') {\n if (collectMandatoryCompany) {\n el.required = true\n }\n }\n if (el.name === 'data_capture[instagram]') {\n if (collectMandatoryInstagram) {\n el.required = true\n }\n }\n if (['street_address', 'country', 'state', 'city'].includes(el.name)) {\n if (flagFreeTicket) {\n el.required = false\n return false\n }\n }\n if (\n hideWalletAddressField &&\n (el.name === 'wallet-address-info' || el.name === 'data_capture[wallet_address]')\n ) {\n return false\n }\n if (hideJobTitleField && el.name === 'data_capture[jobTitle]') {\n return false\n }\n if (hideBusinessCategoryField && el.name === 'data_capture[businessCategory]') {\n return false\n }\n if (hideCompanyField && el.name === 'data_capture[company]') {\n return false\n }\n if (\n hideInstagramField &&\n (el.name === 'data_capture[instagram]' || el.name === 'instagram-info')\n ) {\n return false\n }\n return true\n })\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Field } from 'formik'\nimport _identity from 'lodash/identity'\nimport _isEmpty from 'lodash/isEmpty'\nimport _isNull from 'lodash/isNull'\nimport _map from 'lodash/map'\nimport React from 'react'\n\nimport {\n getFieldComponent,\n getFieldLabel,\n getValidateFunctions,\n} from '../billing-info-container/utils'\nimport { NativeSelectField } from '../common'\n\n// TO DO:\n// - Need to add custom fields validations\n// - Need to apply correct styles\n\ninterface IAddonComponentProps {\n classNamePrefix: string;\n data: any;\n selectOptions: any;\n handleAddonChange?: (...res: any) => void;\n addOnDataWithCustomFields: any;\n configs: any;\n values: any;\n errors: any;\n onCustomFieldChange?: (\n addon: any,\n groupId: string | number,\n fieldName: string,\n value: any\n ) => void;\n}\n\nconst AddonComponent = ({\n classNamePrefix = '',\n data,\n selectOptions,\n handleAddonChange = _identity,\n addOnDataWithCustomFields,\n configs,\n values,\n errors,\n onCustomFieldChange = _identity,\n}: IAddonComponentProps) => {\n const { id, name, active, stock } = data\n\n return (\n <div key={id} className={`${classNamePrefix}_product_select_container`}>\n <div className={`${classNamePrefix}_product_select_block`} key={name}>\n <div className={`${classNamePrefix}_product_size`}>{name}</div>\n <div className={`${classNamePrefix}_product_qty_select_block`}>\n {!active || (!_isNull(stock) && stock <= 0) ? (\n <div className=\"sold_out\">SOLD OUT</div>\n ) : (\n <>\n <div className={`${classNamePrefix}_product_qty_select`}>\n <Field\n name={id}\n selectOptions={selectOptions}\n component={NativeSelectField}\n onChange={(e: any) => {\n const { value } = e.target\n handleAddonChange(id, value)\n }}\n />\n </div>\n {!_isEmpty(addOnDataWithCustomFields?.fields) && values[id] > 0 && (\n <div className=\"add-on-fields\">\n <h2>{addOnDataWithCustomFields.label}</h2>\n {_map(addOnDataWithCustomFields.fields, group => {\n const { id, groupClassname, groupItems } = group\n return (\n <div key={id}>\n <div className={groupClassname}>\n {_map(groupItems, element => {\n const fieldName = `${data.id}-${id}-${element.name}`\n const Comp = getFieldComponent(element)\n const type =\n element.type === 'radio' || element.type === 'checkbox'\n ? undefined\n : element.type\n return (\n <div className={element.className} key={fieldName}>\n <Field\n {...element}\n name={fieldName}\n validate={getValidateFunctions(\n element,\n [],\n values,\n errors\n )}\n >\n {({ field, form }: any) => {\n const handleChange = (e: any) => {\n // extract value from native events or custom widgets\n const v = e?.target?.value ?? e?.value ?? e // allow custom components to pass raw value\n form.setFieldValue(field.name, v)\n onCustomFieldChange?.(data, id, element.name, v)\n }\n\n return (\n <Comp\n {...element}\n field={field}\n form={form}\n type={type}\n label={getFieldLabel(element, configs)}\n onChange={handleChange}\n />\n )\n }}\n </Field>\n </div>\n )\n })}\n </div>\n </div>\n )\n })}\n </div>\n )}\n </>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nexport default AddonComponent\n","export const getNormalizedPrice = (value: any) => {\n const minimizedValue = Number(value) / 100\n const normalized = minimizedValue.toFixed(2)\n return normalized\n}","import _isEmpty from 'lodash/isEmpty'\nimport _isNull from 'lodash/isNull'\nimport _reverse from 'lodash/reverse'\nimport _sortBy from 'lodash/sortBy'\n\ninterface ObjectLiteral {\n [key: string]: any;\n}\n\nexport const generateSelectOptions = (minCount = 1, maxCount = 10) => {\n const options = []\n for (let i = minCount; i <= maxCount; i++) {\n options.push({ label: i, value: i })\n }\n return options\n}\n\nconst generateStockBasedOnLimitations = (\n addon: any,\n ticketQuantity: number\n) => {\n // Generate addon available stock count based on limitations\n const { flagLimitToTicketQuantity, maxQuantity, limitPerTicket } = addon\n\n let allowedStockCount\n\n // Generate stock\n if (flagLimitToTicketQuantity) {\n // Limited to ticket quantity case\n allowedStockCount = ticketQuantity\n } else if (maxQuantity && limitPerTicket) {\n const stockBasedOnLimitPerTicket = limitPerTicket * ticketQuantity\n // Both maximum quantity and limited to per ticket selected case, stock is minimum of them\n allowedStockCount =\n maxQuantity <= stockBasedOnLimitPerTicket\n ? maxQuantity\n : stockBasedOnLimitPerTicket\n } else if (maxQuantity && !limitPerTicket) {\n // Limited to maximum quantity case\n allowedStockCount = maxQuantity\n } else if (!maxQuantity && limitPerTicket) {\n // Limited to per ticket case\n allowedStockCount = limitPerTicket * ticketQuantity\n }\n\n return Number(allowedStockCount)\n}\n\nconst filterStockBasedOnAvailability = (\n generatedStock: any,\n availableStock: any\n) => {\n // Check generated stock count admissibility with addon stock availability\n let filteredStockCount = generatedStock\n\n if (generatedStock) {\n if (generatedStock > availableStock && !_isNull(availableStock)) {\n filteredStockCount = availableStock\n }\n } else {\n // Not set any restriction\n // Here 10 value is business logic\n filteredStockCount = 10\n\n if (!_isNull(availableStock) && availableStock < filteredStockCount) {\n filteredStockCount = availableStock\n }\n }\n\n return filteredStockCount\n}\n\nexport const getAddonSelectOptions = (addons: any, choosedTicketCount: any) => {\n const addonsWithOptions: ObjectLiteral = {}\n const groupsWithSelectedVariantsInfo: ObjectLiteral = {}\n const groupsWithVariants: ObjectLiteral = {}\n\n addons.forEach((addon: any) => {\n // Here addon can act either as simple Addon or Addon Group\n const {\n id,\n stock: simpleAddonStock,\n variants,\n active,\n flagLimitToTicketQuantity,\n maxQuantity,\n limitPerTicket,\n } = addon\n\n if (variants) {\n // Addon Group with inside addon variants case\n variants.forEach((variant: any) => {\n const { id: variantId, stock: variantStock } = variant\n\n // null checking is for unlimited stock value\n if (active && (variantStock > 0 || _isNull(variantStock))) {\n // Generate Addon Group allowed stock count based on limitations\n const stockBasedOnLimitation = generateStockBasedOnLimitations(\n addon,\n choosedTicketCount\n )\n\n // Detect if group has limitation or not\n if (flagLimitToTicketQuantity || maxQuantity || limitPerTicket) {\n // Generate Group with inside variants info\n if (groupsWithSelectedVariantsInfo[id]) {\n // Set group limit\n if (\n groupsWithSelectedVariantsInfo[id].limit <\n stockBasedOnLimitation\n ) {\n groupsWithSelectedVariantsInfo[\n id\n ].limit = stockBasedOnLimitation\n }\n\n // Set choosed variants info\n groupsWithSelectedVariantsInfo[id] = {\n ...groupsWithSelectedVariantsInfo[id],\n choosedVariants: {\n ...groupsWithSelectedVariantsInfo[id].choosedVariants,\n [variantId]: 0,\n },\n }\n } else {\n groupsWithSelectedVariantsInfo[id] = {\n limit: stockBasedOnLimitation,\n selectedCount: 0,\n choosedVariants: { [variantId]: 0 },\n }\n }\n }\n\n // Check stock admissibility with addon stock availability\n const allowedVariantStockCount = filterStockBasedOnAvailability(\n stockBasedOnLimitation,\n variantStock\n )\n\n // Generate options for variant\n const variantOptions = generateSelectOptions(\n 0,\n allowedVariantStockCount\n )\n\n addonsWithOptions[variantId] = [...variantOptions]\n\n // Generate Group with its variants list\n groupsWithVariants[id] = {\n ...groupsWithVariants[id],\n [variantId]: allowedVariantStockCount,\n }\n }\n })\n } else {\n // Simple addon case, null checking is for unlimited stock value\n if (active && (simpleAddonStock > 0 || _isNull(simpleAddonStock))) {\n // Generate Addon Group allowed stock count based on limitations\n const stockBasedOnLimitation = generateStockBasedOnLimitations(\n addon,\n choosedTicketCount\n )\n\n // Check stock admissibility with addon stock availability\n const allowedVariantStockCount = filterStockBasedOnAvailability(\n stockBasedOnLimitation,\n simpleAddonStock\n )\n\n const addonOptions = generateSelectOptions(0, allowedVariantStockCount)\n addonsWithOptions[id] = [...addonOptions]\n }\n }\n })\n\n return {\n addonsWithOptions,\n groupsWithSelectedVariantsInfo,\n groupsWithVariants,\n }\n}\n\nexport const getTicketRelatedAddons = (addons: any, ticketId: any) => {\n // Filter addons based on choosed ticket\n const filteredAddons: any = addons.filter(\n (addon: any) =>\n _isNull(addon.prerequisiteTicketTypeIds) ||\n addon.prerequisiteTicketTypeIds.includes(ticketId)\n )\n\n return filteredAddons\n}\n\nexport const getSortedAddons = (addons: any, sortDirection = 'asc') => {\n const addonsCopy = [...addons]\n\n addonsCopy.forEach(addon => {\n if (addon.variants) {\n const unsortedVariants: any = []\n addon.variants.forEach((variant: any) => {\n unsortedVariants.push({\n ...variant,\n sortOrder: Number(variant.sortOrder),\n })\n })\n addon.sortOrder = Number(addon.variants[0].sortOrder)\n const sortedVariants = _sortBy(\n unsortedVariants,\n variant => variant.sortOrder\n )\n addon.variants = sortedVariants\n } else {\n addon.sortOrder = Number(addon.sortOrder)\n }\n })\n\n const sortedAddons = _sortBy(addonsCopy, addon => addon.sortOrder)\n if (sortDirection === 'desc') {\n return _reverse(sortedAddons)\n }\n\n return sortedAddons\n}\n\nexport const isAtLeastOneAddonSelected = (value: any) => {\n const selectedAddons = Object.fromEntries(\n Object.entries(value).filter(([_, count]) => Number(count) !== 0)\n )\n\n return !_isEmpty(selectedAddons)\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable react/no-unescaped-entities */\n\nimport { CircularProgress } from '@mui/material'\nimport { Form, Formik } from 'formik'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport _map from 'lodash/map'\nimport React, { useEffect, useMemo, useState } from 'react'\nimport { Tooltip } from 'react-tooltip'\n\nimport { getAddons, getCart, getCheckoutPageConfigs, postOnCheckout } from '../../api'\nimport { FEES_STYLES } from '../../constants'\nimport { currencyNormalizerCreator } from '../../normalizers'\nimport { ICheckoutPageConfigs } from '../../types'\nimport {\n CONFIGS,\n createCheckoutDataBodyWithDefaultHolder,\n createMarkup,\n getQueryVariable,\n isBrowser,\n} from '../../utils'\nimport { VerificationPendingModal } from '../idVerificationContainer/VerificationPendingModal'\nimport InfoIcon from '../ticketsContainer/InfoIcon'\nimport TimerWidget from '../timerWidget'\nimport { addonsWithGroupsAdapter, cartAdapter } from './adapters'\nimport AddonComponent from './AddonComponent'\nimport { getNormalizedPrice } from './normalizers'\nimport {\n generateSelectOptions,\n getAddonSelectOptions,\n getSortedAddons,\n getTicketRelatedAddons,\n isAtLeastOneAddonSelected,\n} from './utils'\n\nexport interface IAddonContainterProps {\n classNamePrefix?: string;\n enableBillingInfoAutoCreate?: boolean;\n enableTimer?: boolean;\n onGetAddonsPageInfoSuccess?: (res: any) => void;\n onGetAddonsPageInfoError?: (error: any) => void;\n onPostCheckoutSuccess?: (res: any) => void;\n onPostCheckoutError?: (error: any) => void;\n onConfirmSelectionSuccess?: (res: any) => void;\n onConfirmSelectionError?: (error: any) => void;\n onCountdownFinish?: () => void;\n onPendingVerification?: () => void;\n samePage?: boolean;\n descriptionTrigger?: 'click' | 'hover' | 'always';\n addOnDataWithCustomFields: any;\n configs: any;\n\n onAddOnSelect?: (id: string, value: string, addon: any) => void;\n}\n\nexport interface ObjectLiteral {\n [key: string]: any;\n}\n\nexport const AddonsContainter = ({\n classNamePrefix = 'add_on',\n enableBillingInfoAutoCreate = true,\n enableTimer = false,\n onGetAddonsPageInfoSuccess = _identity,\n onGetAddonsPageInfoError = _identity,\n onPostCheckoutSuccess = _identity,\n onPostCheckoutError = _identity,\n onConfirmSelectionSuccess = _identity,\n onConfirmSelectionError = _identity,\n onCountdownFinish = _identity,\n onPendingVerification = _identity,\n samePage,\n descriptionTrigger = 'click',\n addOnDataWithCustomFields,\n configs,\n onAddOnSelect = _identity,\n}: IAddonContainterProps) => {\n const eventId = getQueryVariable('event_id')\n const [addons, setAddons] = useState<any>([])\n const [addonsOptions, setAddonsOptions] = useState<any>({})\n const [groupsWithSelectedVariants, setGroupsWithSelectedVariants] = useState<any>({})\n const [groupsWithInitialVariantsValues, setGroupsWithInitialVariantsValues] =\n useState<any>({})\n const [loading, setLoading] = useState(true)\n const [cartExpirationTime, setCartExpirationTime] = useState(0)\n const [pendingVerificationMessage, setPendingVerificationMessage] = useState()\n\n const [visibleDescription, setVisibleDescription] = useState<string | null>(null)\n\n const handleDescriptionToggle = (ticketId: string) => {\n setVisibleDescription(current => (current === ticketId ? null : ticketId))\n }\n\n useEffect(() => {\n if (samePage) {\n window.localStorage.removeItem('add_ons')\n }\n const getAddonsPageInfo = async () => {\n try {\n if (eventId) {\n setLoading(true)\n\n // Get choosed ticket info (id, count) from Cart request for addons options calculations\n const cart = await getCart()\n const { id: choosedTicketID, quantity, expiresAt } = cartAdapter(cart)\n const choosedTicketCount = Number(quantity)\n setCartExpirationTime(expiresAt)\n\n // Get and collect addons data\n const addonsData = await getAddons(eventId)\n const adaptedAddons = addonsWithGroupsAdapter(addonsData)\n const ticketRelatedAddons = getTicketRelatedAddons(\n adaptedAddons,\n choosedTicketID\n )\n const sortedTicketAddons = getSortedAddons(ticketRelatedAddons)\n\n setAddons(sortedTicketAddons)\n\n // Collect addons and addon group options\n const {\n addonsWithOptions,\n groupsWithSelectedVariantsInfo,\n groupsWithVariants,\n } = getAddonSelectOptions(adaptedAddons, choosedTicketCount)\n\n setAddonsOptions(addonsWithOptions)\n setGroupsWithSelectedVariants(groupsWithSelectedVariantsInfo)\n setGroupsWithInitialVariantsValues(groupsWithVariants)\n\n // Success callback props\n onGetAddonsPageInfoSuccess(addonsData)\n }\n } catch (e) {\n // Callback error props\n onGetAddonsPageInfoError(e)\n } finally {\n setLoading(false)\n }\n }\n\n getAddonsPageInfo()\n }, [])\n\n const recreateGroupVariantsSelectOptions = (groupId: any, changedGroupd: any) => {\n const { choosedVariants, limit, selectedCount } = changedGroupd\n const remainingGroupStock = limit - selectedCount\n const recreatedVariantsOptions: ObjectLiteral = {}\n\n // Regenerate variants allowed stock counts\n for (const variant in choosedVariants) {\n const variantId = variant\n const variantCurrSelectedValue = choosedVariants[variant]\n let allowedOptionCount\n\n // Formula for regenerating\n if (\n remainingGroupStock >=\n groupsWithInitialVariantsValues[groupId][variantId] - variantCurrSelectedValue\n ) {\n allowedOptionCount = groupsWithInitialVariantsValues[groupId][variantId]\n } else {\n allowedOptionCount = remainingGroupStock + variantCurrSelectedValue\n }\n\n recreatedVariantsOptions[variantId] = generateSelectOptions(0, allowedOptionCount)\n }\n\n setAddonsOptions((prevState: any) =>\n Object.assign({}, prevState, recreatedVariantsOptions)\n )\n }\n\n const onFieldChange = (id: any, value: any, addon: any) => {\n // If changeableGroup exsists it means that group with limitation variant was changed\n const changeableGroup = groupsWithSelectedVariants[addon.id]\n\n if (changeableGroup) {\n const currGroupId = addon.id\n const currSelectedVariantId = id\n const currSelectedVariantCount = Number(value)\n const currSelectedVariantPrevCount =\n groupsWithSelectedVariants[currGroupId].choosedVariants[currSelectedVariantId]\n\n const currSelectedGroupCount =\n changeableGroup.selectedCount +\n (currSelectedVariantCount - currSelectedVariantPrevCount)\n\n // Update Group info\n const updatedGroupsWithSelectedVariants = {\n ...groupsWithSelectedVariants,\n [currGroupId]: {\n ...groupsWithSelectedVariants[currGroupId],\n selectedCount: currSelectedGroupCount,\n choosedVariants: {\n ...groupsWithSelectedVariants[currGroupId].choosedVariants,\n [currSelectedVariantId]: currSelectedVariantCount,\n },\n },\n }\n setGroupsWithSelectedVariants(updatedGroupsWithSelectedVariants)\n\n // Recreate Select Options for Addon Group Variants\n recreateGroupVariantsSelectOptions(\n currGroupId,\n updatedGroupsWithSelectedVariants[currGroupId]\n )\n }\n }\n\n const handleConfirm = async (values: any, skipAddonPage?: boolean) => {\n try {\n const pageConfigsDataResponse = await getCheckoutPageConfigs()\n const pageConfigsData: ICheckoutPageConfigs =\n _get(pageConfigsDataResponse, 'data.attributes') || {}\n\n const skipBillingPage = pageConfigsData.skip_billing_page ?? false\n\n if (skipBillingPage && enableBillingInfoAutoCreate) {\n const ticketsQuantity = window.localStorage.getItem('quantity')\n const userData = JSON.parse(window.localStorage.getItem('user_data') || '{}')\n\n const checkoutBody = createCheckoutDataBodyWithDefaultHolder(\n Number(ticketsQuantity) || 0,\n userData\n )\n\n try {\n const checkoutResponse = await postOnCheckout({\n ...checkoutBody,\n attributes: {\n ...checkoutBody.attributes,\n ...(!skipAddonPage && { add_ons: values }),\n },\n })\n const hash = checkoutResponse?.data?.attributes?.hash || ''\n const total = checkoutResponse?.data?.attributes?.total || ''\n\n isBrowser && window.localStorage.removeItem('quantity')\n isBrowser && window.localStorage.removeItem('add_ons')\n\n onPostCheckoutSuccess(checkoutResponse?.data.attributes)\n onConfirmSelectionSuccess({\n skip_billing_page: skipBillingPage,\n event_id: String(eventId),\n hash,\n total,\n })\n } catch (error) {\n if ((error as any).response?.data?.data?.hasUnverifiedOrder) {\n setPendingVerificationMessage((error as any).response?.data?.message)\n } else {\n onPostCheckoutError(error)\n onConfirmSelectionError(error)\n }\n }\n } else {\n if (isBrowser) {\n if (!skipAddonPage) {\n window.localStorage.setItem('add_ons', JSON.stringify(values))\n }\n\n onConfirmSelectionSuccess({\n skip_billing_page: skipBillingPage && enableBillingInfoAutoCreate,\n event_id: String(eventId),\n })\n } else {\n onConfirmSelectionError({\n error: true,\n message: 'Window is not defined',\n })\n }\n }\n } catch (e) {\n onConfirmSelectionError(e)\n }\n }\n\n const handleClearAddons = () => {\n window.localStorage.removeItem('add_ons')\n }\n\n const initialValues = useMemo(() => {\n const addOnsData: any = {}\n if (addons?.length > 0 && addOnDataWithCustomFields?.fields?.length > 0) {\n _map(addons, addon => {\n _map(addOnDataWithCustomFields.fields, field => {\n const { id, groupItems } = field\n _map(groupItems, item => {\n addOnsData[`${addon.id}-${id}-${item.name}`] = item.value\n })\n })\n })\n }\n\n return addOnsData\n }, [addons, addOnDataWithCustomFields])\n\n if (loading) {\n return (\n <div className={`${classNamePrefix}_loader`}>\n <CircularProgress size={50} />\n </div>\n )\n }\n\n if (addons?.length === 0) {\n return null\n }\n\n const params = new URL(`${window.location}`).searchParams\n const addOnIsIncluded = params.get('include_add_on') === 'true'\n const isResale = params.get('resale') === 'true'\n\n return (\n <>\n {!!cartExpirationTime && enableTimer && !samePage && (\n <TimerWidget\n expires_at={cartExpirationTime}\n onCountdownFinish={() => {\n handleClearAddons()\n onCountdownFinish()\n }}\n />\n )}\n <div className={`${classNamePrefix}_container`}>\n <div className={`${classNamePrefix}_block`}>\n <div className={`${classNamePrefix}_line_block`}>\n {samePage ? null : (\n <p className={`${classNamePrefix}_info_title`}>Get Your Tickets</p>\n )}\n {(!addons?.length || (isResale && addOnIsIncluded)) && samePage ? null : (\n <div className={`${classNamePrefix}_title`}>UPGRADES & ADD-ONS</div>\n )}\n {samePage ? null : (\n <button\n type=\"button\"\n className={`${classNamePrefix}_skip`}\n onClick={() => {\n handleClearAddons()\n handleConfirm({}, true)\n }}\n >\n Skip\n </button>\n )}\n </div>\n {(!addons?.length || (isResale && addOnIsIncluded)) && samePage ? null : (\n <div className={`${classNamePrefix}_subtitle`}>\n PLEASE SELECT FROM THE OPTIONAL ADD-ONS BELOW\n </div>\n )}\n <Formik\n initialValues={initialValues}\n onSubmit={values => {\n handleConfirm(values)\n }}\n validate={\n samePage\n ? values => {\n if (isBrowser) {\n window.localStorage.setItem('add_ons', JSON.stringify(values))\n }\n }\n : undefined\n }\n >\n {({ values, errors, setFieldTouched }) => {\n const isConfirmDisabled = !isAtLeastOneAddonSelected(values)\n\n return (\n <Form autoComplete=\"off\" className=\"form_holder\">\n <>\n {(isResale && addOnIsIncluded ? [] : addons).map((addon: any) => {\n const price = addon.feeIncluded ? addon.price : addon.cost\n const isAddonFree = Number(addon?.price) === 0\n\n const addOnNormalizedCost = isAddonFree\n ? 'FREE'\n : currencyNormalizerCreator(\n getNormalizedPrice(addon?.cost ?? 0),\n addon.currency\n )\n\n const addonNormalizedPrice = isAddonFree\n ? 'FREE'\n : currencyNormalizerCreator(\n getNormalizedPrice(\n CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH\n ? addon?.price ?? price\n : price\n ),\n addon.currency\n )\n\n return (\n <div\n key={addon.id}\n className={`${classNamePrefix}_product_block`}\n >\n <div className={`${classNamePrefix}_product_images`}>\n {addon.imageUrl && (\n <div className={`${classNamePrefix}_product_image_block`}>\n <img src={addon.imageUrl} alt=\"No Data\" />\n </div>\n )}\n </div>\n <div className={`${classNamePrefix}_product_info_block`}>\n <div className={`${classNamePrefix}_product_title`}>\n {addon.name}\n {addon.description && descriptionTrigger !== 'always' && (\n <>\n <span\n aria-hidden\n className=\"info-icon\"\n onClick={\n descriptionTrigger === 'click'\n ? () => handleDescriptionToggle(addon.id)\n : undefined\n }\n onMouseEnter={\n descriptionTrigger === 'hover'\n ? () => setVisibleDescription(addon.id)\n : undefined\n }\n onMouseLeave={\n descriptionTrigger === 'hover'\n ? () => setVisibleDescription(null)\n : undefined\n }\n style={{\n marginLeft: 8,\n cursor: 'pointer',\n display: 'flex',\n }}\n data-tooltip-id={`tooltip-${addon.id}`}\n data-tooltip-content=\"View Add-On info\"\n >\n <InfoIcon size={14} />\n </span>\n <Tooltip id={`tooltip-${addon.id}`} place=\"top\">\n {addon.description || 'No description available'}\n </Tooltip>\n </>\n )}\n </div>\n <div className={`${classNamePrefix}_product_price`}>\n {CONFIGS.FEES_STYLE === FEES_STYLES.TRADITIONAL\n ? addonNormalizedPrice\n : addOnNormalizedCost}\n {!isAddonFree &&\n CONFIGS.FEES_STYLE === FEES_STYLES.TRADITIONAL && (\n <span className={`${classNamePrefix}_product_fee`}>\n {addon.feeIncluded ? '(incl. Fees)' : '(excl. Fees)'}\n </span>\n )}\n {!isAddonFree &&\n CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH && (\n <>\n <span className={`${classNamePrefix}_product_fee`}>\n {`(${addonNormalizedPrice} with fees)`}\n </span>\n </>\n )}\n </div>\n </div>\n {(visibleDescription === addon.id ||\n descriptionTrigger === 'always') && (\n <div\n className={`${classNamePrefix}_product_desc`}\n dangerouslySetInnerHTML={createMarkup(addon.description)}\n />\n )}\n <div className={`${classNamePrefix}_product_select_container`}>\n {addon.variants ? (\n addon.variants.map((variant: any) => (\n // Group Variants\n <AddonComponent\n key={variant.id}\n data={variant}\n selectOptions={addonsOptions[variant.id]}\n classNamePrefix={classNamePrefix}\n handleAddonChange={(id, value) => {\n onAddOnSelect(id, value, addon)\n onFieldChange(id, value, addon)\n }}\n addOnDataWithCustomFields={addOnDataWithCustomFields}\n configs={configs}\n values={values}\n errors={errors}\n />\n ))\n ) : (\n // Simple Addon\n <AddonComponent\n key={addon.id}\n data={addon}\n selectOptions={addonsOptions[addon.id]}\n classNamePrefix={classNamePrefix}\n handleAddonChange={(id, value) => {\n onAddOnSelect(id, value, addon)\n onFieldChange(id, value, addon)\n\n _map(addOnDataWithCustomFields.fields, fieldGroup => {\n const { id, groupItems } = fieldGroup\n _map(groupItems, field => {\n setFieldTouched(\n `${addon.id}-${id}-${field.name}`,\n true,\n true\n )\n })\n })\n }}\n addOnDataWithCustomFields={addOnDataWithCustomFields}\n configs={configs}\n values={values}\n errors={errors}\n />\n )}\n </div>\n </div>\n )\n })}\n {samePage ? null : (\n <button\n type=\"submit\"\n className={`${\n isConfirmDisabled ? `${classNamePrefix}_is_disabled` : ''\n } ${classNamePrefix}_submit_button`}\n disabled={isConfirmDisabled}\n >\n CONFIRM SELECTION\n </button>\n )}\n </>\n </Form>\n )\n }}\n </Formik>\n </div>\n </div>\n <VerificationPendingModal\n message={pendingVerificationMessage}\n onClose={() => {\n onPendingVerification()\n }}\n />\n </>\n )\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { CircularProgress } from '@mui/material'\nimport { Form, Formik } from 'formik'\nimport _identity from 'lodash/identity'\nimport _map from 'lodash/map'\nimport React, { useEffect, useMemo, useState } from 'react'\nimport { Tooltip } from 'react-tooltip'\n\nimport { getAddons, getCart } from '../../api'\nimport { FEES_STYLES } from '../../constants'\nimport { currencyNormalizerCreator } from '../../normalizers'\nimport { CONFIGS, createMarkup } from '../../utils'\nimport InfoIcon from '../ticketsContainer/InfoIcon'\nimport { addonsWithGroupsAdapter, cartAdapter } from './adapters'\nimport AddonComponent from './AddonComponent'\nimport { getNormalizedPrice } from './normalizers'\nimport {\n generateSelectOptions,\n getAddonSelectOptions,\n getSortedAddons,\n getTicketRelatedAddons,\n} from './utils'\n\nexport interface ISimpleAddonContainerProps {\n classNamePrefix?: string;\n onGetAddonsPageInfoSuccess?: (res: any) => void;\n onGetAddonsPageInfoError?: (error: any) => void;\n descriptionTrigger?: 'click' | 'hover' | 'always';\n addOnDataWithCustomFields: any;\n configs: any;\n eventId: string;\n onAddOnSelect?: (id: string, value: string, addon: any, fieldUpdates: any) => void;\n handleConfirm?: (values: any) => void;\n}\n\nexport interface ObjectLiteral {\n [key: string]: any;\n}\n\nexport const SimpleAddonsContainer = ({\n classNamePrefix = 'add_on',\n onGetAddonsPageInfoSuccess = _identity,\n onGetAddonsPageInfoError = _identity,\n descriptionTrigger = 'click',\n addOnDataWithCustomFields,\n configs,\n eventId,\n onAddOnSelect = _identity,\n handleConfirm = _identity,\n}: ISimpleAddonContainerProps) => {\n const [addons, setAddons] = useState<any>(null)\n const [addonsOptions, setAddonsOptions] = useState<any>({})\n const [groupsWithSelectedVariants, setGroupsWithSelectedVariants] = useState<any>({})\n const [groupsWithInitialVariantsValues, setGroupsWithInitialVariantsValues] =\n useState<any>({})\n const [loading, setLoading] = useState(true)\n\n const [visibleDescription, setVisibleDescription] = useState<string | null>(null)\n\n const handleDescriptionToggle = (ticketId: string) => {\n setVisibleDescription(current => (current === ticketId ? null : ticketId))\n }\n\n // build { [fieldName]: value } for one addon from current Formik values\n const collectAddonFieldUpdates = (addon: any, allValues: Record<string, any>) => {\n const out: Record<string, any> = {}\n if (!addOnDataWithCustomFields?.fields?.length) return out\n addOnDataWithCustomFields.fields.forEach((group: any) => {\n group.groupItems.forEach((item: any) => {\n const k = `${addon.id}-${group.id}-${item.name}`\n if (k in allValues) out[item.name] = allValues[k]\n })\n })\n return out\n }\n\n // live-sync a single custom field change into localStorage.add_on_data_capture\n const handleCustomFieldChange = (\n addon: any,\n _groupId: string | number,\n fieldName: string,\n value: any\n ) => {\n const existing = JSON.parse(localStorage.getItem('add_on_data_capture') || '{}')\n const addonId = String(addon.id)\n const next = {\n ...existing,\n [addonId]: { ...(existing[addonId] || {}), [fieldName]: value },\n }\n localStorage.setItem('add_on_data_capture', JSON.stringify(next))\n }\n\n useEffect(() => {\n const getAddonsPageInfo = async () => {\n try {\n if (eventId) {\n setLoading(true)\n\n // Get choosed ticket info (id, count) from Cart request for addons options calculations\n const cart = await getCart()\n const { id: choosedTicketID, quantity } = cartAdapter(cart)\n const choosedTicketCount = Number(quantity)\n\n // Get and collect addons data\n const addonsData = await getAddons(eventId)\n const adaptedAddons = addonsWithGroupsAdapter(addonsData)\n const ticketRelatedAddons = getTicketRelatedAddons(\n adaptedAddons,\n choosedTicketID\n )\n const sortedTicketAddons = getSortedAddons(ticketRelatedAddons)\n\n setAddons(sortedTicketAddons)\n\n // Collect addons and addon group options\n const {\n addonsWithOptions,\n groupsWithSelectedVariantsInfo,\n groupsWithVariants,\n } = getAddonSelectOptions(adaptedAddons, choosedTicketCount)\n\n setAddonsOptions(addonsWithOptions)\n setGroupsWithSelectedVariants(groupsWithSelectedVariantsInfo)\n setGroupsWithInitialVariantsValues(groupsWithVariants)\n\n // Success callback props\n onGetAddonsPageInfoSuccess(addonsData)\n }\n } catch (e) {\n // Callback error props\n onGetAddonsPageInfoError(e)\n } finally {\n setLoading(false)\n }\n }\n\n getAddonsPageInfo()\n }, [eventId, onGetAddonsPageInfoError, onGetAddonsPageInfoSuccess])\n\n const recreateGroupVariantsSelectOptions = (groupId: any, changedGroupd: any) => {\n const { choosedVariants, limit, selectedCount } = changedGroupd\n const remainingGroupStock = limit - selectedCount\n const recreatedVariantsOptions: ObjectLiteral = {}\n\n // Regenerate variants allowed stock counts\n for (const variant in choosedVariants) {\n const variantId = variant\n const variantCurrSelectedValue = choosedVariants[variant]\n let allowedOptionCount\n\n // Formula for regenerating\n if (\n remainingGroupStock >=\n groupsWithInitialVariantsValues[groupId][variantId] - variantCurrSelectedValue\n ) {\n allowedOptionCount = groupsWithInitialVariantsValues[groupId][variantId]\n } else {\n allowedOptionCount = remainingGroupStock + variantCurrSelectedValue\n }\n\n recreatedVariantsOptions[variantId] = generateSelectOptions(0, allowedOptionCount)\n }\n\n setAddonsOptions((prevState: any) =>\n Object.assign({}, prevState, recreatedVariantsOptions)\n )\n }\n\n const onFieldChange = (id: any, value: any, addon: any) => {\n // If changeableGroup exsists it means that group with limitation variant was changed\n const changeableGroup = groupsWithSelectedVariants[addon.id]\n\n if (changeableGroup) {\n const currGroupId = addon.id\n const currSelectedVariantId = id\n const currSelectedVariantCount = Number(value)\n const currSelectedVariantPrevCount =\n groupsWithSelectedVariants[currGroupId].choosedVariants[currSelectedVariantId]\n\n const currSelectedGroupCount =\n changeableGroup.selectedCount +\n (currSelectedVariantCount - currSelectedVariantPrevCount)\n\n // Update Group info\n const updatedGroupsWithSelectedVariants = {\n ...groupsWithSelectedVariants,\n [currGroupId]: {\n ...groupsWithSelectedVariants[currGroupId],\n selectedCount: currSelectedGroupCount,\n choosedVariants: {\n ...groupsWithSelectedVariants[currGroupId].choosedVariants,\n [currSelectedVariantId]: currSelectedVariantCount,\n },\n },\n }\n setGroupsWithSelectedVariants(updatedGroupsWithSelectedVariants)\n\n // Recreate Select Options for Addon Group Variants\n recreateGroupVariantsSelectOptions(\n currGroupId,\n updatedGroupsWithSelectedVariants[currGroupId]\n )\n }\n }\n\n const initialValues = useMemo(() => {\n const addOnsData: any = {}\n if (addons?.length > 0 && addOnDataWithCustomFields?.fields?.length > 0) {\n _map(addons, addon => {\n _map(addOnDataWithCustomFields.fields, field => {\n const { id, groupItems } = field\n _map(groupItems, item => {\n addOnsData[`${addon.id}-${id}-${item.name}`] = item.value\n })\n })\n })\n }\n\n return addOnsData\n }, [addons, addOnDataWithCustomFields])\n\n if (loading || !addons) {\n return (\n <div className={`${classNamePrefix}_loader`}>\n <CircularProgress size={50} />\n </div>\n )\n }\n\n return (\n <div className={`${classNamePrefix}_container`}>\n <div className={`${classNamePrefix}_block`}>\n <div className={`${classNamePrefix}_line_block`}>\n {addons?.length > 0 && (\n <div className={`${classNamePrefix}_title`}>UPGRADES & ADD-ONS</div>\n )}\n </div>\n {addons?.length > 0 && (\n <div className={`${classNamePrefix}_subtitle`}>\n PLEASE SELECT FROM THE OPTIONAL ADD-ONS BELOW\n </div>\n )}\n <Formik\n initialValues={initialValues}\n onSubmit={values => {\n handleConfirm(values)\n }}\n validate={() => {\n // Real-time validation can be handled here if needed\n }}\n >\n {({ values, errors, setFieldTouched }) => (\n <Form autoComplete=\"off\" className=\"form_holder\">\n <>\n {addons.map((addon: any) => {\n const price = addon.feeIncluded ? addon.price : addon.cost\n const isAddonFree = Number(addon?.price) === 0\n\n const addOnNormalizedCost = isAddonFree\n ? 'FREE'\n : currencyNormalizerCreator(\n getNormalizedPrice(addon?.cost ?? 0),\n addon.currency\n )\n\n const addonNormalizedPrice = isAddonFree\n ? 'FREE'\n : currencyNormalizerCreator(\n getNormalizedPrice(\n CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH\n ? addon?.price ?? price\n : price\n ),\n addon.currency\n )\n\n return (\n <div key={addon.id} className={`${classNamePrefix}_product_block`}>\n <div className={`${classNamePrefix}_product_images`}>\n {addon.imageUrl && (\n <div className={`${classNamePrefix}_product_image_block`}>\n <img src={addon.imageUrl} alt=\"No Data\" />\n </div>\n )}\n </div>\n <div className={`${classNamePrefix}_product_info_block`}>\n <div className={`${classNamePrefix}_product_title`}>\n {addon.name}\n {addon.description && descriptionTrigger !== 'always' && (\n <>\n <span\n aria-hidden\n className=\"info-icon\"\n onClick={\n descriptionTrigger === 'click'\n ? () => handleDescriptionToggle(addon.id)\n : undefined\n }\n onMouseEnter={\n descriptionTrigger === 'hover'\n ? () => setVisibleDescription(addon.id)\n : undefined\n }\n onMouseLeave={\n descriptionTrigger === 'hover'\n ? () => setVisibleDescription(null)\n : undefined\n }\n style={{\n marginLeft: 8,\n cursor: 'pointer',\n display: 'flex',\n }}\n data-tooltip-id={`tooltip-${addon.id}`}\n data-tooltip-content=\"View Add-On info\"\n >\n <InfoIcon size={14} />\n </span>\n <Tooltip id={`tooltip-${addon.id}`} place=\"top\">\n {addon.description || 'No description available'}\n </Tooltip>\n </>\n )}\n </div>\n <div className={`${classNamePrefix}_product_price`}>\n {CONFIGS.FEES_STYLE === FEES_STYLES.TRADITIONAL\n ? addonNormalizedPrice\n : addOnNormalizedCost}\n {!isAddonFree &&\n CONFIGS.FEES_STYLE === FEES_STYLES.TRADITIONAL && (\n <span className={`${classNamePrefix}_product_fee`}>\n {addon.feeIncluded ? '(incl. Fees)' : '(excl. Fees)'}\n </span>\n )}\n {!isAddonFree &&\n CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH && (\n <>\n <span className={`${classNamePrefix}_product_fee`}>\n {`(${addonNormalizedPrice} with fees)`}\n </span>\n </>\n )}\n </div>\n </div>\n {(visibleDescription === addon.id ||\n descriptionTrigger === 'always') && (\n <div\n className={`${classNamePrefix}_product_desc`}\n dangerouslySetInnerHTML={createMarkup(addon.description)}\n />\n )}\n <div className={`${classNamePrefix}_product_select_container`}>\n {addon.variants ? (\n addon.variants.map((variant: any) => (\n // Group Variants\n <AddonComponent\n key={variant.id}\n data={variant}\n selectOptions={addonsOptions[variant.id]}\n classNamePrefix={classNamePrefix}\n handleAddonChange={(id, value) => {\n console.log('handleAddonChange', id, value)\n onFieldChange(id, value, addon)\n const fieldUpdates = collectAddonFieldUpdates(\n addon,\n values\n )\n onAddOnSelect(id, value, addon, fieldUpdates)\n }}\n onCustomFieldChange={handleCustomFieldChange}\n addOnDataWithCustomFields={addOnDataWithCustomFields}\n configs={configs}\n values={values}\n errors={errors}\n />\n ))\n ) : (\n // Simple Addon\n <AddonComponent\n key={addon.id}\n data={addon}\n selectOptions={addonsOptions[addon.id]}\n classNamePrefix={classNamePrefix}\n handleAddonChange={(id, value) => {\n onFieldChange(id, value, addon)\n const fieldUpdates = collectAddonFieldUpdates(addon, values)\n onAddOnSelect(id, value, addon, fieldUpdates)\n _map(addOnDataWithCustomFields.fields, fieldGroup => {\n const { id, groupItems } = fieldGroup\n _map(groupItems, field => {\n setFieldTouched(\n `${addon.id}-${id}-${field.name}`,\n true,\n true\n )\n })\n })\n }}\n onCustomFieldChange={handleCustomFieldChange}\n addOnDataWithCustomFields={addOnDataWithCustomFields}\n configs={configs}\n values={values}\n errors={errors}\n />\n )}\n </div>\n </div>\n )\n })}\n </>\n </Form>\n )}\n </Formik>\n </div>\n </div>\n )\n}\n\nexport default SimpleAddonsContainer\n","import { Alert, AlertColor, Snackbar, SnackbarOrigin } from '@mui/material'\nimport React from 'react'\n\ninterface ISnackbarAlertProps {\n isOpen: boolean;\n message: string;\n type: AlertColor;\n position?: SnackbarOrigin;\n autoHideDuration?: number;\n variant?: 'filled' | 'standard' | 'outlined';\n\n onClose: () => void;\n}\n\nconst SnackbarAlert = ({\n isOpen,\n message,\n type,\n position,\n autoHideDuration = 3000,\n variant,\n onClose,\n}: ISnackbarAlertProps) => (\n <div className=\"snackbar-alert-container\">\n <Snackbar\n autoHideDuration={autoHideDuration}\n open={isOpen}\n anchorOrigin={position || { vertical: 'top', horizontal: 'center' }}\n onClose={onClose}\n classes={{\n root: 'snackbar-alert-snackbar-root',\n }}\n >\n <Alert\n severity={type}\n onClose={onClose}\n variant={variant || 'filled'}\n classes={{\n icon: 'snackbar-alert-icon',\n root: 'snackbar-alert-alert-root',\n action: 'snackbar-alert-action',\n message: 'snackbar-alert-message',\n filled: 'snackbar-alert-filled',\n }}\n >\n {message}\n </Alert>\n </Snackbar>\n </div>\n)\n\nexport default SnackbarAlert\n","import React from 'react'\n\nexport const PoweredBy = () => (\n <div className=\"powered-container\">\n <div className='powered-text'>Powered By</div>\n <img\n className='powered-img'\n alt=\"The Ticket Fairy\"\n src={\"https://cdn-checkout.s3.us-east-2.amazonaws.com/IconTicketFairy.svg\"}\n />\n <div className='powered-ttf'>\n The<strong>Ticket</strong>Fairy\n </div>\n </div>\n)\n","import './style.css'\n\nimport { Box, CircularProgress, Modal } from '@mui/material'\nimport axios, { AxiosError } from 'axios'\nimport { Field, Form, Formik } from 'formik'\nimport _identity from 'lodash/identity'\nimport React, { FC, useState } from 'react'\nimport * as Yup from 'yup'\n\nimport { forgotPassword } from '../../api'\nimport { CustomField } from '../common/CustomField'\nimport { PoweredBy } from '../common/PoweredBy'\n\nexport interface IForgotPasswordProps {\n onClose: () => void;\n onLoginButtonClick: () => void;\n onForgotPasswordSuccess: (res: IAxiosResponseData) => void;\n onForgotPasswordError: (e: AxiosError) => void;\n showPoweredByImage?: boolean;\n displaySuccessMessage?: boolean;\n}\n\ninterface ValuesTypes {\n email: string;\n}\n\nconst style: React.CSSProperties = {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n minWidth: 480,\n backgroundColor: '#fff',\n border: '1px solid white',\n outline: 'none',\n padding: '14px',\n}\n\nconst Schema = Yup.object().shape({\n email: Yup.string().email('Invalid email').required('Required'),\n})\n\nexport const ForgotPasswordModal: FC<IForgotPasswordProps> = ({\n onClose = _identity,\n onLoginButtonClick = _identity,\n onForgotPasswordSuccess = _identity,\n onForgotPasswordError = _identity,\n showPoweredByImage = false,\n displaySuccessMessage = false,\n}) => {\n const [loading, setLoading] = useState(false)\n const [successMessage, setSuccessMessage] = useState<string | null>(null)\n const showSuccess = displaySuccessMessage && successMessage\n\n const onForgotPassword = async ({ email }: ValuesTypes) => {\n if (showSuccess) {\n setSuccessMessage(null)\n onClose()\n return\n }\n\n try {\n setLoading(true)\n const { data } = await forgotPassword(email)\n\n onForgotPasswordSuccess(data)\n\n if (displaySuccessMessage && data?.success) {\n setSuccessMessage(data?.message)\n }\n\n if (!displaySuccessMessage) {\n onClose()\n }\n } catch (e) {\n if (axios.isAxiosError(e)) {\n onForgotPasswordError(e)\n }\n } finally {\n setLoading(false)\n }\n }\n\n return (\n <Modal\n open={true}\n onClose={loading ? _identity : onClose}\n aria-labelledby=\"modal-modal-title\"\n aria-describedby=\"modal-modal-description\"\n className=\"forgot-password-modal\"\n >\n <Box style={style}>\n <div>\n <Formik\n initialValues={{ email: '' }}\n validationSchema={Schema}\n onSubmit={onForgotPassword}\n >\n {({ isValid, dirty, handleSubmit }) => (\n <Form onSubmit={handleSubmit}>\n <div className=\"forgot-password-container\">\n <div className=\"title\">Password Reset</div>\n <div className=\"forgot-password-container__singleField\">\n {showSuccess ? (\n <p id=\"forgot-password-success-message\">{successMessage}</p>\n ) : (\n <Field name=\"email\" label=\"Email\" component={CustomField} />\n )}\n </div>\n </div>\n <div className=\"forgot-password-action-button\">\n <button\n type=\"submit\"\n disabled={showSuccess ? false : !(isValid && dirty)}\n >\n {loading ? (\n <CircularProgress size=\"22px\" />\n ) : showSuccess ? (\n 'Close'\n ) : (\n 'Submit'\n )}\n </button>\n </div>\n <div className=\"login\">\n <span aria-hidden onClick={onLoginButtonClick}>\n Back to Log In\n </span>\n </div>\n {showPoweredByImage ? <PoweredBy /> : null}\n </Form>\n )}\n </Formik>\n </div>\n </Box>\n </Modal>\n )\n}\n","import { Grid } from '@mui/material'\nimport { AxiosError } from 'axios'\nimport { Field, Form, Formik } from 'formik'\nimport _get from 'lodash/get'\nimport _map from 'lodash/map'\nimport React, { FC, useEffect, useState } from 'react'\n\nimport { getCountries, getProfileData, getStates, register } from '../../api'\nimport { CONFIGS, isBrowser, setLoggedUserData } from '../../utils'\nimport {\n confirmPasswordValidator,\n emailValidator,\n passwordValidator,\n requiredValidator,\n} from '../../validators'\nimport { CustomField } from '../common/CustomField'\nimport { PhoneNumberField } from '../common/PhoneNumberField'\n\ninterface SignUpFormProps {\n onSignUpSuccess: (res: IProfileData) => void;\n onGetProfileDataSuccess?: (res: any) => void;\n onGetProfileDataError?: (e: AxiosError) => void;\n logo?: string;\n}\n\nexport const SignUpForm: FC<SignUpFormProps> = ({\n onSignUpSuccess,\n onGetProfileDataSuccess = () => {},\n onGetProfileDataError = () => {},\n logo,\n}) => {\n const [error, setError] = useState('')\n const [isSubmitting, setIsSubmitting] = useState(false)\n const [countries, setCountries] = useState<any[]>([])\n const [states, setStates] = useState<any[]>([])\n const [phoneValidationIsLoading, setPhoneValidationIsLoading] = useState(false)\n\n // Fetch countries on mount\n useEffect(() => {\n const fetchCountries = async () => {\n try {\n const res = await getCountries()\n const mappedCountries = _map(res.data, (item: any) => ({\n id: item.id,\n name: item.name,\n code: item.code,\n }))\n setCountries(mappedCountries)\n } catch (e) {\n console.error('Error fetching countries:', e)\n }\n }\n fetchCountries()\n }, [])\n\n return (\n <Formik\n enableReinitialize\n initialValues={{\n firstName: '',\n lastName: '',\n email: '',\n password: '',\n passwordConfirmation: '',\n phone: '',\n country: '1',\n city: '',\n state: '',\n streetAddress: '',\n zip: '',\n }}\n onSubmit={async values => {\n setIsSubmitting(true)\n setError('')\n try {\n const formData = new FormData()\n formData.append('first_name', values.firstName)\n formData.append('last_name', values.lastName)\n formData.append('email', values.email)\n formData.append('password', values.password)\n formData.append('password_confirmation', values.passwordConfirmation)\n formData.append('phone', values.phone)\n formData.append('country', values.country)\n formData.append('city', values.city)\n formData.append('state', values.state)\n formData.append('street_address', values.streetAddress)\n formData.append('zip', values.zip)\n formData.append('client_id', CONFIGS.CLIENT_ID || '')\n formData.append('client_secret', CONFIGS.CLIENT_SECRET || '')\n\n await register(formData)\n\n // Fetch profile data after successful signup\n try {\n const profileResponse = await getProfileData()\n onGetProfileDataSuccess(profileResponse.data)\n\n const profileSpecifiedData = profileResponse.data\n const profileDataObj = setLoggedUserData(profileSpecifiedData)\n\n if (isBrowser) {\n window.localStorage.setItem('user_data', JSON.stringify(profileDataObj))\n const event = new window.CustomEvent('tf-login')\n window.document.dispatchEvent(event)\n }\n\n onSignUpSuccess(_get(profileResponse, 'data.data', {}) as IProfileData)\n } catch (e) {\n if ((e as any).isAxiosError) {\n onGetProfileDataError(e as AxiosError)\n }\n setError('Registration successful but failed to fetch profile data')\n }\n } catch (e) {\n const errorData = _get(e, 'response.data.message', '')\n\n // Check if error is an object with field-specific errors\n if (typeof errorData === 'object' && errorData !== null) {\n const errorMessages = Object.entries(errorData)\n .map(([field, messages]) => {\n const fieldName = field.replace(/_/g, ' ').replace(/\\b\\w/g, l => l.toUpperCase())\n const messageArray = Array.isArray(messages) ? messages : [messages]\n return `${fieldName}: ${messageArray.join(', ')}`\n })\n .join('\\n')\n setError(errorMessages || 'Registration failed. Please try again.')\n } else {\n setError(String(errorData) || 'Registration failed. Please try again.')\n }\n } finally {\n setIsSubmitting(false)\n }\n }}\n >\n {props => (\n <Form onSubmit={props.handleSubmit}>\n <div className=\"login-logo-container\">\n <img\n className=\"login-logo-tff\"\n src={\n logo ||\n 'https://www.ticketfairy.com/resources/images/logo-ttf-black.svg'\n }\n alt=\"logo\"\n />\n </div>\n {error && (\n <div className=\"server_auth__error\" style={{ whiteSpace: 'pre-line' }}>\n {error}\n </div>\n )}\n <Grid container spacing={2} sx={{ padding: '15px 25px', maxHeight: { xs: '40vh', sm: '60vh' }, overflowY: 'auto' }}>\n {/* Name Fields */}\n <Grid item xs={12} md={6}>\n <Field\n name=\"firstName\"\n label=\"First Name\"\n type=\"text\"\n component={CustomField}\n theme=\"light\"\n validate={requiredValidator}\n />\n </Grid>\n <Grid item xs={12} md={6}>\n <Field\n name=\"lastName\"\n label=\"Last Name\"\n type=\"text\"\n component={CustomField}\n theme=\"light\"\n validate={requiredValidator}\n />\n </Grid>\n\n {/* Email */}\n <Grid item xs={12} md={6}>\n <Field\n name=\"email\"\n label=\"Email\"\n type=\"email\"\n component={CustomField}\n theme=\"light\"\n validate={(value: string) => {\n const required = requiredValidator(value)\n if (required) return required\n return emailValidator(value)\n }}\n />\n </Grid>\n\n {/* Street Address */}\n <Grid item xs={12} md={6}>\n <Field\n name=\"streetAddress\"\n label=\"Street Address\"\n type=\"text\"\n component={CustomField}\n theme=\"light\"\n validate={requiredValidator}\n />\n </Grid>\n\n {/* Zip Code */}\n <Grid item xs={12} md={6}>\n <Field\n name=\"zip\"\n label=\"Zip / Postal Code\"\n type=\"text\"\n component={CustomField}\n theme=\"light\"\n validate={requiredValidator}\n />\n </Grid>\n\n {/* Country */}\n <Grid item xs={12} md={6}>\n <Field\n name=\"country\"\n label=\"Country\"\n type=\"select\"\n component={CustomField}\n theme=\"light\"\n validate={requiredValidator}\n selectOptions={_map(countries, item => ({\n value: item.id,\n label: item.name,\n }))}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n props.setFieldValue('country', e.target.value)\n props.setFieldValue('state', '')\n // Fetch states for selected country\n const fetchStatesForCountry = async () => {\n try {\n const res = await getStates(e.target.value)\n const mappedStates = _map(res.data, (item, key) => ({\n label: item,\n value: key,\n }))\n setStates(mappedStates)\n } catch (error) {\n console.error('Error fetching states:', error)\n setStates([])\n }\n }\n fetchStatesForCountry()\n }}\n />\n </Grid>\n\n {/* State */}\n <Grid item xs={12} md={6}>\n <Field\n name=\"state\"\n label=\"State / Province\"\n type=\"select\"\n component={CustomField}\n theme=\"light\"\n validate={requiredValidator}\n selectOptions={[\n { value: '', label: 'Select State/Province', disabled: true },\n ...states,\n ]}\n />\n </Grid>\n\n {/* City */}\n <Grid item xs={12} md={6}>\n <Field\n name=\"city\"\n label=\"City\"\n type=\"text\"\n component={CustomField}\n theme=\"light\"\n validate={requiredValidator}\n />\n </Grid>\n\n {/* Phone */}\n <Grid item xs={12}>\n <Field\n name=\"phone\"\n label=\"Phone\"\n type=\"phone\"\n component={PhoneNumberField}\n fill={true}\n disableDropdown={false}\n setPhoneValidationIsLoading={setPhoneValidationIsLoading}\n defaultCountry=\"us\"\n isCountryCodeEditable={true}\n />\n </Grid>\n\n {/* Password */}\n <Grid item xs={12} md={6}>\n <Field\n name=\"password\"\n label=\"Password\"\n type=\"password\"\n component={CustomField}\n theme=\"light\"\n validate={passwordValidator}\n />\n </Grid>\n\n {/* Confirm Password */}\n <Grid item xs={12} md={6}>\n <Field\n name=\"passwordConfirmation\"\n label=\"Confirm Password\"\n type=\"password\"\n component={CustomField}\n theme=\"light\"\n validate={(value: string) => confirmPasswordValidator(value, props.values.password)}\n />\n </Grid>\n </Grid>\n\n <div className=\"login-modal-body\">\n <div className=\"login-action-button\">\n <button type=\"submit\" disabled={isSubmitting || phoneValidationIsLoading}>\n {isSubmitting ? 'Creating Account...' : 'Create Account'}\n </button>\n </div>\n </div>\n </Form>\n )}\n </Formik>\n )\n}\n","import './style.css'\n\nimport Box from '@mui/material/Box'\nimport Modal from '@mui/material/Modal'\nimport Tab from '@mui/material/Tab'\nimport Tabs from '@mui/material/Tabs'\nimport useMediaQuery from '@mui/material/useMediaQuery'\nimport axios, { AxiosError } from 'axios'\nimport { Field, Form, Formik } from 'formik'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport React, { FC, useState } from 'react'\n\nimport { authorize, getProfileData } from '../../api'\nimport { isBrowser, setLoggedUserData } from '../../utils'\nimport { requiredValidator } from '../../validators'\nimport { CustomField } from '../common/CustomField'\nimport { PoweredBy } from '../common/PoweredBy'\nimport { COLORS, MODAL_DIMENSIONS, TAB_STYLES } from './constants'\nimport { SignUpForm } from './SignUpForm'\n\nexport interface Props {\n onClose: () => void;\n onLogin: (res: IProfileData) => void;\n alreadyHasUser?: boolean;\n userExpired?: boolean;\n onAuthorizeSuccess?: (res: any) => void;\n onAuthorizeError?: (e: AxiosError) => void;\n onGetProfileDataSuccess?: (res: any) => void;\n onGetProfileDataError?: (e: AxiosError) => void;\n onForgotPassword?: () => void;\n onSignup?: () => void;\n modalClassname?: string;\n logo?: string;\n showForgotPasswordButton?: boolean;\n showSignUpButton?: boolean;\n showPoweredByImage?: boolean;\n registerUrl?: string;\n}\n\nconst style: React.CSSProperties = {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n width: MODAL_DIMENSIONS.WIDTH.DESKTOP,\n backgroundColor: '#e3e3e3',\n border: `1px solid ${COLORS.BORDER}`,\n outline: 'none',\n}\n\nconst mobileStyle: React.CSSProperties = {\n ...style,\n width: MODAL_DIMENSIONS.WIDTH.MOBILE,\n}\n\nexport const LoginModal: FC<Props> = ({\n onClose,\n onLogin,\n alreadyHasUser = false,\n userExpired = false,\n onGetProfileDataSuccess = _identity,\n onGetProfileDataError = _identity,\n onForgotPassword = _identity,\n onSignup = _identity,\n modalClassname = '',\n logo,\n showForgotPasswordButton = false,\n showSignUpButton = false,\n showPoweredByImage = false,\n}) => {\n const [error, setError] = useState('')\n const [activeTab, setActiveTab] = useState<'login' | 'signup'>('login')\n const isMobile = useMediaQuery('(max-width:600px)')\n\n // If onSignup is provided (custom callback), use old behavior\n const useCustomSignup = onSignup !== _identity\n\n const handleTabChange = (_event: React.SyntheticEvent, newValue: 'login' | 'signup') => {\n setActiveTab(newValue)\n }\n\n return (\n <Modal\n open={true}\n onClose={onClose}\n aria-labelledby=\"modal-modal-title\"\n aria-describedby=\"modal-modal-description\"\n className={`login-modal ${modalClassname}`}\n >\n <Box style={isMobile ? mobileStyle : style}\n sx={{\n '@media screen and (orientation:landscape)': {\n maxHeight: '80vh',\n overflowY: 'auto'\n }\n }}\n >\n <div>\n {showSignUpButton && !useCustomSignup && (\n <Tabs\n value={activeTab}\n onChange={handleTabChange}\n variant=\"fullWidth\"\n sx={{\n backgroundColor: TAB_STYLES.BACKGROUND_COLOR,\n marginBottom: TAB_STYLES.MARGIN_BOTTOM,\n '& .MuiTabs-indicator': {\n backgroundColor: TAB_STYLES.INDICATOR.BACKGROUND_COLOR,\n },\n }}\n >\n <Tab\n label=\"Login\"\n value=\"login\"\n sx={{\n fontFamily: TAB_STYLES.LABEL.FONT_FAMILY,\n fontWeight: TAB_STYLES.LABEL.FONT_WEIGHT,\n fontSize: TAB_STYLES.LABEL.FONT_SIZE,\n textTransform: TAB_STYLES.LABEL.TEXT_TRANSFORM,\n color: TAB_STYLES.LABEL.COLOR,\n '&.Mui-selected': {\n color: TAB_STYLES.LABEL.SELECTED_COLOR,\n },\n }}\n />\n <Tab\n label=\"Sign Up\"\n value=\"signup\"\n sx={{\n fontFamily: TAB_STYLES.LABEL.FONT_FAMILY,\n fontWeight: TAB_STYLES.LABEL.FONT_WEIGHT,\n fontSize: TAB_STYLES.LABEL.FONT_SIZE,\n textTransform: TAB_STYLES.LABEL.TEXT_TRANSFORM,\n color: TAB_STYLES.LABEL.COLOR,\n '&.Mui-selected': {\n color: TAB_STYLES.LABEL.SELECTED_COLOR,\n },\n }}\n />\n </Tabs>\n )}\n\n {activeTab === 'login' ? (\n <Formik\n initialValues={{ email: '', password: '' }}\n onSubmit={async ({ email, password }) => {\n try {\n const body = { email, password }\n const authRes = await authorize(body)\n let profileResponse = null\n try {\n profileResponse = await getProfileData()\n onGetProfileDataSuccess(profileResponse.data)\n } catch (e) {\n if (axios.isAxiosError(e)) {\n onGetProfileDataError(e)\n }\n return\n }\n\n const profileSpecifiedData = profileResponse.data\n const profileDataObj = setLoggedUserData(profileSpecifiedData)\n if (isBrowser) {\n window.localStorage.setItem('user_data', JSON.stringify(profileDataObj))\n const event = new window.CustomEvent('tf-login')\n window.document.dispatchEvent(event)\n }\n onLogin(_get(authRes, 'data.data', {}) as IProfileData)\n } catch (e) {\n if (axios.isAxiosError(e)) {\n const error = _get(e, 'response.data.message', 'Error')\n setError(error)\n } else if (e instanceof Error) {\n setError(e?.message || 'Error')\n }\n }\n }}\n >\n {props => (\n <Form onSubmit={props.handleSubmit}>\n <div className=\"login-logo-container\">\n <img\n className=\"login-logo-tff\"\n src={\n logo ||\n 'https://www.ticketfairy.com/resources/images/logo-ttf-black.svg'\n }\n alt=\"logo\"\n />\n </div>\n <div className=\"server_auth__error\">{error}</div>\n {alreadyHasUser && (\n <p className=\"info-text-for-login\">\n It appears this email is already attached to an account. Please log in\n here to complete your registration.\n </p>\n )}\n {userExpired && (\n <p className=\"info-text-for-login\">\n Your session has expired, please log in again.\n </p>\n )}\n <div className=\"login-modal-body\">\n <div className=\"login-modal-body__email\">\n <Field\n name=\"email\"\n label=\"Email\"\n type=\"email\"\n component={CustomField}\n theme=\"light\"\n validate={requiredValidator}\n />\n </div>\n <div className=\"login-modal-body__password\">\n <Field\n name=\"password\"\n label=\"Password\"\n type=\"password\"\n component={CustomField}\n theme=\"light\"\n validate={requiredValidator}\n />\n </div>\n <div className=\"login-action-button\">\n <button type=\"submit\">Login</button>\n </div>\n {showForgotPasswordButton && (\n <div className=\"forgot-password\">\n <span aria-hidden=\"true\" onClick={onForgotPassword}>\n Forgot password?\n </span>\n </div>\n )}\n {showSignUpButton && useCustomSignup && (\n <div className=\"forgot-password\">\n <span\n aria-hidden=\"true\"\n onClick={onSignup}\n style={{ cursor: 'pointer' }}\n >\n Sign up\n </span>\n </div>\n )}\n {showPoweredByImage ? <PoweredBy /> : null}\n </div>\n </Form>\n )}\n </Formik>\n ) : (\n <SignUpForm\n onSignUpSuccess={onLogin}\n onGetProfileDataSuccess={onGetProfileDataSuccess}\n onGetProfileDataError={onGetProfileDataError}\n logo={logo}\n />\n )}\n </div>\n </Box>\n </Modal>\n )\n}\n","// Theme colors\nexport const COLORS = {\n PRIMARY: '#212529',\n SECONDARY: '#666',\n BACKGROUND: '#fff',\n BORDER: 'white',\n INDICATOR: '#212529',\n}\n\n// Typography\nexport const TYPOGRAPHY = {\n FONT_FAMILY: 'Inter',\n FONT_WEIGHT: {\n SEMIBOLD: 600,\n BOLD: 700,\n },\n FONT_SIZE: {\n TAB: '16px',\n TITLE: '18px',\n },\n}\n\n// Modal dimensions\nexport const MODAL_DIMENSIONS = {\n WIDTH: {\n DESKTOP: 480,\n MOBILE: 345,\n },\n}\n\n// Tab configuration\nexport const TAB_STYLES = {\n BACKGROUND_COLOR: COLORS.BACKGROUND,\n MARGIN_BOTTOM: '30px',\n LABEL: {\n FONT_FAMILY: TYPOGRAPHY.FONT_FAMILY,\n FONT_WEIGHT: TYPOGRAPHY.FONT_WEIGHT.SEMIBOLD,\n FONT_SIZE: TYPOGRAPHY.FONT_SIZE.TAB,\n TEXT_TRANSFORM: 'none',\n COLOR: COLORS.SECONDARY,\n SELECTED_COLOR: COLORS.PRIMARY,\n },\n INDICATOR: {\n BACKGROUND_COLOR: COLORS.INDICATOR,\n },\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AxiosError } from 'axios'\nimport _get from 'lodash/get'\n\nimport { createPaymentPlan, handleFreeSuccess, handlePaymentSuccess } from '../../api'\n\ninterface Options {\n reviewData: any;\n isFreeTickets: boolean;\n paymentPlanIsAvailable: boolean;\n showPaymentPlanSection: boolean;\n handlePayment: any;\n setPaymentIsLoading: any;\n setError: any;\n orderData: any;\n eventId: any;\n isBrowser: boolean;\n onPaymentError: any;\n}\n\nexport const handlePaymentMiddleWare = async (\n error: any,\n data: object,\n {\n reviewData,\n isFreeTickets,\n paymentPlanIsAvailable,\n showPaymentPlanSection,\n handlePayment,\n setPaymentIsLoading,\n setError,\n orderData,\n eventId,\n isBrowser,\n onPaymentError,\n }: Options\n) => {\n try {\n if (error) {\n throw error\n }\n const {\n order_details: { order_hash },\n } = reviewData\n\n let paymentSuccessResponse\n\n if (isFreeTickets) {\n paymentSuccessResponse = await handleFreeSuccess(order_hash)\n } else if (paymentPlanIsAvailable && showPaymentPlanSection) {\n paymentSuccessResponse = await createPaymentPlan(\n order_hash,\n _get(data, 'paymentMethodId', '')\n )\n } else {\n paymentSuccessResponse = await handlePaymentSuccess(order_hash)\n }\n\n if (paymentSuccessResponse.status === 200) {\n handlePayment(paymentSuccessResponse)\n setPaymentIsLoading(false)\n\n // clear seat-map related data from localStorage\n localStorage.removeItem('reservationData')\n localStorage.removeItem(`reservationStart-${eventId}`)\n localStorage.removeItem('ownReservations')\n localStorage.removeItem('tierId')\n\n if (isBrowser) {\n (window as any)?.dataLayer?.push({\n event: 'Purchase',\n orderValue: orderData.total,\n orderCurrency: orderData.currency,\n orderId: orderData.id,\n })\n }\n }\n } catch (e) {\n setError(_get(e, 'response.data.message', null))\n setPaymentIsLoading(false)\n onPaymentError(\n ((e as Record<string, unknown>).response as AxiosError) || e,\n reviewData.event_details.slug\n )\n }\n}\n","import React from 'react'\n\nimport { createFixedFloatNormalizer, currencyNormalizerCreator } from '../../normalizers'\nimport { IPaymentPlanConfig } from '../../types/payment-plan-configuration'\nimport { Checkbox } from '../common'\n\ninterface PaymentPlanSectionProps {\n paymentPlanConfig: IPaymentPlanConfig;\n currency: string;\n paymentPlanUseSavedCard: boolean;\n setPaymentPlanUseSavedCard: (value: boolean) => void;\n}\n\nexport const PaymentPlanSection = (props: PaymentPlanSectionProps) => {\n const {\n paymentPlanConfig,\n currency,\n paymentPlanUseSavedCard,\n setPaymentPlanUseSavedCard,\n } = props\n\n return (\n <div className=\"payment_plan\">\n <h2 className=\"payment_plan_title\">Payment Plan Terms</h2>\n <div className=\"payment_plan_block\">\n <div className=\"payment_plan_text\">\n By clicking on the “Confirm Payment Plan” button, you are starting your payment\n plan of{' '}\n <span className=\"payment_plan_highlight\">\n {paymentPlanConfig.total_installments}\n </span>{' '}\n payments of{' '}\n <span className=\"payment_plan_highlight\">\n {currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(paymentPlanConfig.price_per_installment),\n currency\n )}\n </span>\n , which will be drawn from your account every {paymentPlanConfig.interval} days,\n with the first payment taken later today.\n </div>\n {paymentPlanConfig.has_admin_fee && (\n <div className=\"payment_plan_text\">\n This includes a non-refundable admin fee of{' '}\n <span className=\"payment_plan_highlight\">\n {currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(paymentPlanConfig.admin_fee),\n currency\n )}\n </span>{' '}\n per payment.\n </div>\n )}\n {paymentPlanConfig.requires_deposit && (\n <div className=\"payment_plan_text\">\n You will also be charged a single, non-refundable deposit of{' '}\n <span className=\"payment_plan_highlight\">\n {currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(paymentPlanConfig.deposit),\n currency\n )}\n </span>\n .\n </div>\n )}\n <div className=\"payment_plan_text payment_plan_note payment_plan_highlight\">\n NOTE: If today’s payment fails, your plan will not activate. Your tickets will\n not be issued until you complete your final payment.\n </div>\n {!paymentPlanConfig.non_refundable_type && (\n <div className=\"payment_plan_text\">\n If you do not complete your payments, your order will be canceled. Your{' '}\n <span className=\"payment_plan_highlight\">\n first payment of{' '}\n {currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(paymentPlanConfig.price_per_installment),\n currency\n )}\n </span>\n {paymentPlanConfig.has_admin_fee && (\n <>\n , plus the{' '}\n <span className=\"payment_plan_highlight\">\n non-refundable admin-fee of{' '}\n {currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(paymentPlanConfig.admin_fee),\n currency\n )}\n </span>\n </>\n )}{' '}\n will not be refunded.\n </div>\n )}\n {paymentPlanConfig.non_refundable_type === 'percent' && (\n <div className=\"payment_plan_text\">\n If you do not complete your payments, you will receive{' '}\n <span className=\"payment_plan_highlight\">\n {createFixedFloatNormalizer(0)(\n 100 - paymentPlanConfig.non_refundable_amount\n )}\n %\n </span>{' '}\n of your money back\n {paymentPlanConfig.requires_deposit && (\n <>\n , excluding your{' '}\n {currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(paymentPlanConfig.deposit),\n currency\n )}{' '}\n deposit\n </>\n )}\n .\n </div>\n )}\n {paymentPlanConfig.non_refundable_type === 'fixed' && (\n <div className=\"payment_plan_text\">\n If you do not complete your payments, you will receive all your money back\n {paymentPlanConfig.non_refundable_amount && (\n <>\n except for the non-refundable amount of{' '}\n {currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(paymentPlanConfig.non_refundable_amount),\n currency\n )}\n {paymentPlanConfig.requires_deposit && (\n <>\n , excluding your{' '}\n {currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(paymentPlanConfig.deposit),\n currency\n )}{' '}\n deposit\n </>\n )}\n </>\n )}\n .\n </div>\n )}\n {!!paymentPlanConfig.saved_card?.stripe_payment_method_id && (\n <>\n {paymentPlanUseSavedCard && (\n <div className=\"payment_plan_text\">\n {' '}\n Your payment will proceed with the card ending in ****{' '}\n <span className=\"payment_plan_highlight\">\n {'' + paymentPlanConfig.saved_card.last_4_digits}\n </span>\n </div>\n )}\n <div>\n <Checkbox\n label={<span className=\"payment_plan_toggle_label\">Use this card</span>}\n required={true}\n onChange={() => {\n setPaymentPlanUseSavedCard(!paymentPlanUseSavedCard)\n }}\n checked={paymentPlanUseSavedCard}\n />\n </div>\n </>\n )}\n </div>\n </div>\n )\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable max-len */\nimport './style.css'\n\nimport { ThemeOptions } from '@mui/material'\nimport Alert from '@mui/material/Alert'\nimport CircularProgress from '@mui/material/CircularProgress'\nimport Container from '@mui/material/Container'\nimport { createTheme, ThemeProvider } from '@mui/material/styles'\nimport { CSSProperties } from '@mui/styles'\nimport { Elements, PaymentElement, useElements, useStripe } from '@stripe/react-stripe-js'\nimport {\n loadStripe,\n StripeConstructorOptions,\n StripeElementsOptions,\n} from '@stripe/stripe-js'\nimport { StripePaymentElementOptions } from '@stripe/stripe-js'\nimport { AxiosError } from 'axios'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport _isEmpty from 'lodash/isEmpty'\nimport _map from 'lodash/map'\nimport { nanoid } from 'nanoid'\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport { getConditions, getPaymentData } from '../../api'\nimport { FEES_STYLES } from '../../constants'\nimport { usePixel } from '../../hooks/usePixel'\nimport { createFixedFloatNormalizer, currencyNormalizerCreator } from '../../normalizers'\nimport { IAddOn, IOrderData, IPaymentField } from '../../types'\nimport {\n IPaymentPlanConfig,\n IPaymentPlanConfigCard,\n} from '../../types/payment-plan-configuration'\nimport { CONFIGS, isBrowser } from '../../utils'\nimport { getQueryVariable } from '../../utils/getQueryVariable'\nimport { Checkbox, Loader } from '../common/index'\nimport TimerWidget from '../timerWidget'\nimport { handlePaymentMiddleWare } from './handlePayment'\nimport { PaymentPlanSection } from './PaymentPlanSection'\n\n// Wrapper component to access Stripe hooks inside Elements context\nconst StripeWrapper = ({\n options,\n onStripeReady,\n}: {\n options?: StripePaymentElementOptions;\n onStripeReady: (stripe: any, elements: any) => void;\n}) => {\n const stripe = useStripe()\n const elements = useElements()\n\n useEffect(() => {\n if (stripe && elements) {\n onStripeReady(stripe, elements)\n }\n }, [stripe, elements, onStripeReady])\n\n return <PaymentElement options={options} />\n}\n\nexport interface IPaymentPage {\n paymentFields: IPaymentField[];\n handlePayment: any;\n checkoutData: any;\n formTitle?: string;\n errorText?: string;\n onErrorClose?: () => void;\n onGetPaymentDataSuccess: (value: any) => void;\n onGetPaymentDataError: (value: AxiosError) => void;\n onPaymentError: (value: AxiosError, slug?: string) => void;\n themeOptions?: ThemeOptions & {\n input?: CSSProperties;\n checkbox?: CSSProperties;\n };\n elementsOptions?: StripeElementsOptions;\n paymentElementOptions?: StripePaymentElementOptions;\n onCountdownFinish?: () => void;\n enableTimer?: boolean;\n paymentInfoLabel?: string;\n orderInfoLabel?: string;\n displayPaymentButton?: boolean;\n hidePaymentForm?: boolean;\n hideFieldsBlock?: boolean;\n isSinglePageCheckout?: boolean;\n stripePublishableKey?: string;\n stripeAccountId?: string;\n onStripeReady?: (stripe: any, elements: any) => void;\n enablePaymentPlan?: boolean;\n}\n\nconst initialPaymentPlanConfiguration: IPaymentPlanConfig = {\n requires_deposit: false,\n deposit: 0,\n interval: 0,\n non_refundable_amount: 0,\n non_refundable_type: null,\n has_admin_fee: false,\n admin_fee: 0,\n total_installments: 0,\n price_per_installment: 0,\n stripe_setup_intent_secret: '',\n total: 0,\n saved_card: {\n last_4_digits: null,\n stripe_payment_method_id: null,\n } as IPaymentPlanConfigCard,\n}\n\nconst initialOrderValues: IOrderData = {\n id: '',\n product_name: '',\n ticketType: '',\n quantity: '',\n price: '',\n total: '',\n currency: 'USD',\n guest_count: '',\n pay_now: '',\n add_ons: [] as IAddOn[],\n cost: '',\n}\n\nconst initialReviewValues = {\n order_details: {\n id: '',\n order_hash: '',\n },\n payment_method: {\n stripe_client_secret: '',\n stripe_payment_plan_enabled: false,\n stripe_payment_plan_configuration: {} as any,\n stripe_publishable_key: '',\n id: '',\n name: '',\n stripeConnectedAccount: '',\n },\n billing_info: {},\n event_details: {\n flagSeatMapAllowed: false,\n slug: '',\n },\n}\n\nexport const PaymentContainer = ({\n paymentFields = [],\n handlePayment,\n formTitle = 'Get Your Tickets',\n errorText,\n checkoutData,\n onErrorClose = _identity,\n onGetPaymentDataSuccess = _identity,\n onGetPaymentDataError = _identity,\n onPaymentError = _identity,\n themeOptions,\n elementsOptions,\n paymentElementOptions,\n onCountdownFinish = _identity,\n enableTimer = false,\n orderInfoLabel = 'Order Review',\n paymentInfoLabel = 'Order Confirmation',\n displayPaymentButton = true,\n hidePaymentForm = false,\n hideFieldsBlock = false,\n isSinglePageCheckout = false,\n stripePublishableKey,\n stripeAccountId,\n onStripeReady = _identity,\n enablePaymentPlan = true,\n}: IPaymentPage) => {\n const [reviewData, setReviewData] = useState(initialReviewValues)\n const [orderData, setOrderData] = useState(initialOrderValues)\n const [error, setError] = useState(null)\n const [paymentIsLoading, setPaymentIsLoading] = useState(false)\n const [paymentDataIsLoading, setPaymentDataIsLoading] = useState(true)\n const [conditions, setConditions] = useState<{ id: string, text: string }[]>([])\n const [currency, setCurrency] = useState('')\n const [showPaymentPlanSection, setShowPaymentPlanSection] = useState(false)\n\n const [paymentPlanIsAvailable, setPaymentPlanIsAvailable] = useState(false)\n const [paymentPlanConfig, setPaymentPlanConfig] = useState(\n initialPaymentPlanConfiguration\n )\n const [paymentPlanUseSavedCard, setPaymentPlanUseSavedCard] = useState(true)\n\n const showFormTitle = Boolean(formTitle)\n const showErrorText = Boolean(errorText)\n\n const eventId =\n getQueryVariable('event_id') || _get(reviewData, 'cart[0].product_id') || ''\n const { hash, total } = checkoutData\n const isFreeTickets = useMemo(\n () => (!Number(total) && !Number(orderData.total)) || !Number(orderData.pay_now),\n [total, orderData]\n )\n\n const pageUrl = isBrowser ? window.location.href.split('?')[0] : ''\n usePixel(eventId, { page: 'review', pageUrl })\n\n console.log({ conditions })\n\n useEffect(() => {\n const fetchPaymentData = async () => {\n try {\n const paymentDataResponse = await getPaymentData(hash)\n if (paymentDataResponse.success) {\n const attributes = paymentDataResponse?.data?.attributes\n setReviewData(attributes)\n const { cart, order_details } = attributes\n const {\n tickets: [ticket],\n } = order_details\n\n const orderDataArray = _map(order_details.tickets, item => ({\n product_name: cart[0]?.product_name,\n ticketType: item?.name,\n quantity: item?.guest_count,\n price: item?.price,\n cost: item?.cost,\n id: item.id,\n count: item?.quantity,\n }))\n\n const orderData = {\n id: order_details?.id,\n product_name: cart[0]?.product_name,\n ticketType: ticket?.name,\n quantity: ticket?.quantity,\n price: ticket?.price,\n total: order_details?.total,\n currency: order_details?.currency,\n add_ons: order_details?.add_ons || [],\n pay_now: order_details?.pay_now || '',\n guest_count: order_details?.guest_count || '',\n debt: order_details?.debt || null,\n tableTypes: orderDataArray,\n cost: ticket?.cost,\n subtotal: order_details?.subtotal,\n fees: order_details?.fees,\n }\n setOrderData(orderData)\n setCurrency(order_details?.currency)\n onGetPaymentDataSuccess(paymentDataResponse.data)\n }\n } catch (e) {\n setError(_get(e, 'response.data.message', null))\n onGetPaymentDataError((e as Record<string, unknown>).response as AxiosError)\n } finally {\n setPaymentDataIsLoading(false)\n }\n }\n\n if (isSinglePageCheckout) {\n if (!orderData?.total) {\n setOrderData(current => ({ ...current, pay_now: 1, total: 1 }))\n setPaymentDataIsLoading(false)\n }\n } else {\n fetchPaymentData()\n }\n }, [\n orderData,\n hash,\n isSinglePageCheckout,\n onGetPaymentDataError,\n onGetPaymentDataSuccess,\n ])\n\n //just once\n useEffect(() => {\n // fetch conditions data\n const fetchConditions = async () => {\n if (eventId) {\n const conditionsResponse = await getConditions(eventId)\n const conditionsInfo = conditionsResponse.data.attributes\n setConditions(\n conditionsInfo\n ? conditionsInfo.map((item: { text: any }) => ({\n id: nanoid(),\n text: item.text,\n checked: false,\n }))\n : []\n )\n }\n }\n fetchConditions()\n }, [eventId])\n\n const showPaymentForm = () => {\n if (hidePaymentForm) {\n return false\n }\n\n let showPaymentForm = !isFreeTickets\n\n if (\n paymentPlanIsAvailable &&\n showPaymentPlanSection &&\n !!paymentPlanConfig.saved_card?.stripe_payment_method_id\n ) {\n showPaymentForm = !paymentPlanUseSavedCard\n }\n\n return showPaymentForm\n }\n\n const getPublishableKey = () =>\n stripePublishableKey || _get(reviewData, 'payment_method.stripe_publishable_key')\n\n const getStripePromise = useCallback(() => {\n const stripePublishableKey = getPublishableKey()\n const stripeAccount =\n stripeAccountId || _get(reviewData, 'payment_method.stripe_connected_account')\n\n const options: StripeConstructorOptions = {}\n\n if (stripeAccount) {\n options.stripeAccount = stripeAccount\n }\n\n return loadStripe(stripePublishableKey, options)\n }, [reviewData, stripePublishableKey])\n\n const themeMui = createTheme(themeOptions)\n const hasTableTypes = Boolean(Number(orderData.guest_count))\n const paymentFieldsData = hasTableTypes\n ? [\n {\n label: 'Event',\n id: 'product_name',\n },\n {\n label: '',\n id: 'tableTypes',\n },\n {\n label: 'Add-ons',\n id: 'add_ons',\n },\n {\n label: 'Total (incl. fees, card processing and taxes)',\n id: 'total',\n normalizer: (value: string, currency: string) =>\n currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(parseFloat(value)),\n currency\n ),\n },\n {\n label: 'Pay Now',\n id: 'pay_now',\n normalizer: (value: string, currency: string) =>\n currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(parseFloat(value)),\n currency\n ),\n },\n {\n label: 'Pay On Check-in',\n id: 'debt',\n normalizer: (value: string, currency: string) =>\n currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(parseFloat(value)),\n currency\n ),\n },\n ]\n : paymentFields\n const isTable = orderData?.guest_count\n\n useEffect(() => {\n const paymentMethod = reviewData.payment_method || {}\n console.log({\n paymentMethod,\n enablePaymentPlan,\n })\n const paymentPlanAvailable =\n paymentMethod.stripe_payment_plan_enabled && enablePaymentPlan\n setPaymentPlanIsAvailable(paymentPlanAvailable)\n\n if (paymentPlanAvailable) {\n const paymentPlanConfig =\n paymentMethod.stripe_payment_plan_configuration || initialPaymentPlanConfiguration\n setPaymentPlanConfig(paymentPlanConfig)\n setPaymentPlanUseSavedCard(!!paymentPlanConfig.saved_card?.stripe_payment_method_id)\n if (isBrowser) {\n const sessionData = window.localStorage.getItem('paymentConfiguration')\n const session = sessionData ? JSON.parse(sessionData) : {}\n if (!!session && session?.orderId == reviewData.order_details?.id) {\n setPaymentPlanUseSavedCard(session.paymentPlanUseSavedCard ?? false)\n setShowPaymentPlanSection(session.showPaymentPlanSection ?? false)\n }\n }\n }\n }, [enablePaymentPlan, reviewData])\n\n useEffect(() => {\n if (isBrowser && !!orderData?.id) {\n window.localStorage.setItem(\n 'paymentConfiguration',\n JSON.stringify({\n paymentPlanUseSavedCard,\n showPaymentPlanSection,\n orderId: orderData?.id,\n })\n )\n }\n }, [showPaymentPlanSection, paymentPlanUseSavedCard, orderData?.id])\n\n return (\n <ThemeProvider theme={themeMui}>\n <div\n className={`payment_page ${isSinglePageCheckout ? 'payment_page_single' : ''}`}\n >\n {enableTimer && (\n <TimerWidget\n expires_at={_get(reviewData, 'expires_at', 0)}\n buyLoading={paymentIsLoading}\n onCountdownFinish={onCountdownFinish}\n />\n )}\n {isSinglePageCheckout\n ? null\n : error && (\n <Alert severity=\"error\" onClose={onErrorClose} variant=\"filled\">\n {error}\n </Alert>\n )}\n {paymentDataIsLoading && <Loader />}\n {!paymentDataIsLoading && (\n <Container maxWidth=\"md\">\n {showFormTitle && <h1>{isTable ? 'Get Your Tables' : formTitle}</h1>}\n <div className=\"order_info_text\">{orderInfoLabel}</div>\n {!hideFieldsBlock && (\n <div\n className=\"order_info_section\"\n style={{ display: hasTableTypes ? 'block' : 'grid' }}\n >\n {_map(paymentFieldsData, field => {\n const { id, label, className = '', normalizer = _identity } = field\n let value = orderData[id as keyof IOrderData] || ''\n let component = null\n\n if (field.id === 'add_ons' && _isEmpty(value)) {\n return false\n }\n\n if (\n field.id === 'total' &&\n paymentPlanIsAvailable &&\n showPaymentPlanSection\n ) {\n value = '' + paymentPlanConfig.total\n }\n\n if (field.id === 'tableTypes') {\n const valueArray = value as Array<any>\n\n component = (\n <div\n key={id}\n className=\"order_info_block\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n {_map(valueArray, tableTypeItem => (\n <div\n key={tableTypeItem.id}\n style={{\n display: 'grid',\n gridTemplateColumns: '33% 33% 33%',\n gridColumnGap: '10%',\n }}\n >\n <div className=\"order_info_block\">\n <div className=\"order_info_title\">Table Type</div>\n <div className={`${className} order_info_text`}>\n {tableTypeItem.ticketType}\n </div>\n </div>\n <div className=\"order_info_block\">\n <div className=\"order_info_title\">Number of Tables</div>\n <div className={`${className} order_info_text`}>\n {tableTypeItem.count}\n </div>\n </div>\n <div className=\"order_info_block\">\n <div className=\"order_info_title\">Guest Count</div>\n <div className={`${className} order_info_text`}>\n {tableTypeItem.quantity}\n </div>\n </div>\n </div>\n ))}\n </div>\n )\n }\n\n return (\n component || (\n <div key={id} className={`order_info_block ${className}`}>\n <div className=\"order_info_title\">{label}</div>\n <div className={`${className} order_info_text`}>\n {typeof value === 'string' || typeof value === 'number'\n ? normalizer(value, currency, orderData)\n : _map(value, item => (\n <div>\n <div key={item.id} className=\"add-on-container\">\n <span>{item.quantity}</span>\n <span className=\"add-on-x\">{' x '}</span>\n <span>\n {item.groupName ? item.groupName + ' - ' : ''}\n </span>\n <span>{item.name}</span>\n <span>{' - '}</span>\n <span>\n {CONFIGS.FEES_STYLE === FEES_STYLES.TRADITIONAL &&\n currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(\n parseFloat(item.price)\n ),\n currency\n ) + ' (incl. fees)'}\n {CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH &&\n currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(\n parseFloat(item.cost)\n ),\n currency\n )}\n {CONFIGS.FEES_STYLE === FEES_STYLES.FINAL_WITH_BREAKDOWN &&\n currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(\n parseFloat(item.price)\n ),\n currency\n )}\n </span>\n <span className=\"add-on-each\">{' each'}</span>\n </div>\n {CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH && (\n <p className=\"fees\">\n {`(${currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(\n parseFloat(String(item.price))\n ),\n currency\n )} with fees)`}\n </p>\n )}\n {CONFIGS.FEES_STYLE === FEES_STYLES.FINAL_WITH_BREAKDOWN && parseFloat(item.price) - parseFloat(item.cost) > 0 && (\n <p className=\"fees\">\n {`(${currencyNormalizerCreator(createFixedFloatNormalizer(2)(parseFloat(item.cost)), currency)} + ${currencyNormalizerCreator(createFixedFloatNormalizer(2)(parseFloat(item.price) - parseFloat(item.cost)), currency)} fee)`}\n </p>\n )}\n </div>\n ))}\n </div>\n </div>\n )\n )\n })}\n </div>\n )}\n {!isFreeTickets && paymentPlanIsAvailable && (\n <div className=\"payment_toggle\">\n <Checkbox\n label={\n <span className=\"payment_plan_toggle_label\">\n Click to checkout using Payment Plan\n </span>\n }\n required={true}\n onChange={() => {\n setShowPaymentPlanSection(!showPaymentPlanSection)\n }}\n checked={showPaymentPlanSection}\n />\n </div>\n )}\n {showPaymentPlanSection && (\n <PaymentPlanSection\n paymentPlanConfig={paymentPlanConfig}\n currency={currency}\n paymentPlanUseSavedCard={paymentPlanUseSavedCard}\n setPaymentPlanUseSavedCard={setPaymentPlanUseSavedCard}\n />\n )}\n {showPaymentForm() && !!getPublishableKey() ? (\n <div className=\"payment_info\">\n <div className=\"payment_info_label\">{paymentInfoLabel}</div>\n {showErrorText && <p className=\"payment_info__error\">{errorText}</p>}\n <div>\n {elementsOptions && (\n <Elements stripe={getStripePromise()} options={elementsOptions}>\n <StripeWrapper\n onStripeReady={onStripeReady}\n options={paymentElementOptions}\n />\n </Elements>\n )}\n </div>\n </div>\n ) : displayPaymentButton ? (\n <div\n className={`payment_button ${\n paymentIsLoading ? 'disabled-payment-button' : ''\n }`}\n >\n <button\n disabled={paymentIsLoading}\n type=\"button\"\n onClick={() => {\n setPaymentIsLoading(true)\n\n let data\n\n if (\n paymentPlanIsAvailable &&\n showPaymentPlanSection &&\n paymentPlanUseSavedCard\n ) {\n data = {\n paymentMethodId:\n paymentPlanConfig.saved_card?.stripe_payment_method_id,\n }\n }\n\n handlePaymentMiddleWare(\n data,\n {},\n {\n reviewData,\n isFreeTickets,\n paymentPlanIsAvailable,\n showPaymentPlanSection,\n handlePayment,\n setPaymentIsLoading,\n setError,\n orderData,\n eventId,\n isBrowser,\n onPaymentError,\n }\n )\n }}\n >\n {paymentIsLoading ? (\n <CircularProgress size={26} />\n ) : isFreeTickets ? (\n 'Complete Registration'\n ) : (\n 'Confirm Payment Plan'\n )}\n </button>\n </div>\n ) : null}\n </Container>\n )}\n </div>\n </ThemeProvider>\n )\n}\n","import './style.css'\n\nimport { Box, CircularProgress, Modal } from '@mui/material'\nimport axios, { AxiosError } from 'axios'\nimport { Field, Form, Formik } from 'formik'\nimport _identity from 'lodash/identity'\nimport React, { FC, useState } from 'react'\nimport * as Yup from 'yup'\n\nimport { register } from '../../api'\nimport { CONFIGS } from '../../utils'\nimport { CustomField } from '../common/CustomField'\nimport { PoweredBy } from '../common/PoweredBy'\n\ninterface ISignupProps {\n onClose: () => void;\n onLogin: () => void;\n onRegisterSuccess: (res: any) => void;\n onRegisterError: (e: AxiosError, email: string) => void;\n showPoweredByImage?: boolean;\n}\n\ninterface ValuesTypes {\n firstName: string;\n lastName: string;\n email: string;\n password: string;\n confirmPassword: string;\n}\n\nconst style: React.CSSProperties = {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n minWidth: 480,\n backgroundColor: '#fff',\n border: '1px solid white',\n outline: 'none',\n padding: '14px',\n}\n\nconst SignupSchema = Yup.object().shape({\n firstName: Yup.string().required('Required'),\n lastName: Yup.string().required('Required'),\n email: Yup.string().email('Invalid email').required('Required'),\n password: Yup.string()\n .min(8, 'Password must have 8+ characters')\n .required('Required')\n .matches(\n new RegExp('^(?=.*[@$!%*#?&])'),\n 'Password must contain at least one special character'\n ),\n confirmPassword: Yup.string()\n .required('Required')\n .oneOf([Yup.ref('password'), null], 'Passwords must match'),\n})\n\nexport const SignupModal: FC<ISignupProps> = ({\n onClose = _identity,\n onLogin = _identity,\n onRegisterSuccess = _identity,\n onRegisterError = _identity,\n showPoweredByImage = false,\n}) => {\n const [loading, setLoading] = useState(false)\n\n const onSignup = async (values: ValuesTypes) => {\n try {\n setLoading(true)\n const formData = new FormData()\n formData.set('first_name', values.firstName)\n formData.set('last_name', values.lastName)\n formData.set('email', values.email)\n formData.set('password', values.password)\n formData.set('password_confirmation', values.confirmPassword)\n formData.append(\n 'client_id',\n CONFIGS.CLIENT_ID || 'e9d8f8922797b4621e562255afe90dbf'\n )\n formData.append(\n 'client_secret',\n CONFIGS.CLIENT_SECRET || 'b89c191eff22fdcf84ac9bfd88d005355a151ec2c83b26b9'\n )\n\n const res = await register(formData)\n\n onRegisterSuccess(res)\n onClose()\n } catch (e) {\n if (axios.isAxiosError(e)) {\n onRegisterError(e, values.email)\n }\n } finally {\n setLoading(false)\n }\n }\n\n const _onClose = loading ? _identity : onClose\n\n return (\n <Modal\n open={true}\n onClose={_onClose}\n aria-labelledby=\"modal-modal-title\"\n aria-describedby=\"modal-modal-description\"\n className=\"signup-modal\"\n >\n <Box style={style}>\n <div>\n <Formik\n initialValues={{\n firstName: '',\n lastName: '',\n email: '',\n password: '',\n confirmPassword: '',\n }}\n validationSchema={SignupSchema}\n onSubmit={onSignup}\n >\n {({ isValid, dirty, handleSubmit }) => (\n <Form onSubmit={handleSubmit}>\n <div className=\"signup-container\">\n <div className=\"title\">Create an Account</div>\n <div className=\"signup-container__twoFields\">\n <div className=\"is-half\">\n <Field\n name=\"firstName\"\n label=\"First Name\"\n component={CustomField}\n />\n </div>\n <div className=\"is-half\">\n <Field name=\"lastName\" label=\"Last Name\" component={CustomField} />\n </div>\n </div>\n <div className=\"signup-container__singleField\">\n <div className=\"\">\n <Field name=\"email\" label=\"Email\" component={CustomField} />\n </div>\n </div>\n <div className=\"signup-container__twoFields\">\n <div className=\"is-half\">\n <Field\n name=\"password\"\n label=\"Password\"\n type=\"password\"\n component={CustomField}\n />\n </div>\n <div className=\"is-half\">\n <Field\n name=\"confirmPassword\"\n label=\"Confirm Password\"\n type=\"password\"\n component={CustomField}\n />\n </div>\n </div>\n </div>\n <div className=\"signup-action-button\">\n <button type=\"submit\" disabled={!(isValid && dirty)}>\n {loading ? <CircularProgress size=\"22px\" /> : 'Submit'}\n </button>\n </div>\n <div className=\"login\">\n <span onClick={onLogin}>Login</span>\n </div>\n {showPoweredByImage ? <PoweredBy /> : null}\n </Form>\n )}\n </Formik>\n </div>\n </Box>\n </Modal>\n )\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport './style.css'\n\nimport { CircularProgress, ThemeOptions } from '@mui/material'\nimport Backdrop from '@mui/material/Backdrop'\nimport Button from '@mui/material/Button'\nimport { createTheme, ThemeProvider } from '@mui/material/styles'\nimport { CSSProperties } from '@mui/styles'\nimport { Stripe, StripeElementsOptions } from '@stripe/stripe-js'\nimport axios, { AxiosError } from 'axios'\nimport { Field, Form, Formik, FormikHelpers, FormikProps, FormikValues } from 'formik'\nimport _find from 'lodash/find'\nimport _forEach from 'lodash/forEach'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport _isEmpty from 'lodash/isEmpty'\nimport _isEqual from 'lodash/isEqual'\nimport _map from 'lodash/map'\nimport { nanoid } from 'nanoid'\nimport React, { FC, useCallback, useEffect, useRef, useState } from 'react'\n\nimport {\n AttributesConfig,\n checkEmailExists,\n getCart,\n getCheckoutPageConfigs,\n getCountries,\n getPaymentData,\n getProfileData,\n getStates,\n postOnCheckout,\n setCustomHeader,\n} from '../../api'\nimport { updateCheckout } from '../../api/checkout'\nimport { withCustomFields } from '../../hoc'\nimport { usePixel } from '../../hooks/usePixel'\nimport { IBillingInfoData } from '../../types'\nimport { ICheckoutResponseData } from '../../types/api/checkout'\nimport {\n createCheckoutDataBodyWithDefaultHolder,\n deleteCookieByName,\n getCookieByName,\n isBrowser,\n setLoggedUserData,\n} from '../../utils'\nimport { ErrorFocus } from '../../utils/formikErrorFocus'\nimport { emailRegex } from '../../validators'\nimport { AddonsContainter, IAddonContainterProps } from '../addonsContainer'\nimport SimpleAddonsContainer from '../addonsContainer/SimpleAddonsContainer'\nimport SnackbarAlert from '../common/SnackbarAlert'\nimport { ForgotPasswordModal } from '../forgotPasswordModal'\nimport { VerificationPendingModal } from '../idVerificationContainer/VerificationPendingModal'\nimport { LoginModal } from '../loginModal'\nimport { IPaymentPage, PaymentContainer } from '../paymentContainer'\nimport { SignupModal } from '../signupModal'\nimport TimerWidget from '../timerWidget'\nimport { usePaymentRedirect, useStripePayment } from './hooks'\nimport {\n assingUniqueIds,\n createCheckoutDataBody,\n filterBillingInfoFields,\n getFieldComponent,\n getFieldLabel,\n getInitialValues,\n getValidateFunctions,\n ICheckoutBody,\n renderComponentWithProps,\n} from './utils'\n\nexport interface IBillingInfoPage {\n data?: IBillingInfoData[];\n ticketHoldersFields?: IBillingInfoData;\n handleSubmit?: (\n values: FormikValues,\n formikHelpers: FormikHelpers<FormikValues>,\n eventId: any,\n res: any,\n checkoutUpdateResponse?: any,\n paymentResponse?: any\n ) => void;\n onRegisterSuccess?: (value: any) => void;\n onRegisterError?: (e: AxiosError, email: string) => void;\n onSubmitError?: (e: AxiosError) => void;\n onGetCartSuccess?: (res: any) => void;\n onGetCartError?: (e: AxiosError) => void;\n onGetCountriesSuccess?: (res: any) => void;\n onGetCountriesError?: (e: AxiosError) => void;\n onGetStatesSuccess?: (res: any) => void;\n onGetStatesError?: (e: AxiosError) => void;\n onGetProfileDataSuccess?: (res: any) => void;\n onGetProfileDataError?: (e: AxiosError) => void;\n onGetCheckoutConfigsSuccess?: (res: any) => void;\n onGetCheckoutConfigsError?: (e: AxiosError) => void;\n onLogin?: () => void;\n onLoginSuccess?: () => void;\n onErrorClose?: () => void;\n onCheckoutUpdateSuccess?: (res: any) => void;\n onCheckoutUpdateError?: (e: AxiosError) => void;\n initialValues?: FormikValues;\n buttonName?: string;\n freeOrderButtonName?: string;\n theme?: 'light' | 'dark';\n isLoggedIn?: boolean;\n accountInfoTitle?: string | JSX.Element;\n hideLogo?: boolean;\n themeOptions?: ThemeOptions & {\n input?: CSSProperties;\n checkbox?: CSSProperties;\n };\n hideErrorsAlertSection?: boolean;\n onSkipBillingPage: (data: any) => void;\n skipPage?: boolean;\n canSkipHolderNames?: boolean;\n shouldFetchCountries?: boolean;\n onForgotPasswordSuccess?: (res: any) => void;\n onForgotPasswordError?: (e: AxiosError) => void;\n onCountdownFinish?: () => void;\n enableTimer?: boolean;\n logo?: string;\n showForgotPasswordButton?: boolean;\n showSignUpButton?: boolean;\n brandOptIn?: boolean;\n showPoweredByImage?: boolean;\n isCountryCodeEditable?: boolean;\n customFieldsOrderKeys?: string[];\n customFieldsTicketHolderKeys?: string[];\n onPendingVerification?: () => void;\n includeAddons?: boolean;\n addonsProps?: IAddonContainterProps;\n addOnDataWithCustomFields?: any;\n isSinglePageCheckout?: boolean;\n paymentProps?: Partial<IPaymentPage>;\n paymentSectionAddon?: React.ReactNode;\n}\n\nconst LogicRunner: FC<{\n brandOptIn?: boolean;\n values: any;\n errors: any;\n setStates: React.Dispatch<any>;\n setFieldValue: any;\n setValues: any;\n setUserValues: any;\n onGetStatesSuccess: any;\n onGetStatesError: any;\n shouldFetchCountries: boolean;\n}> = ({\n values,\n setStates,\n setFieldValue,\n setValues,\n setUserValues,\n onGetStatesSuccess,\n onGetStatesError,\n shouldFetchCountries,\n brandOptIn,\n}) => {\n const prevCountry = useRef(values.country)\n const prevBuyerData = useRef({\n firstName: '',\n lastName: '',\n email: '',\n phone: '',\n })\n const hasLoadedUserData = useRef(false)\n useEffect(() => {\n const fetchStates = async () => {\n try {\n const res = await getStates(values.country)\n const mappedStates = _map(res.data, (item, key) => ({\n label: item,\n value: key,\n }))\n setStates(mappedStates)\n if (prevCountry.current !== values.country) {\n const stateExists = mappedStates.find(\n state => state.value === values.state\n )?.value\n setFieldValue('state', stateExists ?? mappedStates[0]?.value ?? '')\n prevCountry.current = values.country\n }\n onGetStatesSuccess(res.data)\n } catch (e) {\n if (axios.isAxiosError(e)) {\n onGetStatesError(e)\n }\n }\n }\n shouldFetchCountries && fetchStates()\n }, [values.country, setStates, setFieldValue])\n\n // Auto-fill first holder with buyer data\n useEffect(() => {\n const buyerFirstName = values.firstName || ''\n const buyerLastName = values.lastName || ''\n const buyerEmail = values.email || ''\n const buyerPhone = values.phone || ''\n\n // Check if any buyer data has changed\n const firstNameChanged = prevBuyerData.current.firstName !== buyerFirstName\n const lastNameChanged = prevBuyerData.current.lastName !== buyerLastName\n const emailChanged = prevBuyerData.current.email !== buyerEmail\n const phoneChanged = prevBuyerData.current.phone !== buyerPhone\n\n // Update holder fields individually based on what changed\n if (firstNameChanged) {\n setFieldValue('holderFirstName-0', buyerFirstName, false)\n prevBuyerData.current.firstName = buyerFirstName\n }\n\n if (lastNameChanged) {\n setFieldValue('holderLastName-0', buyerLastName, false)\n prevBuyerData.current.lastName = buyerLastName\n }\n\n if (emailChanged) {\n setFieldValue('holderEmail-0', buyerEmail, false)\n prevBuyerData.current.email = buyerEmail\n }\n\n if (phoneChanged) {\n setFieldValue('holderPhone-0', buyerPhone, false)\n prevBuyerData.current.phone = buyerPhone\n }\n }, [values.firstName, values.lastName, values.email, values.phone, setFieldValue])\n\n const userDataEncoded = isBrowser ? window.localStorage.getItem('user_data') : ''\n useEffect(() => {\n // set user data from local storage only on initial load\n const getStoredUserData = () => {\n if (isBrowser && userDataEncoded && !hasLoadedUserData.current) {\n try {\n const parsedData = JSON.parse(userDataEncoded)\n const mappedValues = {\n firstName: parsedData?.first_name || parsedData?.firstName || '',\n lastName: parsedData?.last_name || parsedData?.lastName || '',\n email: parsedData?.email || '',\n phone: parsedData?.phone || '',\n confirmEmail: parsedData?.email || '',\n state: parsedData?.state || '',\n street_address: parsedData?.street_address || '',\n country: parsedData?.country || '1',\n zip: parsedData?.zip || '',\n brand_opt_in: brandOptIn ? brandOptIn : parsedData?.brand_opt_in || false,\n city: parsedData?.city || '',\n confirmPassword: '',\n password: '',\n 'holderFirstName-0': parsedData?.first_name || parsedData?.firstName || '',\n 'holderLastName-0': parsedData?.last_name || parsedData?.lastName || '',\n 'holderEmail-0': parsedData?.email || '',\n 'holderPhone-0': parsedData?.phone || '',\n }\n\n const extraDataJSON = window.localStorage.getItem('extraData')\n const extraData = extraDataJSON ? JSON.parse(extraDataJSON) : null\n\n setValues({ ...values, ...mappedValues, ...(extraData ?? {}) })\n setUserValues(mappedValues)\n hasLoadedUserData.current = true\n } catch (e) {}\n }\n }\n getStoredUserData()\n // Only run on mount or when userDataEncoded first becomes available\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n return null\n}\n\n// Component to check if email exists\n/**\n * A utility component that checks if an email address already exists in the system.\n *\n * Performs debounced validation and existence checking for user email addresses.\n * Only checks when both email and confirmEmail match, are valid, and user is not logged in.\n *\n * @param email - The primary email address to check\n * @param confirmEmail - The confirmation email address (must match email)\n * @param isLoggedIn - Whether the user is currently logged in\n * @param setEmailExists - Callback function to update the email existence state\n *\n * @remarks\n * - Uses a 500ms debounce to avoid excessive API calls\n * - Validates email format using regex before checking existence\n * - Automatically returns false if user is logged in\n * - Returns null as it's a logic-only component with no UI\n */\nconst EmailExistenceChecker: FC<{\n email: string;\n confirmEmail: string;\n isLoggedIn: boolean;\n setEmailExists: (exists: boolean) => void;\n}> = ({ email, confirmEmail, isLoggedIn, setEmailExists }) => {\n useEffect(() => {\n const checkEmail = async () => {\n // Don't check if user is logged in\n if (isLoggedIn) {\n setEmailExists(false)\n return\n }\n\n // Only check if both emails exist, match, and are valid\n if (!email || !confirmEmail || email !== confirmEmail || !emailRegex.test(email)) {\n setEmailExists(false)\n return\n }\n\n // Check if email exists\n try {\n const result = await checkEmailExists(email)\n setEmailExists(result.exists)\n } catch {\n setEmailExists(false)\n }\n }\n\n // Debounce the check\n const timeoutId = setTimeout(() => {\n checkEmail()\n }, 800)\n\n return () => clearTimeout(timeoutId)\n }, [email, confirmEmail, isLoggedIn, setEmailExists])\n\n return null\n}\n\nconst BillingInfoContainer = React.memo(\n ({\n data = [],\n ticketHoldersFields = {\n id: 1,\n fields: [],\n },\n initialValues = {},\n buttonName = 'Submit',\n freeOrderButtonName = 'Complete Registration',\n handleSubmit = _identity,\n theme = 'light',\n onRegisterSuccess = _identity,\n onRegisterError = _identity,\n onSubmitError = _identity,\n onGetCartSuccess = _identity,\n onGetCartError = _identity,\n onGetCountriesSuccess = _identity,\n onGetCountriesError = _identity,\n onGetStatesSuccess = _identity,\n onGetStatesError = _identity,\n onGetProfileDataSuccess = _identity,\n onGetProfileDataError = _identity,\n onLogin,\n onLoginSuccess = _identity,\n onCheckoutUpdateSuccess = _identity,\n onCheckoutUpdateError = _identity,\n isLoggedIn: pIsLoggedIn = false,\n accountInfoTitle = '',\n hideLogo,\n themeOptions,\n onErrorClose = _identity,\n hideErrorsAlertSection = false,\n onSkipBillingPage = _identity,\n skipPage = false,\n canSkipHolderNames = false,\n onForgotPasswordSuccess = _identity,\n onForgotPasswordError = _identity,\n shouldFetchCountries = true,\n onCountdownFinish = _identity,\n enableTimer = false,\n logo,\n showForgotPasswordButton = true,\n showSignUpButton = false,\n brandOptIn = false,\n showPoweredByImage = false,\n customFieldsOrderKeys,\n customFieldsTicketHolderKeys,\n isCountryCodeEditable = true,\n onPendingVerification = _identity,\n onGetCheckoutConfigsSuccess = _identity,\n onGetCheckoutConfigsError = _identity,\n includeAddons = false,\n addonsProps,\n addOnDataWithCustomFields,\n isSinglePageCheckout = false,\n paymentProps = {},\n paymentSectionAddon,\n }: IBillingInfoPage) => {\n const [extraData, setExtraData] = useState(null)\n const [isConfigLoading, setIsConfigLoading] = useState(true)\n const [configs, setConfigs] = useState<null | AttributesConfig>(null)\n const isNewUser = false\n const themeMui = createTheme(themeOptions)\n const elementsRef = useRef<any>(null)\n const stripeRef = useRef<Stripe | null>(null)\n\n useEffect(() => {\n if (isBrowser) {\n const extraData = window.localStorage.getItem('extraData')\n if (extraData) {\n setExtraData(JSON.parse(extraData))\n }\n }\n getCheckoutPageConfigs()\n .then(data => {\n if (data?.data?.attributes) {\n setConfigs(data.data.attributes)\n setIsConfigLoading(false)\n }\n onGetCheckoutConfigsSuccess(data)\n })\n .catch(e => {\n setIsConfigLoading(false)\n onGetCheckoutConfigsError(e)\n })\n }, [isBrowser])\n\n const defaultCountry = isBrowser ? window.localStorage.getItem('eventCountry') : ''\n const userData =\n isBrowser && window.localStorage.getItem('user_data')\n ? JSON.parse(window.localStorage.getItem('user_data') || '{}')\n : {}\n const additionalConfigs =\n isBrowser && window.localStorage.getItem('checkoutAdditionalConfigs')\n ? JSON.parse(\n window.localStorage.getItem('checkoutAdditionalConfigs') ||\n '{\"resale\": false, \"resaleWithAddons\": false}'\n )\n : { resale: false, resaleWithAddons: false }\n const [dataWithUniqueIds, setDataWithUniqueIds] = useState<IBillingInfoData[]>(\n assingUniqueIds(data)\n )\n const xtfCookie = getCookieByName('X-TF-ECOMMERCE')\n const [isLoggedIn, setIsLoggedIn] = useState(!!(pIsLoggedIn || xtfCookie))\n const [cartInfoData, setCartInfo] = useState<any>({})\n const [countries, setCountries] = useState<any>([])\n const [states, setStates] = useState<any>([])\n const [showModalLogin, setShowModalLogin] = useState(false)\n const alreadyHasUser= false\n const [userExpired, setUserExpired] = useState(false)\n const [showModalSignup, setShowModalSignup] = useState(false)\n const [showModalForgotPassword, setShowModalForgotPassword] = useState(false)\n const [ticketsQuantity, setTicketsQuantity] = useState<string[]>([])\n const [userValues, setUserValues] = useState<any>({\n firstName: '',\n lastName: '',\n email: '',\n phone: '',\n confirmEmail: '',\n holderFirstName: '',\n holderLastName: '',\n holderAge: '',\n city: '',\n country: '',\n street_address: '',\n state: '',\n zip: '',\n })\n const [loading, setLoading] = useState(true)\n const [cardLoading, setCardLoading] = useState(false)\n const [isCountriesLoading, setIsCountriesLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n const [phoneValidationIsLoading, setPhoneValidationIsLoading] = useState(false)\n const [emailExists, setEmailExists] = useState(false)\n const emailLogged = _get(userData, 'email', '') || _get(userValues, 'email', '')\n const firstNameLogged =\n _get(userData, 'first_name', '') || _get(userValues, 'first_name', '')\n const lastNameLogged =\n _get(userData, 'last_name', '') || _get(userValues, 'last_name', '')\n const phoneLogged = _get(userData, 'phone', '') || _get(userValues, 'phone', '')\n const showDOB = configs?.age_required\n const showTicketHolders = configs?.names_required\n const eventId = configs?.event_id\n const optedInFieldValue: boolean = brandOptIn\n ? brandOptIn\n : _get(cartInfoData, 'optedIn', false)\n const ttfOptIn = Boolean(_get(cartInfoData, 'ttfOptIn', false))\n const isTable = Boolean(_get(cartInfoData, 'is_table', false))\n const hideTtfOptIn: boolean = _get(cartInfoData, 'hide_ttf_opt_in', true)\n const expirationTime = _get(cartInfoData, 'expiresAt')\n const flagRequirePhone = configs?.phone_required\n const collectMandatoryWalletAddress = configs?.collect_mandatory_wallet_address\n const collectOptionalWalletAddress = configs?.collect_optional_wallet_address\n const flagFreeTicket = configs?.free_ticket\n const hidePhoneField = configs?.hide_phone_field\n const hideWalletAddressField =\n !collectOptionalWalletAddress && !collectMandatoryWalletAddress\n const collectMandatoryCompany = configs?.collect_mandatory_company\n const collectOptionalCompany = configs?.collect_optional_company\n const hideCompanyField = !collectOptionalCompany && !collectMandatoryCompany\n const collectMandatoryJobTitle = configs?.collect_mandatory_job_title\n const collectOptionalJobTitle = configs?.collect_optional_job_title\n const hideJobTitleField = !collectMandatoryJobTitle && !collectOptionalJobTitle\n const collectMandatoryInstagram = configs?.collect_mandatory_instagram\n const collectOptionalInstagram = configs?.collect_optional_instagram\n const hideInstagramField = !collectMandatoryInstagram && !collectOptionalInstagram\n const collectMandatoryBusinessCategory = configs?.collect_mandatory_business_category\n const collectOptionalBusinessCategory = configs?.collect_optional_business_category\n const eventHasAddons = configs?.has_add_on\n const hideBusinessCategoryField =\n !collectMandatoryBusinessCategory && !collectOptionalBusinessCategory\n\n const [pendingVerificationMessage, setPendingVerificationMessage] = useState<string>()\n const [reviewData, setReviewData] = useState<any>({})\n const [checkoutData, setCheckoutData] = useState<any>({})\n const [checkoutUpdateData, setCheckoutUpdateData] =\n useState<ICheckoutResponseData | null>(null)\n const prevData = useRef(data)\n\n const addAddOnsInAttributes = useCallback((checkoutBody: any) => {\n const selectedAddOns = window.localStorage.getItem('add_ons') || '{}'\n const addOnDataCapture = window.localStorage.getItem('add_on_data_capture') || '{}'\n\n checkoutBody.attributes.add_ons = JSON.parse(selectedAddOns)\n checkoutBody.attributes.add_on_data_capture = JSON.parse(addOnDataCapture)\n }, [])\n const [singleCheckoutAddons, setSingleCheckoutAddOns] = useState<any>({})\n\n const orderIsFree = !Number(checkoutData?.total)\n\n useEffect(() => {\n const hasUniqueId = _get(dataWithUniqueIds, '[0].uniqueId')\n const isEqualData = _isEqual(prevData.current, data)\n if (!hasUniqueId || !isEqualData) {\n setDataWithUniqueIds(assingUniqueIds(data))\n if (!isEqualData) {\n prevData.current = data\n }\n }\n }, [dataWithUniqueIds, data])\n\n const getQuantity = useCallback((cart: any = []) => {\n let qty = 0\n cart.forEach((item: any) => {\n qty += +item.quantity\n })\n return qty\n }, [])\n\n useEffect(() => {\n if (pIsLoggedIn !== isLoggedIn || xtfCookie) {\n setIsLoggedIn(!!(pIsLoggedIn || xtfCookie))\n }\n }, [pIsLoggedIn, isLoggedIn, xtfCookie])\n\n //just once\n useEffect(() => {\n // fetch countries data\n const fetchCountries = async () => {\n try {\n const res = await getCountries()\n setCustomHeader(res)\n setCountries(res.data)\n setIsCountriesLoading(false)\n onGetCountriesSuccess(res.data)\n } catch (e) {\n if (axios.isAxiosError(e)) {\n onGetCountriesError(e)\n }\n setIsCountriesLoading(false)\n }\n }\n shouldFetchCountries && fetchCountries()\n fetchCart()\n\n // Initialize checkout with event_id on first load\n if (isSinglePageCheckout && eventId) {\n updateCheckoutWithAddOns()\n }\n\n return () => {\n isBrowser && localStorage.removeItem('selectedTicketsQuantity')\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n eventId,\n isSinglePageCheckout,\n shouldFetchCountries,\n onGetCountriesSuccess,\n onGetCountriesError,\n ])\n\n // fetch cart data\n const fetchCart = async () => {\n try {\n setCardLoading(true)\n const res = await getCart()\n setCustomHeader(res)\n const cartInfo = res.data.attributes\n setCartInfo(cartInfo)\n const { cart = [] } = cartInfo\n setTicketsQuantity(new Array(getQuantity(cart)).fill(null).map(() => nanoid()))\n onGetCartSuccess(res.data)\n } catch (e) {\n if (axios.isAxiosError(e)) {\n onGetCartError(e)\n }\n } finally {\n setCardLoading(false)\n }\n }\n\n // fetch user data\n const fetchUserData = async () => {\n try {\n if (isLoggedIn) {\n const userDataResponse = await getProfileData()\n const profileSpecifiedData = _get(userDataResponse, 'data')\n const profileDataObj = setLoggedUserData(profileSpecifiedData)\n setUserValues({\n ...profileDataObj,\n firstName: profileDataObj.first_name,\n lastName: profileDataObj.last_name,\n })\n window.localStorage.setItem('user_data', JSON.stringify(profileDataObj))\n onGetProfileDataSuccess(userDataResponse.data)\n }\n } catch (e) {\n if (axios.isAxiosError(e)) {\n onGetProfileDataError(e)\n }\n }\n }\n\n useEffect(() => {\n fetchUserData()\n fetchCart()\n }, [isLoggedIn])\n\n useEffect(() => {\n const fetchCheckoutUpdate = async () => {\n if (!eventId) return\n\n try {\n const checkoutUpdateResponse = await updateCheckout({\n attributes: {\n event_id: eventId,\n is_from_resale: additionalConfigs?.resale,\n },\n })\n console.log('Stripe in [useEffect] fetchCheckoutUpdate', checkoutUpdateResponse)\n\n if (checkoutUpdateResponse.success) {\n const checkoutAttributes = checkoutUpdateResponse.data.attributes\n const cartPriceBreakdown = _get(\n checkoutAttributes,\n 'cart_price_breakdown',\n {}\n )\n localStorage.setItem(\n 'checkoutData',\n JSON.stringify({ hash: '', total: _get(cartPriceBreakdown, 'total', 0) })\n )\n console.log(\n 'Stripe in [useEffect] fetchCheckoutUpdate | checkoutAttributes',\n checkoutAttributes\n )\n setCheckoutUpdateData(checkoutAttributes)\n onCheckoutUpdateSuccess({ expires_at: expirationTime, ...cartPriceBreakdown })\n }\n } catch (error) {\n console.error('Failed to fetch checkout update:', error)\n }\n }\n\n fetchCheckoutUpdate()\n }, [eventId, additionalConfigs?.resale])\n\n useEffect(() => {\n const collectPaymentData = async () => {\n if (\n skipPage &&\n !_isEmpty(ticketsQuantity) &&\n !showDOB &&\n !loading &&\n !isNewUser\n ) {\n setLoading(true)\n const checkoutBody = createCheckoutDataBodyWithDefaultHolder(\n ticketsQuantity.length,\n userData\n )\n\n try {\n if (isBrowser) {\n addAddOnsInAttributes(checkoutBody)\n }\n\n const checkoutResponse = await postOnCheckout(checkoutBody, flagFreeTicket)\n removeReferralKey()\n removeAdditionalConfigs()\n onSkipBillingPage(checkoutResponse.data.attributes)\n setLoading(false)\n } catch (e) {\n onSubmitError(e as AxiosError)\n if (_get(e, 'response.data.data.hasUnverifiedOrder')) {\n setPendingVerificationMessage(_get(e, 'response.data.message'))\n }\n }\n } else {\n setLoading(false)\n }\n }\n collectPaymentData()\n }, [skipPage, ticketsQuantity])\n\n const collectCheckoutBody = useCallback(\n (values: Record<string, any>, profileData?: any): Record<string, any> => {\n let checkoutBody = {} as ICheckoutBody\n\n // Auto collect ticket holders name when it was skipped optionally\n if (showDOB && !showTicketHolders && canSkipHolderNames) {\n checkoutBody = createCheckoutDataBodyWithDefaultHolder(\n ticketsQuantity.length,\n values,\n true,\n { emailLogged, firstNameLogged, lastNameLogged, phoneLogged }\n )\n } else {\n checkoutBody = createCheckoutDataBody(\n ticketsQuantity.length,\n values,\n {\n emailLogged: emailLogged || profileData.email,\n firstNameLogged:\n firstNameLogged || profileData.first_name || profileData.firstName,\n lastNameLogged:\n lastNameLogged || profileData.last_name || profileData.lastName,\n phoneLogged: phoneLogged || profileData.phone,\n },\n showDOB\n )\n }\n\n // Collect data_capture for Order Custom Fields\n const data_capture: Record<string, any> = {}\n _forEach(customFieldsOrderKeys, (key: string) => {\n data_capture[key] = values[key]\n\n // Delete from values list\n delete checkoutBody.attributes[key]\n })\n\n // Temp solution for hardcoded data capture values, to be deleted in the future\n const captureKeys = [\n 'businessCategory',\n 'company',\n 'instagram',\n 'jobTitle',\n 'wallet_address',\n ]\n\n captureKeys.forEach(key => {\n const path = `data_capture.${key}`\n const value = _get(values, path, '')\n\n if (value !== '') {\n data_capture[key] = value\n }\n\n const attributeKey = `data_capture[${key}]`\n delete checkoutBody.attributes?.[attributeKey]\n })\n\n // Collect data_capture for Ticket Holders Fields\n _forEach(checkoutBody.attributes.ticket_holders, (holder, holderIndex) => {\n const holderDataCapture: Record<string, any> = {}\n\n _forEach(customFieldsTicketHolderKeys, customFieldKey => {\n const customFieldHolderName = `${customFieldKey}-${holderIndex}`\n const customFieldHolderKey = values[customFieldHolderName] || ''\n holderDataCapture[customFieldKey] = customFieldHolderKey\n\n // Delete holder specific value from values list\n delete checkoutBody.attributes[customFieldHolderName]\n })\n\n // Assign Ticket Holder data_capture final value\n if (!_isEmpty(holderDataCapture)) {\n holder.ticket_data_capture = holderDataCapture\n }\n })\n\n // Collect add_on_data_capture for Add-on Custom Fields\n const add_on_data_capture: Record<string, any> = {}\n _forEach(values, (val: any, key: string) => {\n // Matches keys like: `${addonId}-${groupId}-${fieldKey}` created in AddonComponent\n const match = key.match(/^(\\d+)-\\d+-(.+)$/)\n if (match) {\n const addonId = match[1]\n const fieldKey = match[2]\n\n // Initialize addon bucket\n if (!add_on_data_capture[addonId]) {\n add_on_data_capture[addonId] = {}\n }\n\n add_on_data_capture[addonId][fieldKey] = val\n\n // Remove the raw form key from attributes to avoid leaking internals\n delete checkoutBody.attributes[key]\n }\n })\n\n // Also include add_on_data_capture from localStorage for single-page checkout\n if (isBrowser) {\n const storedAddOnDataCapture = localStorage.getItem('add_on_data_capture')\n if (storedAddOnDataCapture) {\n const parsed = JSON.parse(storedAddOnDataCapture)\n Object.keys(parsed).forEach(addonId => {\n if (!add_on_data_capture[addonId]) {\n add_on_data_capture[addonId] = {}\n }\n Object.keys(parsed[addonId]).forEach(fieldKey => {\n add_on_data_capture[addonId][fieldKey] = parsed[addonId][fieldKey]\n })\n })\n }\n }\n\n const mergedAttributes: Record<string, any> = {\n ...checkoutBody.attributes,\n data_capture,\n }\n\n if (!_isEmpty(add_on_data_capture)) {\n mergedAttributes.add_on_data_capture = add_on_data_capture\n }\n\n return { attributes: mergedAttributes }\n },\n [\n showDOB,\n showTicketHolders,\n canSkipHolderNames,\n customFieldsOrderKeys,\n ticketsQuantity.length,\n emailLogged,\n firstNameLogged,\n lastNameLogged,\n phoneLogged,\n customFieldsTicketHolderKeys,\n ]\n )\n\n const removeReferralKey = useCallback(() => {\n localStorage.removeItem('referral_key')\n }, [])\n\n const removeAdditionalConfigs = useCallback(() => {\n localStorage.removeItem('checkoutAdditionalConfigs')\n }, [])\n\n useEffect(() => {\n onCheckoutUpdateSuccess({ expires_at: expirationTime, ...checkoutData })\n }, [checkoutData, cartInfoData])\n\n // Initialize payment hooks\n usePaymentRedirect({\n stripeRef,\n setError,\n setLoading,\n removeReferralKey,\n removeAdditionalConfigs,\n handleSubmit,\n isBrowser,\n })\n\n const { processPayment } = useStripePayment({\n stripeRef,\n elementsRef,\n setError,\n isBrowser,\n })\n\n const updateCheckoutWithAddOns = useCallback(\n async (addOns: { [key: string]: number } = {}) => {\n if (!isSinglePageCheckout) return\n\n const mergedAddOns = { ...singleCheckoutAddons }\n\n // Update existing entries and add new ones\n Object.entries(addOns).forEach(([key, value]) => {\n const amount = Number(value)\n if (amount) {\n mergedAddOns[key] = amount\n } else {\n delete mergedAddOns[key]\n }\n })\n\n try {\n const checkoutUpdateData = {\n attributes: {\n event_id: eventId,\n add_ons: mergedAddOns,\n is_from_resale: additionalConfigs?.resale,\n },\n }\n\n const checkoutResponse = await updateCheckout(checkoutUpdateData)\n\n if (checkoutResponse.success) {\n const checkoutDataObj = _get(\n checkoutResponse,\n 'data.attributes.cart_price_breakdown',\n {}\n )\n setCheckoutData(checkoutDataObj)\n setSingleCheckoutAddOns(mergedAddOns)\n }\n } catch (error) {\n const errorMessage = _get(\n error,\n 'response.data.message',\n 'Failed to update add-ons'\n )\n setError(errorMessage)\n onCheckoutUpdateError(error as AxiosError)\n }\n },\n [eventId, isSinglePageCheckout, onCheckoutUpdateError, onCheckoutUpdateSuccess]\n )\n console.log({ checkoutData })\n\n const handleAddOnSelect = useCallback(\n async (selectedAddOns: { [key: string]: number }) => {\n await updateCheckoutWithAddOns(selectedAddOns)\n },\n [updateCheckoutWithAddOns]\n )\n\n const onAddOnSelect = useCallback(\n (id: string, value: string, addon: any, fieldUpdates: Record<string, any> = {}) => {\n const quantity = parseInt(value) || 0\n const addonId = addon.id || id\n\n // Get current add-ons and their custom fields\n const currentAddOns = JSON.parse(localStorage.getItem('add_ons') || '{}')\n const currentDataCapture = JSON.parse(\n localStorage.getItem('add_on_data_capture') || '{}'\n )\n\n // Update quantities\n const updatedAddOns = { ...currentAddOns }\n updatedAddOns[addonId] = quantity\n\n // Update custom fields if any\n const updatedDataCapture = { ...currentDataCapture }\n if (Object.keys(fieldUpdates).length > 0) {\n updatedDataCapture[addonId] = {\n ...(updatedDataCapture[addonId] || {}),\n ...fieldUpdates,\n }\n }\n\n if (quantity === 0 && updatedDataCapture[addonId]) {\n delete updatedDataCapture[addonId]\n }\n // Save to localStorage\n localStorage.setItem('add_ons', JSON.stringify(updatedAddOns))\n localStorage.setItem('add_on_data_capture', JSON.stringify(updatedDataCapture))\n\n // Call handleAddOnSelect with the updated addons object\n handleAddOnSelect(updatedAddOns)\n },\n [handleAddOnSelect]\n )\n if (loading || (enableTimer && !expirationTime && isBrowser)) {\n if (expirationTime === 0) {\n // Redirect to homepage (countdown finished and browser reloaded case)\n window.location.href = '/'\n }\n }\n\n const selectedCountry =\n _find(countries, item => item.code.toLowerCase() === defaultCountry) || {}\n const initialCountry = selectedCountry.id || _get(userData, 'countryId', '') || '1'\n\n const pageUrl = isBrowser ? window.location.href.split('?')[0] : ''\n usePixel(eventId || cartInfoData?.eventId, { page: 'billing', pageUrl })\n if (isTable) {\n dataWithUniqueIds[0].label = 'Get Your Tables'\n }\n\n const stripePublishableKey =\n reviewData?.payment_method?.stripe_publishable_key ||\n checkoutUpdateData?.additional_payment_information?.basic_config?.apiKey\n const stripeAccountId =\n reviewData?.payment_method?.stripe_connected_account ||\n checkoutUpdateData?.additional_payment_information?.basic_config?.accountId\n const addOnsIncludedOnInvitation =\n additionalConfigs.resale && additionalConfigs.resaleWithAddons\n\n const elementsOptions: StripeElementsOptions = {\n ...checkoutUpdateData?.additional_payment_information?.elements_config,\n }\n\n if (loading || cardLoading || isCountriesLoading || isConfigLoading || !eventId) {\n return (\n <Backdrop\n sx={{ color: '#fff', backgroundColor: '#000000bd', zIndex: 1205 }}\n open={true}\n >\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n )\n }\n\n return (\n <ThemeProvider theme={themeMui}>\n {!!expirationTime && enableTimer && (\n <TimerWidget\n expires_at={expirationTime}\n onCountdownFinish={onCountdownFinish}\n container={isSinglePageCheckout ? 'body' : ''}\n />\n )}\n {!isCountriesLoading && !isConfigLoading && (\n <Formik\n initialValues={getInitialValues(\n dataWithUniqueIds,\n {\n country: initialCountry,\n state:\n _get(userData, 'stateId', '') || _get(userData, 'state', '') || '1',\n brand_opt_in: Boolean(optedInFieldValue),\n ttf_opt_in: ttfOptIn,\n data_capture: {\n instagram: _get(extraData, 'data_capture.instagram', ''),\n company: _get(extraData, 'data_capture.company', ''),\n businessCategory: _get(extraData, 'data_capture.businessCategory', ''),\n jobTitle: _get(extraData, 'data_capture.jobTitle', ''),\n },\n ...initialValues,\n },\n userValues,\n ticketHoldersFields,\n ticketsQuantity\n )}\n enableReinitialize={false}\n onSubmit={async (values, formikHelpers) => {\n try {\n // Validation: if phone is required for ticket holders, mark errors and stop submit\n const flagRequirePhoneLocal = Boolean(configs?.phone_required)\n if (flagRequirePhoneLocal) {\n const holdersCount = ticketsQuantity.length\n let hasHolderPhoneError = false\n for (let i = 0; i < holdersCount; i++) {\n const fieldName = `holderPhone-${i}`\n const value = _get(values, fieldName, '')\n if (!value) {\n hasHolderPhoneError = true\n formikHelpers.setFieldTouched(fieldName, true, false)\n formikHelpers.setFieldError(fieldName, 'This field is required')\n }\n }\n if (hasHolderPhoneError) {\n // Do not proceed with submit; Formik will show errors and our PhoneNumberField now shows errors when submitCount > 0\n return\n }\n }\n\n if ((!elementsRef.current || !stripeRef.current) && !orderIsFree) {\n setError('Fill in the payment details')\n return\n }\n\n if (isSinglePageCheckout && !orderIsFree) {\n // For PaymentElement, we'll use confirmPayment directly\n // No need to create payment method separately\n }\n\n if (isBrowser) {\n window.localStorage.setItem(\n 'extraData',\n JSON.stringify({\n data_capture: {\n instagram: _get(values, 'data_capture.instagram', ''),\n company: _get(values, 'data_capture.company', ''),\n businessCategory: _get(\n values,\n 'data_capture.businessCategory',\n ''\n ),\n jobTitle: _get(values, 'data_capture.jobTitle', ''),\n },\n })\n )\n }\n\n // Guest checkout: no need to register, just get profile if logged in\n let userDataObj = userData\n if (isLoggedIn) {\n try {\n const profileData = await getProfileData()\n const profileSpecifiedData = _get(profileData, 'data')\n userDataObj = setLoggedUserData(profileSpecifiedData)\n } catch (e) {\n // If profile fetch fails, use values from form\n userDataObj = {\n email: values.email,\n first_name: values.firstName,\n last_name: values.lastName,\n phone: values.phone,\n }\n }\n } else {\n // For guest checkout, use form values\n userDataObj = {\n email: values.email,\n first_name: values.firstName,\n last_name: values.lastName,\n phone: values.phone,\n }\n }\n\n if (isBrowser) {\n window.localStorage.setItem('user_data', JSON.stringify(userDataObj))\n }\n\n const checkoutBody = collectCheckoutBody(values, userDataObj)\n\n if (isBrowser && !isSinglePageCheckout) {\n addAddOnsInAttributes(checkoutBody)\n }\n\n if (isSinglePageCheckout) {\n checkoutBody.attributes.add_ons = singleCheckoutAddons\n // Include add_on_data_capture for single-page checkout\n const storedAddOnDataCapture =\n localStorage.getItem('add_on_data_capture')\n if (storedAddOnDataCapture) {\n checkoutBody.attributes.add_on_data_capture =\n JSON.parse(storedAddOnDataCapture)\n }\n }\n\n const checkoutResponse = await postOnCheckout(\n checkoutBody,\n flagFreeTicket\n )\n\n const checkoutUpdateResponse = await updateCheckout({\n attributes: {\n event_id: eventId,\n add_ons: checkoutBody?.attributes?.add_ons ?? [],\n is_from_resale: additionalConfigs?.resale,\n },\n })\n console.log(\n 'Stripe checkoutUpdateResponse in billing-info-container',\n checkoutUpdateResponse\n )\n\n setCheckoutUpdateData(checkoutUpdateResponse.data.attributes)\n\n let paymentResponse = null\n\n if (isSinglePageCheckout) {\n const { hash, total } = checkoutResponse.data.attributes\n localStorage.setItem('checkoutData', JSON.stringify({ hash, total }))\n\n const paymentDataResponse = await getPaymentData(String(hash))\n\n if (paymentDataResponse.success) {\n const { attributes } = paymentDataResponse.data\n console.log('Stripe confirmPayment success in billing-info-container')\n setReviewData(attributes)\n\n const { order_details, cart } = attributes\n const {\n tickets: [ticket],\n } = order_details\n\n const updatedOrderData = {\n add_ons: order_details.add_ons || [],\n total: order_details.total,\n subtotal: order_details.subtotal,\n fees: order_details.fees,\n pay_now: order_details.pay_now || '',\n\n id: order_details?.id,\n product_name: cart[0]?.product_name,\n ticketType: ticket?.name,\n quantity: ticket?.quantity,\n price: ticket?.price,\n currency: order_details?.currency,\n guest_count: order_details?.guest_count || '',\n debt: order_details?.debt || null,\n cost: ticket?.cost,\n }\n\n const isFreeTickets =\n (!Number(total) && !Number(updatedOrderData.total)) ||\n !Number(updatedOrderData?.pay_now || 0)\n const paymentMethod = attributes.payment_method || {}\n const paymentPlanAvailable = paymentMethod.stripe_payment_plan_enabled\n console.log({ paymentPlanAvailable })\n // Process payment using the hook\n paymentResponse = await processPayment(\n paymentDataResponse,\n values,\n formikHelpers,\n checkoutResponse,\n checkoutUpdateResponse,\n {\n attributes,\n isFreeTickets,\n updatedOrderData,\n eventId,\n }\n )\n\n if (!paymentResponse && !isFreeTickets) {\n // Payment failed or redirected, don't continue\n return\n }\n }\n }\n\n removeReferralKey()\n removeAdditionalConfigs()\n handleSubmit(\n values,\n formikHelpers as FormikHelpers<any>,\n eventId,\n checkoutResponse,\n checkoutUpdateResponse,\n paymentResponse\n )\n } catch (e) {\n setLoading(false)\n onSubmitError(e as AxiosError)\n const hasUnverifiedOrder = _get(\n e,\n 'response.data.data.hasUnverifiedOrder'\n )\n const message = _get(e, 'response.data.message', {}) as\n | { password?: string | null, email?: string | null }\n | string\n\n if (hasUnverifiedOrder && typeof message === 'string') {\n setPendingVerificationMessage(message)\n } else if (axios.isAxiosError(e)) {\n if (\n (e as any).response?.status === 401 ||\n _get(e, 'response.data.error') === 'invalid_token'\n ) {\n if (isBrowser) {\n window.localStorage.removeItem('user_data')\n setUserExpired(true)\n setShowModalLogin(true)\n setIsLoggedIn(false)\n setShowModalSignup(false)\n setShowModalForgotPassword(false)\n const event = new window.CustomEvent('tf-logout')\n deleteCookieByName('X-TF-ECOMMERCE')\n window.document.dispatchEvent(event)\n }\n }\n if (message && !hideErrorsAlertSection && typeof message === 'string') {\n setError(message)\n }\n onSubmitError(e)\n }\n\n // Keep form values intact - don't reset\n formikHelpers.setSubmitting(false)\n } finally {\n setLoading(false)\n }\n }}\n >\n {(props: FormikProps<any>) => (\n <Form onSubmit={props.handleSubmit}>\n <ErrorFocus />\n <LogicRunner\n brandOptIn={brandOptIn}\n values={props.values}\n errors={props.errors}\n setStates={setStates}\n setFieldValue={props.setFieldValue}\n setValues={props.setValues}\n setUserValues={setUserValues}\n onGetStatesSuccess={onGetStatesSuccess}\n onGetStatesError={onGetStatesError}\n shouldFetchCountries={shouldFetchCountries}\n />\n <EmailExistenceChecker\n email={props.values.email || ''}\n confirmEmail={props.values.confirmEmail || ''}\n isLoggedIn={isLoggedIn}\n setEmailExists={setEmailExists}\n />\n <div className={`billing-info-container ${theme}`}>\n {!!error && (\n <SnackbarAlert\n type=\"error\"\n isOpen={!!error}\n message={error || ''}\n onClose={() => {\n setError(null)\n onErrorClose()\n }}\n />\n )}\n {!isLoggedIn && !isSinglePageCheckout && (\n <div className=\"account-actions-block\">\n <div className=\"action-item\">\n <div>{accountInfoTitle}</div>\n <div>Login & skip ahead:</div>\n </div>\n <div className=\"action-item login-block\">\n <button\n className=\"login-register-button\"\n type=\"button\"\n onClick={() => {\n // If outside login needed to skip package login functionallity\n if (onLogin) {\n onLogin()\n } else {\n setShowModalLogin(true)\n }\n }}\n >\n Login\n </button>\n {!hideLogo && (\n <div className=\"logo-image-container\">\n <img\n src={\n theme === 'dark'\n ? 'https://www.ticketfairy.com/resources/images/logo-ttf.svg'\n : 'https://www.ticketfairy.com/resources/images/logo-ttf-black.svg'\n }\n alt=\"nodata\"\n />\n </div>\n )}\n </div>\n </div>\n )}\n {isSinglePageCheckout &&\n !addOnsIncludedOnInvitation &&\n eventHasAddons &&\n eventId ? (\n <SimpleAddonsContainer\n {...(addonsProps ?? {})}\n eventId={eventId}\n addOnDataWithCustomFields={addOnDataWithCustomFields}\n configs={configs}\n onAddOnSelect={onAddOnSelect}\n />\n ) : !addOnsIncludedOnInvitation &&\n includeAddons &&\n !isSinglePageCheckout ? (\n <AddonsContainter\n {...(addonsProps ?? {})}\n addOnDataWithCustomFields={addOnDataWithCustomFields}\n configs={configs}\n onAddOnSelect={onAddOnSelect}\n />\n ) : null}\n {!cardLoading &&\n _map(dataWithUniqueIds, item => {\n const { label, labelClassName, fields } = item\n return (\n <div key={item.uniqueId} className=\"billing-info-fields\">\n <p className={labelClassName}>{label}</p>\n {_map(fields, group => {\n const { groupClassname, groupItems } = group\n const filteredGroupItems = filterBillingInfoFields(\n groupItems,\n {\n showDOB: Boolean(showDOB),\n hideTtfOptIn: Boolean(hideTtfOptIn),\n hidePhoneField: Boolean(hidePhoneField),\n flagRequirePhone: Boolean(flagRequirePhone),\n collectMandatoryWalletAddress: Boolean(\n collectMandatoryWalletAddress\n ),\n collectMandatoryJobTitle: Boolean(\n collectMandatoryJobTitle\n ),\n collectMandatoryBusinessCategory: Boolean(\n collectMandatoryBusinessCategory\n ),\n collectMandatoryCompany: Boolean(collectMandatoryCompany),\n collectMandatoryInstagram: Boolean(\n collectMandatoryInstagram\n ),\n flagFreeTicket: Boolean(flagFreeTicket),\n hideWalletAddressField: Boolean(hideWalletAddressField),\n hideJobTitleField: Boolean(hideJobTitleField),\n hideBusinessCategoryField: Boolean(\n hideBusinessCategoryField\n ),\n hideCompanyField: Boolean(hideCompanyField),\n hideInstagramField,\n }\n )\n return (\n <React.Fragment key={group.uniqueId}>\n <div className={groupClassname}>\n {_map(filteredGroupItems, element => {\n // Hide password fields in single-page checkout or when user is logged in\n const shouldHidePasswordFields =\n ['password', 'confirmPassword', 'password-info'].includes(\n element.name\n ) &&\n (isLoggedIn || isSinglePageCheckout)\n\n return shouldHidePasswordFields ? null : (\n <React.Fragment key={element.uniqueId}>\n <div\n className={`${element.className} ${\n props?.errors[element.name] || ''\n }`}\n >\n {element.component ? (\n typeof element.component === 'function' ? (\n renderComponentWithProps(\n element.component as React.ComponentType<any>,\n element.name === 'payment_info'\n ? { reviewData }\n : {}\n )\n ) : (\n element.component\n )\n ) : (\n <Field\n {...element}\n type={\n element.type === 'radio' ||\n element.type === 'checkbox'\n ? undefined\n : element.type\n }\n setPhoneValidationIsLoading={\n element.type === 'phone'\n ? setPhoneValidationIsLoading\n : undefined\n }\n fill={element.type === 'phone' ? true : undefined}\n label={getFieldLabel(element, configs)}\n validate={getValidateFunctions(\n element,\n states,\n props.values,\n props.errors\n )}\n setFieldValue={props.setFieldValue}\n onBlur={props.handleBlur}\n component={getFieldComponent(element)}\n selectOptions={\n element.name === 'country'\n ? _map(countries, item => ({\n value: item.id,\n label: item.name,\n }))\n : element.name === 'state'\n ? [\n {\n label: element.label,\n value: '',\n disabled: true,\n },\n ...states,\n ]\n : element.selectOptions || []\n }\n theme={theme}\n defaultCountry={\n defaultCountry || element.defaultCountry\n }\n dateFormat={element.format}\n isCountryCodeEditable={\n isCountryCodeEditable\n }\n />\n )}\n </div>\n </React.Fragment>\n )\n })}\n </div>\n {/* Show login suggestion if email is registered */}\n {group.groupItems.some(el => el.name === 'confirmEmail') &&\n emailExists &&\n !isLoggedIn && (\n <div className=\"email-registered-message\">\n <p className=\"email-registered-text\">\n ✓ This email is already registered. Log in to\n auto-fill your information\n </p>\n <Button\n type=\"button\"\n variant=\"contained\"\n className=\"email-login-button\"\n onClick={() => {\n if (onLogin) {\n onLogin()\n } else {\n setShowModalLogin(true)\n }\n }}\n >\n Log in\n </Button>\n </div>\n )}\n </React.Fragment>\n )\n })}\n </div>\n )\n })}\n {!_isEmpty(ticketHoldersFields.fields) && (\n <div className=\"ticket-holders-fields\">\n <h2>{ticketHoldersFields.label}</h2>\n {_map(ticketsQuantity, (_item, index) => (\n <div key={_item}>\n <h5>Ticket {index + 1}</h5>\n {_map(ticketHoldersFields.fields, group => {\n const { id, groupClassname, groupItems } = group\n return (\n <div key={id}>\n <div className={groupClassname}>\n {_map(groupItems, element => (\n <div className={element.className} key={element.name}>\n <Field\n {...element}\n type={\n element.type === 'radio' ||\n element.type === 'checkbox'\n ? undefined\n : element.type\n }\n name={`${element.name}-${index}`}\n label={getFieldLabel(element, configs)}\n component={getFieldComponent(element)}\n validate={getValidateFunctions(\n element,\n states,\n props.values,\n props.errors\n )}\n setPhoneValidationIsLoading={\n setPhoneValidationIsLoading\n }\n fill={element.type === 'phone' ? true : undefined}\n defaultCountry={\n defaultCountry || element.defaultCountry\n }\n isCountryCodeEditable={isCountryCodeEditable}\n />\n </div>\n ))}\n </div>\n </div>\n )\n })}\n </div>\n ))}\n </div>\n )}\n <div className=\"payment-section\">\n {isSinglePageCheckout && !orderIsFree && stripePublishableKey && (\n <PaymentContainer\n stripePublishableKey={stripePublishableKey}\n stripeAccountId={stripeAccountId}\n formTitle=\"Payment Information\"\n orderInfoLabel=\"\"\n enableTimer={false}\n checkoutData={checkoutData}\n elementsOptions={elementsOptions}\n paymentElementOptions={{\n wallets: {\n applePay:\n checkoutUpdateData?.additional_payment_information\n ?.stripe_wallets?.applePay || 'never',\n googlePay:\n checkoutUpdateData?.additional_payment_information\n ?.stripe_wallets?.googlePay || 'never',\n },\n }}\n onStripeReady={(stripe, elements) => {\n stripeRef.current = stripe\n elementsRef.current = elements\n }}\n paymentFields={paymentProps.paymentFields || []}\n onPaymentError={paymentProps.onPaymentError || _identity}\n handlePayment={paymentProps.handlePayment || _identity}\n onGetPaymentDataSuccess={\n paymentProps.onGetPaymentDataSuccess || _identity\n }\n onGetPaymentDataError={\n paymentProps.onGetPaymentDataError || _identity\n }\n themeOptions={themeOptions}\n paymentInfoLabel=\"\"\n displayPaymentButton={false}\n hidePaymentForm={false}\n hideFieldsBlock={true}\n isSinglePageCheckout={true}\n />\n )}\n {paymentSectionAddon}\n </div>\n <div className=\"button-container\">\n <Button\n type=\"submit\"\n variant=\"contained\"\n className=\"login-register-button\"\n disabled={props.isSubmitting || phoneValidationIsLoading}\n >\n {props.isSubmitting ? (\n <CircularProgress size={26} />\n ) : orderIsFree ? (\n freeOrderButtonName\n ) : (\n buttonName\n )}\n </Button>\n </div>\n </div>\n </Form>\n )}\n </Formik>\n )}\n {showModalLogin && (\n <LoginModal\n logo={logo}\n onClose={() => {\n setShowModalLogin(false)\n }}\n onLogin={() => {\n setShowModalLogin(false)\n setUserExpired(false)\n onLoginSuccess()\n }}\n alreadyHasUser={alreadyHasUser}\n userExpired={userExpired}\n onGetProfileDataSuccess={(data: any) => {\n fetchCart()\n onGetProfileDataSuccess(data)\n }}\n onGetProfileDataError={onGetProfileDataError}\n showSignUpButton={showSignUpButton}\n showForgotPasswordButton={showForgotPasswordButton}\n onForgotPassword={() => {\n setShowModalLogin(false)\n setShowModalForgotPassword(true)\n }}\n onSignup={() => {\n setShowModalLogin(false)\n setShowModalSignup(true)\n }}\n showPoweredByImage={showPoweredByImage}\n />\n )}\n {showModalSignup && (\n <SignupModal\n onClose={() => {\n setShowModalSignup(false)\n }}\n onLogin={() => {\n setShowModalSignup(false)\n setShowModalLogin(true)\n }}\n onRegisterSuccess={onRegisterSuccess}\n onRegisterError={onRegisterError}\n showPoweredByImage={showPoweredByImage}\n />\n )}\n {showModalForgotPassword && (\n <ForgotPasswordModal\n onClose={() => {\n setShowModalForgotPassword(false)\n }}\n onLoginButtonClick={() => {\n setShowModalForgotPassword(false)\n setShowModalLogin(true)\n }}\n onForgotPasswordSuccess={onForgotPasswordSuccess}\n onForgotPasswordError={onForgotPasswordError}\n showPoweredByImage={showPoweredByImage}\n displaySuccessMessage\n />\n )}\n <VerificationPendingModal\n message={pendingVerificationMessage}\n onClose={() => {\n onPendingVerification()\n }}\n />\n </ThemeProvider>\n )\n }\n)\n\nconst WithCustomFieldsBillingInfoContainer = withCustomFields(BillingInfoContainer)\n\nexport { WithCustomFieldsBillingInfoContainer as BillingInfoContainer }\n","import { Stripe } from '@stripe/stripe-js'\nimport { FormikHelpers } from 'formik'\nimport _identity from 'lodash/identity'\nimport { useEffect } from 'react'\n\nimport { handlePaymentMiddleWare } from '../../paymentContainer/handlePayment'\n\ninterface PaymentContext {\n attributes: any\n isFreeTickets: boolean\n updatedOrderData: any\n eventId: string\n values: any\n formikHelpers: FormikHelpers<any>\n checkoutResponse: any\n checkoutUpdateResponse: any\n timestamp: number\n}\n\ninterface UsePaymentRedirectProps {\n stripeRef: React.MutableRefObject<Stripe | null>\n setError: (error: string | null) => void\n setLoading: (loading: boolean) => void\n removeReferralKey: () => void\n removeAdditionalConfigs: () => void\n handleSubmit: (\n values: any,\n formikHelpers: FormikHelpers<any>,\n eventId: any,\n checkoutResponse: any,\n checkoutUpdateResponse: any,\n paymentResponse: any\n ) => void\n isBrowser: boolean\n}\n\nexport const usePaymentRedirect = ({\n stripeRef,\n setError,\n setLoading,\n removeReferralKey,\n removeAdditionalConfigs,\n handleSubmit,\n isBrowser,\n}: UsePaymentRedirectProps) => {\n useEffect(() => {\n const handlePaymentReturn = async () => {\n const urlParams = new URLSearchParams(window.location.search)\n const isPaymentReturn = urlParams.get('payment_return')\n const clientSecret = urlParams.get('payment_intent_client_secret')\n\n if (isPaymentReturn && clientSecret && stripeRef.current) {\n console.log('Detected payment redirect return, checking status')\n setLoading(true)\n\n try {\n // Get stored payment context\n const storedContext = localStorage.getItem('stripe_payment_context')\n if (!storedContext) {\n setError('Payment context not found')\n setLoading(false)\n return\n }\n\n const paymentContext: PaymentContext = JSON.parse(storedContext)\n const { paymentIntent } = await stripeRef.current.retrievePaymentIntent(\n clientSecret\n )\n\n if (paymentIntent?.status === 'succeeded') {\n console.log('Payment succeeded after redirect, continuing flow')\n\n // Clean up stored context\n localStorage.removeItem('stripe_payment_context')\n\n // Continue with the success flow using stored context\n let paymentResponse = null\n await handlePaymentMiddleWare(\n null,\n {},\n {\n reviewData: paymentContext.attributes,\n isFreeTickets: paymentContext.isFreeTickets,\n paymentPlanIsAvailable: false,\n showPaymentPlanSection: false,\n handlePayment: (data: any) => {\n paymentResponse = data\n },\n setPaymentIsLoading: _identity,\n setError: _identity,\n orderData: paymentContext.updatedOrderData,\n eventId: paymentContext.eventId,\n isBrowser,\n onPaymentError: (error: any) => {\n throw error\n },\n }\n )\n\n // Complete the flow with cleanup and handleSubmit\n removeReferralKey()\n removeAdditionalConfigs()\n handleSubmit(\n paymentContext.values,\n paymentContext.formikHelpers,\n paymentContext.eventId,\n paymentContext.checkoutResponse,\n paymentContext.checkoutUpdateResponse,\n paymentResponse\n )\n\n // Clean URL parameters\n window.history.replaceState({}, document.title, window.location.pathname)\n } else if (paymentIntent?.status === 'requires_action') {\n setError('Payment requires additional action')\n // Clean up stored context and URL to prevent infinite loop\n localStorage.removeItem('stripe_payment_context')\n window.history.replaceState({}, document.title, window.location.pathname)\n } else {\n setError(`Payment failed or was cancelled.`)\n // Clean up stored context and URL to prevent infinite loop\n localStorage.removeItem('stripe_payment_context')\n window.history.replaceState({}, document.title, window.location.pathname)\n }\n } catch (error) {\n console.error('Error handling payment return:', error)\n setError('Error processing payment return')\n // Clean up stored context and URL to prevent infinite loop\n localStorage.removeItem('stripe_payment_context')\n window.history.replaceState({}, document.title, window.location.pathname)\n } finally {\n setLoading(false)\n }\n }\n }\n\n handlePaymentReturn()\n }, [\n stripeRef.current,\n setError,\n setLoading,\n removeReferralKey,\n removeAdditionalConfigs,\n handleSubmit,\n isBrowser,\n ])\n}\n","import { FormikHelpers } from 'formik'\nimport _identity from 'lodash/identity'\n\nimport { handlePaymentMiddleWare } from '../../paymentContainer/handlePayment'\n\ninterface PaymentData {\n attributes: any\n isFreeTickets: boolean\n updatedOrderData: any\n eventId: string\n}\n\ninterface UseStripePaymentProps {\n stripeRef: any\n elementsRef: React.MutableRefObject<any>\n setError: (error: string | null) => void\n isBrowser: boolean\n}\n\nexport const useStripePayment = ({\n stripeRef,\n elementsRef,\n setError,\n isBrowser,\n}: UseStripePaymentProps) => {\n const processPayment = async (\n paymentDataResponse: any,\n values: any,\n formikHelpers: FormikHelpers<any>,\n checkoutResponse: any,\n checkoutUpdateResponse: any,\n paymentData: PaymentData\n ) => {\n const { attributes, isFreeTickets, updatedOrderData, eventId } = paymentData\n\n if (!isFreeTickets) {\n if (!stripeRef.current) {\n setError('Stripe is not ready')\n console.log('Stripe is not ready in billing-info-container')\n return null\n }\n\n console.log('Stripe confirmPayment in billing-info-container')\n\n // Step 1: Submit elements first\n const { error: submitError } = await elementsRef.current.submit()\n if (submitError) {\n setError('' + submitError?.message)\n console.log(\n 'Stripe elements.submit() error in billing-info-container',\n submitError\n )\n return null\n }\n\n // Step 2: Store payment context before potential redirect\n const paymentContext = {\n attributes,\n isFreeTickets,\n updatedOrderData,\n eventId,\n values,\n formikHelpers,\n checkoutResponse,\n checkoutUpdateResponse,\n timestamp: Date.now(),\n }\n localStorage.setItem('stripe_payment_context', JSON.stringify(paymentContext))\n\n // Step 3: Confirm payment with current page return URL\n const { error: confirmError } = await stripeRef.current.confirmPayment({\n clientSecret:\n paymentDataResponse.data.attributes.payment_method.stripe_client_secret,\n elements: elementsRef.current,\n confirmParams: {\n return_url:\n window.location.href +\n (window.location.href.includes('?') ? '&' : '?') +\n 'payment_return=true',\n },\n redirect: 'if_required',\n })\n\n if (confirmError) {\n setError('' + confirmError?.message)\n console.log('Stripe confirmPayment error in billing-info-container')\n return null\n }\n }\n\n console.log('Stripe confirmPayment success in billing-info-container')\n\n // Handle payment middleware for non-redirect payments\n let paymentResponse = null\n await handlePaymentMiddleWare(\n null,\n {},\n {\n reviewData: attributes,\n isFreeTickets,\n paymentPlanIsAvailable: false,\n showPaymentPlanSection: false,\n handlePayment: (data: any) => {\n paymentResponse = data\n },\n setPaymentIsLoading: _identity,\n setError: _identity,\n orderData: updatedOrderData,\n eventId,\n isBrowser,\n onPaymentError: (error: any) => {\n throw error\n },\n }\n )\n\n return paymentResponse\n }\n\n return { processPayment }\n}\n","export const getImage = (name: string = ''): any => {\n let image: any = ''\n\n if (!name.trim().length) {\n return image\n }\n\n if (process.env.NODE_ENV === 'production') {\n image = require(`./images/${name}`)\n return image.default\n }\n\n return image\n}\n","import _identity from 'lodash/identity'\nimport React from 'react'\nimport SVG from 'react-inlinesvg'\n\nimport { getImage } from '../../utils/getImage'\n\ninterface IShareButtonProps {\n url: string;\n disabled: boolean;\n children: Node;\n}\n\nexport const SpotifyIcon = () => <SVG src={getImage('spotify.svg')} />\n\nexport const InstagramIcon = () => <SVG src={getImage('instagram.svg')} />\n\nexport const SocialButton = (props: IShareButtonProps) => {\n const { children, url, disabled } = props\n\n const handleClick = () => {\n window.open(url)\n }\n\n return (\n <button\n className={`react-share__ShareButton ${disabled ? 'disabled-action' : ''}`}\n type=\"button\"\n onClick={!disabled ? handleClick : _identity}\n >\n {children}\n </button>\n )\n}\n","import {\n EmailIcon,\n EmailShareButton,\n FacebookIcon,\n FacebookMessengerIcon,\n FacebookMessengerShareButton,\n FacebookShareButton,\n HatenaIcon,\n HatenaShareButton,\n InstapaperIcon,\n InstapaperShareButton,\n LineIcon,\n LineShareButton,\n LinkedinIcon,\n LinkedinShareButton,\n LivejournalIcon,\n LivejournalShareButton,\n MailruIcon,\n MailruShareButton,\n OKIcon,\n OKShareButton,\n PinterestIcon,\n PinterestShareButton,\n PocketIcon,\n PocketShareButton,\n RedditIcon,\n RedditShareButton,\n TelegramIcon,\n TelegramShareButton,\n TumblrIcon,\n TumblrShareButton,\n TwitterShareButton,\n ViberIcon,\n ViberShareButton,\n VKIcon,\n VKShareButton,\n WeiboIcon,\n WeiboShareButton,\n WhatsappIcon,\n WhatsappShareButton,\n WorkplaceIcon,\n WorkplaceShareButton,\n XIcon,\n} from 'react-share'\n\nimport { InstagramIcon, SocialButton, SpotifyIcon } from '../common/socials'\n\nconst config: any = {\n facebook: { component: FacebookShareButton, icon: FacebookIcon },\n messenger: {\n component: FacebookMessengerShareButton,\n icon: FacebookMessengerIcon,\n },\n twitter: { component: TwitterShareButton, icon: XIcon },\n linkedin: { component: LinkedinShareButton, icon: LinkedinIcon },\n pinterest: { component: PinterestShareButton, icon: PinterestIcon },\n vk: { component: VKShareButton, icon: VKIcon },\n ok: { component: OKShareButton, icon: OKIcon },\n telegram: { component: TelegramShareButton, icon: TelegramIcon },\n whatsapp: { component: WhatsappShareButton, icon: WhatsappIcon },\n reddit: { component: RedditShareButton, icon: RedditIcon },\n tumblr: { component: TumblrShareButton, icon: TumblrIcon },\n mailru: { component: MailruShareButton, icon: MailruIcon },\n email: { component: EmailShareButton, icon: EmailIcon },\n livejournal: { component: LivejournalShareButton, icon: LivejournalIcon },\n viber: { component: ViberShareButton, icon: ViberIcon },\n workplace: { component: WorkplaceShareButton, icon: WorkplaceIcon },\n line: { component: LineShareButton, icon: LineIcon },\n pocket: { component: PocketShareButton, icon: PocketIcon },\n instapaper: { component: InstapaperShareButton, icon: InstapaperIcon },\n weibo: { component: WeiboShareButton, icon: WeiboIcon },\n hatena: { component: HatenaShareButton, icon: HatenaIcon },\n instagram: { component: SocialButton, icon: InstagramIcon },\n spotify: { component: SocialButton, icon: SpotifyIcon },\n}\n\nexport default function (key: string) {\n return config[key]\n}\n","import _identity from 'lodash/identity'\nimport React, { ReactElement } from 'react'\n\nimport { isValidNumber } from '../../utils/isValidNumber'\nimport config from './config'\nimport { IShareButton } from './index'\n\nconst SocialComponent = ({\n mainLabel,\n subLabel,\n platform,\n shareData,\n points,\n onAfterShare,\n alreadyApplied,\n oneTimeAction,\n btnClassName = '',\n}: IShareButton) => {\n const Component = config(platform)?.component\n const Icon = config(platform)?.icon\n const isActionDisabled = alreadyApplied && oneTimeAction\n return (\n <>\n {Component && (\n <Component {...shareData} disabled={isActionDisabled} className={btnClassName}>\n <div\n onKeyDown={_identity}\n onClick={!isActionDisabled ? onAfterShare : _identity}\n className={`social-media-sharing ${platform}`}\n >\n <div className=\"share-icon\">\n <Icon size={32} round />\n </div>\n <span className=\"share-text\">\n <span className=\"main-label\">{mainLabel} </span>\n <span className=\"sub-label\">{subLabel}</span>\n </span>\n {isValidNumber(points) && (\n <div className=\"share-points\">\n <span className=\"points-count\">{points}</span>\n <span className=\"points-text\">Points</span>\n </div>\n )}\n </div>\n </Component>\n )}\n </>\n )\n}\n\ninterface SocialButtonsTypes {\n shareLink: string;\n name: string;\n appId: string;\n showDefaultShareButtons: boolean;\n shareButtons: IShareButton[];\n titleText?: string;\n footerText?: string | ReactElement;\n clientLabel?: string;\n showReferralsInfoText?: boolean;\n onAfterShare?: (eventActionId: string | undefined) => void;\n}\n\nconst SocialButtons = ({\n showDefaultShareButtons,\n shareLink,\n name,\n appId,\n shareButtons,\n titleText = 'or use one of these convenient buttons:',\n footerText = (\n <p>\n We <strong>never</strong> post on Facebook without your permission!\n </p>\n ) as ReactElement,\n clientLabel,\n onAfterShare = _identity,\n showReferralsInfoText = false,\n}: SocialButtonsTypes) => (\n <>\n {titleText && <div className=\"convenient_buttons\">{titleText}</div>}\n <div className=\"social-media-btns\">\n {showDefaultShareButtons && (\n <>\n <SocialComponent\n mainLabel=\"Share on\"\n subLabel=\"Facebook\"\n platform=\"facebook\"\n shareData={{\n quote: name,\n url: shareLink,\n }}\n />\n <SocialComponent\n mainLabel=\"Post on\"\n subLabel=\"X\"\n platform=\"twitter\"\n shareData={{\n title: name,\n url: shareLink,\n }}\n btnClassName=\"twitter-btn\"\n />\n <SocialComponent\n mainLabel=\"Message friends on\"\n subLabel=\"Facebook\"\n platform=\"messenger\"\n shareData={{\n appId,\n url: shareLink,\n }}\n />\n <SocialComponent\n mainLabel=\"Message friends on\"\n subLabel=\"Whatsapp\"\n platform=\"whatsapp\"\n shareData={{\n title: name,\n url: shareLink,\n }}\n />\n </>\n )}\n {shareButtons.map((shareButton: IShareButton, index: number) => (\n <SocialComponent\n onAfterShare={() => onAfterShare(shareButton.eventActionId)}\n key={index}\n {...shareButton}\n />\n ))}\n </div>\n {showDefaultShareButtons || shareButtons.length ? footerText : null}\n {(showReferralsInfoText || Boolean(clientLabel)) && (\n <p className=\"note-message\">\n <span>\n *Please note, only purchases made from a different{' '}\n {clientLabel || 'Ticket Fairy'} account can count towards your referrals\n </span>\n <span>\n {' '}\n so please make sure you ask your friends to buy their own tickets using their\n own {clientLabel || 'Ticket Fairy'} account!\n </span>\n </p>\n )}\n </>\n)\n\nexport default SocialButtons\n","import _isNumber from 'lodash/isNumber'\n\nexport const isValidNumber = (value?: number | string): boolean => {\n if (isNaN(Number(value))) {\n return false\n }\n return _isNumber(Number(value))\n}\n","import { AxiosRequestConfig, AxiosResponse } from 'axios'\n\nimport { publicRequest } from '../api/publicRequest'\n\nexport const getPreRegistrationInfluencers = async (\n data: IInfluancersRequestData\n): Promise<IInfluancersResponseData> => {\n const response: AxiosResponse<IInfluancersResponseData, AxiosRequestConfig> =\n await publicRequest.get(`v1/event/${data.eventId}/pre-registration/influencers`)\n return response.data\n}\n\nexport const getPreRegistrationShareOptions = async (\n data: IShareOptionsRequestData\n): Promise<IShareOptionsResponseData> => {\n const response: AxiosResponse<IShareOptionsResponseData, AxiosRequestConfig> =\n await publicRequest.get(`/v1/pre-registration/${data.hash}/confirmation-page`)\n return response.data\n}\n\nexport const submitShareAction = async (\n data: ISubmitShareActionRequestData\n): Promise<ISubmitShareActionResponseData> => {\n const { eventActionId, accessToken, hash } = data\n\n const response: AxiosResponse<ISubmitShareActionResponseData, AxiosRequestConfig> =\n await publicRequest.post(`/v1/pre-registration/${hash}/submit-action`, {\n data: {\n attributes: {\n phase: 'pre-registration',\n eventActionId: Number(eventActionId),\n accessToken,\n },\n },\n })\n return response.data\n}\n","import { useEffect, useRef, useState } from 'react'\n\nimport { getCookieByName } from '../utils'\n\nexport const useCookieListener = (\n key: string,\n handler: (value: string | null) => void\n) => {\n const getCookie = () => getCookieByName(key)\n const [intervalValue, setIntervalValue] = useState<NodeJS.Timeout>()\n const cookieRef = useRef<string>(getCookie())\n\n const handleCookieChange = () => {\n const currentCookie = getCookie()\n const prevCookie = cookieRef.current\n\n if (currentCookie !== prevCookie) {\n cookieRef.current = getCookie()\n handler(cookieRef.current)\n }\n }\n\n useEffect(() => {\n const interval = setInterval(handleCookieChange, 500)\n setIntervalValue(interval)\n\n return () => {\n intervalValue && clearInterval(intervalValue)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n}\n","import Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport CircularProgress from '@mui/material/CircularProgress'\nimport Modal from '@mui/material/Modal'\nimport _identity from 'lodash/identity'\nimport React, { FC } from 'react'\n\ninterface Props {\n message: string;\n loading?: boolean;\n hideCancelBtn?: boolean;\n onClose?: () => void;\n onConfirm?: () => void;\n}\n\nconst style: React.CSSProperties = {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n minWidth: 480,\n backgroundColor: '#e3e3e3',\n border: '1px solid white',\n outline: 'none',\n padding: '14px',\n maxHeight: '85vh',\n overflow: 'auto',\n}\n\nconst ConfirmModal: FC<Props> = ({\n message = '',\n loading = false,\n hideCancelBtn = false,\n onClose = _identity,\n onConfirm = _identity,\n}) => (\n <Modal\n open={true}\n onClose={onClose}\n aria-labelledby=\"modal-modal-title\"\n aria-describedby=\"modal-modal-description\"\n className=\"confirm-modal\"\n >\n <Box style={style}>\n <p>{message}</p>\n <div className=\"footer\">\n {!hideCancelBtn && (\n <Button onClick={onClose} disabled={loading}>\n Cancel\n </Button>\n )}\n <Button onClick={onConfirm}>\n {loading ? <CircularProgress size=\"22px\" /> : 'OK'}\n </Button>\n </div>\n </Box>\n </Modal>\n)\n\nexport default ConfirmModal\n","import './style.css'\n\nimport moment from 'moment-timezone'\nimport React, { useEffect, useState } from 'react'\n\ninterface CountdownTypes {\n startDate: string;\n timezone?: string;\n title?: string;\n message?: string;\n showMessage?: boolean;\n disableLeadingZero?: boolean;\n callback?: () => void;\n isLoggedIn?: boolean;\n}\n\nconst isTimeExpired = (startDate: string, timezone: string) =>\n !moment(startDate).isAfter(moment.tz(moment(), timezone).format('YYYY-MM-DD HH:mm:ss'))\n\nfunction Countdown({\n startDate,\n timezone = moment.tz.guess(),\n title = '',\n message = '',\n showMessage = false,\n disableLeadingZero = false,\n callback = () => {},\n isLoggedIn,\n}: CountdownTypes) {\n const [duration, setDuration] = useState('')\n const [timeExpired, setTimeExpired] = useState(false)\n\n useEffect(() => {\n setTimeExpired(isTimeExpired(startDate, timezone))\n }, [])\n\n useEffect(() => {\n let timer: any\n\n if (!timeExpired) {\n timer = setInterval(() => {\n if (isTimeExpired(startDate, timezone)) {\n clearInterval(timer)\n setTimeExpired(true)\n callback()\n return\n }\n\n const currentDate = moment.tz(moment(), timezone).format('YYYY-MM-DD HH:mm:ss')\n const diffTime = moment(startDate).diff(currentDate)\n const duration = moment.duration(diffTime)\n const dateArr: any = {\n year: duration.years(),\n month: duration.months(),\n day: duration.days(),\n hour: duration.hours(),\n minute: duration.minutes(),\n second: duration.seconds(),\n }\n let timeLeft = ''\n\n for (const date in dateArr) {\n const unit = dateArr[date] === 1 ? date : date + 's'\n let val = dateArr[date]\n\n if (!disableLeadingZero && String(dateArr[date]).length === 1) {\n val = '0' + dateArr[date]\n }\n\n if (timeLeft) {\n timeLeft += `, ${val} ${unit}`\n } else if (dateArr[date]) {\n timeLeft += `${val} ${unit}`\n }\n }\n\n setDuration(timeLeft)\n }, 1000)\n }\n return () => {\n clearInterval(timer)\n }\n }, [timeExpired])\n\n return (\n <>\n {!timeExpired && duration && (\n <div className={`countdown ${!isLoggedIn ? 'countdown-on-bottom' : ''}`}>\n <div>\n <p className=\"title\">{title}</p>\n <p>{duration}</p>\n </div>\n {showMessage && <p className=\"message\">{message}</p>}\n </div>\n )}\n </>\n )\n}\n\nexport default Countdown\n","import React from 'react'\n\nimport { emailValidator } from '../../validators'\n\nexport const getFormFieldsNotLoggedIn = (\n clientName?: string | number\n): IFormFieldsSection[] => [\n {\n name: 'basic-info',\n groupLabel: (\n <>\n <span>\n If you want to enter your details manually, please type them below to create an\n account, then click on\n </span>\n <b> Confirm Registration:</b>\n </>\n ),\n groupLabelClassName: '',\n groupClassName: '',\n fields: [\n {\n className: 'half-width',\n name: 'firstName',\n label: 'First Name',\n type: 'text',\n required: true,\n onValidate: null,\n },\n {\n className: 'half-width',\n name: 'lastName',\n label: 'Last Name',\n type: 'text',\n required: true,\n onValidate: null,\n },\n {\n name: 'email',\n label: 'Email',\n type: 'email',\n required: true,\n onValidate: emailValidator,\n },\n {\n name: 'confirmEmail',\n label: 'Confirm Email',\n type: 'email',\n required: true,\n onValidate: emailValidator,\n },\n ],\n },\n {\n name: 'billing-info',\n groupLabel: '',\n groupLabelClassName: '',\n groupClassName: '',\n fields: [\n {\n className: 'half-width',\n name: 'zip',\n label: 'Post Code/Zip',\n type: 'text',\n required: true,\n onValidate: null,\n },\n {\n className: 'half-width',\n name: 'country',\n label: 'Country',\n type: 'select',\n required: true,\n onValidate: null,\n },\n ],\n },\n {\n name: 'password-info',\n groupLabel: (\n <div className=\"email-info-block\">\n <span>Choose a password for your new</span>\n <b> {clientName || 'Mana Common'} </b>\n <span>account</span>\n </div>\n ),\n groupLabelClassName: '',\n groupClassName: '',\n fields: [\n {\n className: 'half-width',\n name: 'password',\n label: 'Password',\n type: 'password',\n required: true,\n onValidate: null,\n },\n {\n className: 'half-width',\n name: 'confirmPassword',\n label: 'Confirm Password',\n type: 'password',\n required: true,\n onValidate: null,\n },\n ],\n },\n]\n\nexport const getFormFieldsLoggedIn = (\n clientName?: string | number\n): IFormFieldsSection[] => [\n {\n name: 'basic-info-logged-in',\n groupLabel:\n 'To confirm your pre-registration for {event_name} simply click on the confirmation button below.',\n groupLabelClassName: '',\n groupClassName: '',\n fields: [\n {\n name: 'email',\n label: 'Email',\n type: 'email',\n required: true,\n onValidate: emailValidator,\n },\n {\n name: 'confirmEmail',\n label: 'Confirm Email',\n type: 'email',\n required: true,\n onValidate: emailValidator,\n },\n ],\n },\n {\n name: 'billing-info-logged-in',\n groupLabel: '',\n groupLabelClassName: '',\n groupClassName: '',\n fields: [\n {\n name: 'numTickets',\n label: 'How many tickets do you want to buy?',\n type: 'select',\n required: true,\n options: new Array(10).fill(null).map((_, index) => ({\n label: index + 1,\n value: index + 1,\n })),\n onValidate: null,\n },\n {\n name: 'holderAge',\n label: 'Ticket Holder Age',\n type: 'date',\n required: true,\n onValidate: null,\n },\n {\n name: 'brandOptIn',\n label: `I would like to be updated on ${\n clientName || 'Mana Common'\n } news, events and offers.`,\n type: 'checkbox',\n },\n ],\n },\n]\n","import { FormikValues } from 'formik'\nimport _forEach from 'lodash/forEach'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport _isEmpty from 'lodash/isEmpty'\nimport _map from 'lodash/map'\nimport _split from 'lodash/split'\n\nimport {\n combineValidators,\n passwordValidator,\n requiredValidator,\n} from '../../validators'\nimport { IShareButton } from '../confirmationContainer'\n\nexport const getValidateFunctions = ({\n element,\n values,\n}: {\n element: IFormField;\n values: FormikValues;\n}) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const validationFunctions: any[] = []\n if (element.required) {\n validationFunctions.push(requiredValidator)\n }\n\n if (element.onValidate) {\n validationFunctions.push(element.onValidate)\n }\n\n if (element.name === 'password') {\n validationFunctions.push(passwordValidator)\n }\n\n if (element.name === 'confirmEmail') {\n const isSameEmail = (confirmEmail?: string) =>\n values.email !== confirmEmail ? 'Please confirm your email address correctly' : null\n validationFunctions.push(isSameEmail)\n }\n\n if (element.name === 'confirmPassword') {\n const isSame = (confirmPassword?: string) =>\n values.password !== confirmPassword ? 'Password confirmation does not match' : null\n validationFunctions.push(isSame)\n }\n\n return combineValidators(...validationFunctions)\n}\n\nexport const getFormInitialValues = (fieldsSections: IFormFieldsSection[]) => {\n const initialValues: { [key: string]: string | number | boolean } = {}\n const isWindowDefined = typeof window !== 'undefined'\n const userData = JSON.parse(\n isWindowDefined ? window.localStorage.getItem('user_data') || '{}' : '{}'\n ) as IProfileData\n\n _forEach(fieldsSections, item => {\n _forEach(item.fields, fieldItem => {\n switch (fieldItem.name) {\n case 'country':\n case 'numTickets':\n initialValues[fieldItem.name] = 1\n break\n case 'brandOptIn':\n initialValues[fieldItem.name] = true\n break\n case 'confirmEmail':\n initialValues[fieldItem.name] =\n _get(userData, fieldItem.name) || _get(userData, 'email') || ''\n break\n default:\n initialValues[fieldItem.name] = _get(userData, fieldItem.name) || ''\n break\n }\n })\n })\n\n return initialValues\n}\n\nexport const updateFormFieldsAttributes = (\n formFields: IFormFieldsSection[],\n attributes?: IFieldAttribute\n) => {\n if (attributes && !_isEmpty(attributes)) {\n const updatedFormFields = _map(formFields, fieldSection => {\n const fieldSectionAttributes = attributes[fieldSection.name] || {}\n\n const updatedFields = _map(fieldSection.fields, fieldItem => {\n const fieldItemAttributes = attributes[fieldItem.name] || {}\n return { ...fieldItem, ...fieldItemAttributes }\n })\n\n return {\n ...fieldSection,\n ...fieldSectionAttributes,\n fields: updatedFields,\n }\n })\n\n return updatedFormFields\n }\n return formFields\n}\n\nexport const shareOptionsAdapter = (\n data: Array<IShareOptionsActionData>,\n shareUrl: string\n) => {\n const adaptedData: Array<IShareButton> = []\n _forEach(data, option => {\n if (option.action !== 'shared_url') {\n const [platform, method] = _split(option.action, '_')\n const mainLabel = method ? method[0].toUpperCase() + method.substring(1) : 'Share'\n adaptedData.push({\n mainLabel: option.action === 'twitter' ? 'Tweet' : mainLabel + ' on',\n subLabel:\n option.action === 'twitter'\n ? ' to your followers'\n : platform[0].toUpperCase() + platform.substring(1),\n platform,\n shareData: {\n quote: 'as',\n url: option.socialUrl || shareUrl,\n },\n points: option.point,\n eventActionId: option.id,\n oneTimeAction: option.oneTimeAction,\n alreadyApplied: option.alreadyApplied,\n })\n }\n })\n return adaptedData\n}\n\nexport const getShuffleMethodByName = (\n tokenShuffleMethod: string\n): ((value: string) => string) => {\n const reverseString = (value: string) => value.split('').reverse().join('')\n const symmetricShuffleString = (value: string) => {\n const lengthOfStr = value.length\n const part1 = value.substring(0, lengthOfStr / 2)\n return value.substring(lengthOfStr / 2) + part1\n }\n const shuffleEveryTwoSymbolsInString = (value: string): string => {\n const words = value.split('')\n let shuffledStr = ''\n for (let i = 0; i < words.length; i += 2) {\n shuffledStr = shuffledStr.concat(words[i + 1], words[i])\n }\n return shuffledStr\n }\n\n if (tokenShuffleMethod === 'reverse_string') {\n return reverseString\n } else if (tokenShuffleMethod === 'symmetric_shuffle_string') {\n return symmetricShuffleString\n } else if (tokenShuffleMethod === 'shuffle_every_two_symbols_in_string')\n return shuffleEveryTwoSymbolsInString\n return _identity\n}\n","import { Field, FormikValues } from 'formik'\nimport _map from 'lodash/map'\nimport React, { FC } from 'react'\n\nimport { replaceVarInString } from '../../utils'\nimport {\n CheckboxField,\n CustomField,\n NativeSelectField,\n PhoneNumberField,\n} from '../common'\nimport { DatePickerField } from '../common/DatePickerField'\nimport { getValidateFunctions } from './utils'\nimport {ThemeOptions} from \"@mui/material\";\nimport {CSSProperties} from \"@mui/styles\";\n\nconst isDocumentDefined = typeof document !== 'undefined'\n\nexport interface IFieldsSectionProps {\n formFields?: IFormFieldsSection[];\n values: FormikValues;\n setFieldValue: (\n field: string,\n value: FormikValues,\n shouldValidate?: boolean | undefined\n ) => void;\n\n countries?: { [key: string]: string | number }[];\n theme?: 'dark' | 'light';\n themeOptions?: ThemeOptions & {\n input?: CSSProperties;\n checkbox?: CSSProperties;\n };\n containerClass?: string;\n}\n\nconst SectionContainer: FC<{ className: string }> = ({\n children,\n className,\n}) => <div className={className}>{children}</div>\n\nconst insertHTML = (elementId: string, text = '') => {\n if (isDocumentDefined) {\n const elem = document && document.getElementById(elementId)\n\n if (!elem?.childNodes.length) {\n elem?.insertAdjacentHTML('afterbegin', text)\n }\n }\n\n return null\n}\n\nconst getFieldClassNames = (id: string, existingClassNames: string) => {\n if (isDocumentDefined) {\n const elem = document && document.getElementById(id)\n\n if ((elem?.parentElement?.clientWidth || 0) < 375) {\n return existingClassNames + ' full-width'\n }\n }\n\n return existingClassNames\n}\n\nexport const FieldsSection = ({\n formFields = [],\n\n countries = [],\n\n values,\n setFieldValue,\n theme,\n containerClass = '',\n themeOptions,\n}: IFieldsSectionProps) => (\n <>\n {_map(formFields, (item, index) => {\n const {\n name,\n groupLabel,\n groupLabelVars = [],\n groupLabelClassName,\n groupClassName = '',\n fields,\n } = item\n return (\n <SectionContainer key={name} className={groupClassName}>\n <span id={`group_label_${index}`} className={groupLabelClassName}>\n {typeof groupLabel === 'string'\n ? insertHTML(\n `group_label_${index}`,\n replaceVarInString(groupLabel, groupLabelVars)\n )\n : groupLabel}\n </span>\n <div className={`fields-container ${groupClassName}`}>\n {_map(fields, (fieldData, fieldIndex) => {\n const {\n name,\n label,\n className = 'full-width',\n type,\n component,\n options = [],\n } = fieldData\n const id = `${name}-${fieldIndex}`\n const classNames = `${containerClass}-container__field ${className}`\n\n return (\n component || (\n <div\n key={name}\n id={id}\n className={getFieldClassNames(id, classNames)}\n >\n <Field\n name={name}\n label={label}\n type={type}\n validate={getValidateFunctions({\n element: fieldData,\n values,\n })}\n setFieldValue={setFieldValue}\n component={\n type === 'checkbox'\n ? CheckboxField\n : type === 'select'\n ? NativeSelectField\n : type === 'phone'\n ? PhoneNumberField\n : type === 'date'\n ? DatePickerField\n : CustomField\n }\n selectOptions={name === 'country' ? countries : options}\n theme={theme}\n themeOptions={themeOptions}\n />\n </div>\n )\n )\n })}\n </div>\n </SectionContainer>\n )\n })}\n </>\n)\n","import _isEmpty from 'lodash/isEmpty'\nimport _map from 'lodash/map'\nimport React from 'react'\n\nexport const Prewards = (props: IPrewardsProps) => {\n const {\n data,\n classNamePrefix = '',\n headerNode = (\n <>\n PRE\n <span>WARDS™</span>\n </>\n ),\n } = props\n return (\n <div className={`${classNamePrefix}_prewards`}>\n {!_isEmpty(data) && (\n <div className={`${classNamePrefix}_prewards_heder`}>{headerNode}</div>\n )}\n <div className={`${classNamePrefix}_prizes`}>\n {_map(data, prize => {\n const { description, name, image, id } = prize\n return (\n <div className={`${classNamePrefix}_prize`} key={id}>\n {image && <img className={`${classNamePrefix}_image`} alt=\"\" src={image} />}\n <div className={`${classNamePrefix}_info`}>\n <h4 className={`${classNamePrefix}_name`}>{name}</h4>\n {description && (\n <article className={`${classNamePrefix}_description`}>\n {description}\n </article>\n )}\n </div>\n </div>\n )\n })}\n </div>\n </div>\n )\n}\n","import _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport React, { useRef } from 'react'\n\ninterface ICopyFieldProps {\n copyValue: string;\n onLinkCopied?: () => void;\n copyIconSrc?: string;\n copyTitle?: string;\n hasCopyIcon: boolean;\n classNamePrefix?: string;\n messageText?: string;\n}\n\nexport const CopyField = (props: ICopyFieldProps) => {\n const {\n copyValue,\n copyIconSrc = 'https://img.icons8.com/office/50/000000/copy.png',\n copyTitle = 'Copy',\n hasCopyIcon = false,\n onLinkCopied = _identity,\n classNamePrefix = '',\n messageText = '',\n } = props\n\n const inputRef = useRef(null)\n\n return (\n <>\n {messageText && <span className=\"message-text\">{messageText}</span>}\n <input\n ref={inputRef}\n className={`${classNamePrefix}_share-input`}\n defaultValue={copyValue}\n readOnly={true}\n />\n <div\n className={`${classNamePrefix}_share-by-link-copy-icon`}\n aria-hidden={true}\n onClick={() => {\n navigator.clipboard.writeText(_get(inputRef, 'current.value'))\n onLinkCopied()\n }}\n >\n {hasCopyIcon ? (\n <img src={copyIconSrc} alt=\"copy\" />\n ) : (\n <span className={`${classNamePrefix}_copy-icon`}>{copyTitle}</span>\n )}\n </div>\n </>\n )\n}\n","import _identity from 'lodash/identity'\nimport _isEmpty from 'lodash/isEmpty'\nimport _some from 'lodash/some'\nimport React from 'react'\n\nimport { submitShareAction } from '../../api/preRegistrationComplete'\nimport { CopyField } from '../common/CopyField'\nimport SocialButtons from '../confirmationContainer/social-buttons'\nimport { getShuffleMethodByName, shareOptionsAdapter } from './utils'\n\nexport const ShareOptions = (props: IShareOptionsProps) => {\n const {\n classNamePrefix,\n data,\n hasCopyIcon = true,\n onLinkCopied = _identity,\n headerText = 'Share with your friends here ...',\n hash,\n updateShareActionData,\n shareActionData,\n } = props\n\n const {\n attributes: { actions, shareUrl },\n } = data\n\n const shareButtons = shareOptionsAdapter(actions, shareUrl)\n const isShareLinkEnabled = _some(\n actions,\n (item: IShareOptionsActionData) => item.action === 'shared_url'\n )\n const onAfterShare = async (eventActionId: string | undefined) => {\n const { shareActionToken, tokenShuffleMethod } = shareActionData\n const accessToken = getShuffleMethodByName(tokenShuffleMethod)(shareActionToken)\n if (typeof eventActionId === 'string') {\n await submitShareAction({\n eventActionId,\n accessToken,\n hash,\n })\n updateShareActionData()\n }\n }\n\n return (\n <div className={`${classNamePrefix}_share_options`}>\n {!_isEmpty(actions) && (\n <>\n <div className={`${classNamePrefix}_share_header`}>{headerText}</div>\n <SocialButtons\n shareLink={data.attributes.shareUrl}\n name=\"\"\n appId=\"\"\n showDefaultShareButtons={false}\n shareButtons={shareButtons}\n titleText=\"\"\n footerText=\"\"\n onAfterShare={(eventActionId: string | undefined) =>\n onAfterShare(eventActionId)\n }\n />\n {isShareLinkEnabled && (\n <div className={`${classNamePrefix}_share_btn_inner`}>\n <CopyField\n copyValue={shareUrl}\n onLinkCopied={onLinkCopied}\n hasCopyIcon={hasCopyIcon}\n classNamePrefix={classNamePrefix}\n messageText=\"Share your link\"\n />\n </div>\n )}\n </>\n )}\n </div>\n )\n}\n","import \"./style.css\"\n\nimport { ThemeOptions } from '@mui/material'\nimport { createTheme, ThemeProvider } from '@mui/material/styles'\nimport { CSSProperties } from '@mui/styles'\nimport axios, { AxiosError } from 'axios'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport _isEmpaty from 'lodash/isEmpty'\nimport React, { FC, useEffect, useState } from 'react'\n\nimport {\n getPreRegistrationInfluencers,\n getPreRegistrationShareOptions,\n} from '../../api/preRegistrationComplete'\nimport { X_TF_ECOMMERCE } from '../../constants'\nimport { useCookieListener } from '../../hooks'\nimport { getCookieByName, getQueryVariable } from '../../utils'\nimport { CopyMessageModal } from '../common'\nimport ConfirmModal from '../confirmModal'\nimport { LoginModal } from '../loginModal'\nimport { Prewards } from './Prewards'\nimport { ShareOptions } from './ShareOptions'\n\nconst isWindowDefined = typeof window !== 'undefined'\n\nexport const PreRegistrationComplete: FC<\n IPreRegistrationCompleteProps & {\n onGetConfirmationDataError?: (error: AxiosError) => void;\n skipInitialValidation?: boolean;\n themeOptions?: ThemeOptions & {\n input?: CSSProperties;\n checkbox?: CSSProperties;\n };\n }\n> = ({\n eventId: pEventId,\n classNamePrefix = '',\n onLinkCopied = _identity,\n hasCopyIcon = false,\n pageHeader = 'Pre-Registration Confirmation',\n onGetConfirmationDataError = _identity,\n onGetConfirmationDataSuccess = _identity,\n pageMessage = 'Pre registration was successful!',\n onLoginSuccess = _identity,\n logo,\n themeOptions,\n skipInitialValidation = false,\n}) => {\n const themeMui = createTheme(themeOptions)\n\n const localStorageHash = isWindowDefined\n ? localStorage.getItem('pre-registration-hash')\n : ''\n const queryHash = getQueryVariable('hash') || ''\n queryHash &&\n isWindowDefined &&\n window.localStorage.setItem('pre-registration-hash', queryHash)\n const hash = queryHash || localStorageHash\n const [isLoggedIn, setIsLoggedIn] = useState(Boolean(getCookieByName(X_TF_ECOMMERCE)))\n const [showModalLogin, setShowModalLogin] = useState(!isLoggedIn)\n const [showCopyModal, setShowCopyModal] = useState(false)\n const [prizes, setPrizes] = useState([] as Array<IPrizeData>)\n const [shareOptions, setShareOptions] = useState({} as IShareOptionsData)\n const [shareActionData, setShareActionData] = useState(\n {} as ISubmitShareActionAttributes\n )\n const [error, setError] = useState({} as AxiosError)\n useCookieListener(X_TF_ECOMMERCE, value => setIsLoggedIn(Boolean(value)))\n useEffect(() => {\n const fetchConfirmationData = async () => {\n // Skip validation if this is a freshly completed pre-registration\n if (skipInitialValidation) {\n onGetConfirmationDataSuccess()\n return\n }\n\n try {\n if (hash && isLoggedIn) {\n const shareOptionsData = await getPreRegistrationShareOptions({\n hash,\n })\n const { attributes } = shareOptionsData.data\n setShareOptions(shareOptionsData.data)\n setShareActionData({\n shareActionToken: attributes.shareActionToken,\n tokenShuffleMethod: attributes.tokenShuffleMethod,\n })\n const eventId = _get(shareOptionsData, 'data.attributes.eventId')\n if (eventId || pEventId) {\n const influencersData = await getPreRegistrationInfluencers({\n eventId: eventId || pEventId,\n })\n setPrizes(influencersData.data.attributes.prizes)\n }\n onGetConfirmationDataSuccess()\n }\n } catch (error) {\n if (axios.isAxiosError(error)) {\n setError(error.response?.data as AxiosError)\n }\n }\n }\n fetchConfirmationData()\n }, [\n pEventId,\n hash,\n onGetConfirmationDataError,\n onGetConfirmationDataSuccess,\n isLoggedIn,\n skipInitialValidation,\n ])\n\n const onClose = () => {\n setShowCopyModal(false)\n }\n\n const updateShareActionData = async () => {\n if (hash) {\n const shareOptionsData = await getPreRegistrationShareOptions({\n hash,\n })\n setShareOptions(shareOptionsData.data)\n setShareActionData({\n shareActionToken: shareOptionsData.data.attributes.shareActionToken,\n tokenShuffleMethod: shareOptionsData.data.attributes.tokenShuffleMethod,\n })\n }\n }\n return (\n <ThemeProvider theme={themeMui}>\n {isLoggedIn && _isEmpaty(error) ? (\n <div className={`${classNamePrefix}_pre_registration_complete_container`}>\n <CopyMessageModal showCopyModal={showCopyModal} onClose={onClose} />\n <h2 className={`${classNamePrefix}_pre_registration_complete_header preregistration_confirmation_header`}>\n {pageHeader}\n </h2>\n <div className={`${classNamePrefix}_pre_registration_complete_message`}>\n {pageMessage}\n </div>\n <div className={`${classNamePrefix}_pre_registration_complete_body`}>\n {!_isEmpaty(prizes) && (\n <Prewards classNamePrefix={classNamePrefix} data={prizes} />\n )}\n\n {!_isEmpaty(shareOptions) && (\n <ShareOptions\n classNamePrefix={classNamePrefix}\n data={shareOptions}\n onLinkCopied={() => {\n setShowCopyModal(true)\n onLinkCopied()\n }}\n shareActionData={shareActionData}\n updateShareActionData={updateShareActionData}\n hasCopyIcon={hasCopyIcon}\n hash={hash}\n />\n )}\n </div>\n </div>\n ) : (\n showModalLogin && (\n <LoginModal\n logo={logo}\n onClose={() => {\n setShowModalLogin(false)\n }}\n onLogin={res => {\n setShowModalLogin(false)\n onLoginSuccess(res)\n }}\n showForgotPasswordButton\n />\n )\n )}\n {!_isEmpaty(error) && (\n <ConfirmModal\n hideCancelBtn\n message={error.message}\n onConfirm={() => onGetConfirmationDataError(error)}\n />\n )}\n </ThemeProvider>\n )\n }\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Button, CircularProgress, ThemeOptions } from '@mui/material'\nimport { createTheme, ThemeProvider } from '@mui/material/styles'\nimport { CSSProperties } from '@mui/styles'\nimport axios, { AxiosError } from 'axios'\nimport { Form, Formik, FormikValues } from 'formik'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport _map from 'lodash/map'\nimport React, { FC, useEffect, useState } from 'react'\n\nimport { confirmPreRegistration, getCountries, getProfileData, register } from '../../api'\nimport { useCookieListener } from '../../hooks/useCookieListener'\nimport { CONFIGS, getCookieByName, getQueryVariable } from '../../utils'\nimport SnackbarAlert from '../common/SnackbarAlert'\nimport ConfirmModal from '../confirmModal'\nimport { ForgotPasswordModal, IForgotPasswordProps } from '../forgotPasswordModal'\nimport { LoginModal, Props } from '../loginModal'\nimport { getFormFieldsLoggedIn, getFormFieldsNotLoggedIn } from './constants'\nimport { FieldsSection } from './FieldsSection'\nimport { PreRegistrationComplete } from './PreRegistrationComplete'\nimport { getFormInitialValues, updateFormFieldsAttributes } from './utils'\n\nconst X_TF_ECOMMERCE = 'X-TF-ECOMMERCE'\nconst isWindowDefined = typeof window !== 'undefined'\n\ninterface IPreRegistrationProps extends Props, IForgotPasswordProps {\n eventId: string | number;\n formFields?: IFormFieldsSection[];\n additionalFieldAttribute?: IFieldAttribute;\n isPreregistrationStarted: boolean;\n onGetCountriesSuccess?: (res: any) => void;\n onGetCountriesError?: (e: AxiosError) => void;\n onConfirmationSuccess?: (res: any) => void;\n onConfirmationError?: (e: AxiosError) => void;\n onLoginSuccess?: (res: any) => void;\n\n themeOptions?: ThemeOptions & {\n input?: CSSProperties;\n checkbox?: CSSProperties;\n };\n}\n\nexport const PreRegistration: FC<IPreRegistrationProps> = ({\n eventId,\n formFields: pFormFields,\n additionalFieldAttribute,\n isPreregistrationStarted,\n logo,\n showForgotPasswordButton,\n onLoginSuccess = _identity,\n onForgotPasswordSuccess = _identity,\n onForgotPasswordError = _identity,\n onGetCountriesSuccess = _identity,\n onGetCountriesError = _identity,\n onConfirmationSuccess = _identity,\n onConfirmationError = _identity,\n themeOptions,\n}) => {\n const [error, setError] = useState('')\n const [showModalLogin, setShowModalLogin] = useState(false)\n const [alreadyHasUser, setAlreadyHasUser] = useState(false)\n const [showModalForgotPassword, setShowModalForgotPassword] = useState(false)\n const [countries, setCountries] = useState<{ [key: string]: string | number }[]>([])\n const [isLoggedIn, setIsLoggedIn] = useState(Boolean(getCookieByName(X_TF_ECOMMERCE)))\n const [confirmModalState, setConfirmModalState] = useState({ show: false, message: '' })\n const [, setUserData] = useState({} as IProfileData)\n const [isPreRegistrationComplete, setIsPreRegistrationComplete] = useState(false)\n useCookieListener(X_TF_ECOMMERCE, value => setIsLoggedIn(Boolean(value)))\n\n // Check if user already has a pre-registration when logged in\n useEffect(() => {\n if (!isLoggedIn || !isWindowDefined) return\n\n const savedHash = window.localStorage.getItem(`pre-registration-hash-${eventId}`)\n if (savedHash) {\n setIsPreRegistrationComplete(true)\n }\n }, [isLoggedIn, eventId])\n\n const themeMui = createTheme(themeOptions)\n\n const formFieldsLoggedIn = getFormFieldsLoggedIn(CONFIGS.CLIENT_NAME)\n const formFieldsNotLoggedIn = getFormFieldsNotLoggedIn(CONFIGS.CLIENT_NAME)\n\n const formFields = updateFormFieldsAttributes(\n pFormFields || isLoggedIn ? formFieldsLoggedIn : formFieldsNotLoggedIn,\n additionalFieldAttribute\n )\n\n useEffect(() => {\n // fetch countries data\n const fetchCountries = async () => {\n try {\n const res = await getCountries()\n setCountries(\n _map(_get(res, 'data'), item => ({\n label: item.name,\n value: Number(item.id),\n }))\n )\n onGetCountriesSuccess(res.data)\n } catch (e) {\n if (axios.isAxiosError(e)) {\n const error = 'Error'\n setError(error)\n onGetCountriesError(e)\n }\n }\n }\n fetchCountries()\n }, [])\n\n const localStorageHash = isWindowDefined\n ? window.localStorage.getItem('pre-registration-hash') || ''\n : ''\n const hash = getQueryVariable('hash') || localStorageHash\n const referrerId = getQueryVariable('referrer_id') || ''\n return (\n <ThemeProvider theme={themeMui}>\n <div className=\"pre-registration-container\">\n <SnackbarAlert\n type=\"error\"\n isOpen={!!error}\n message={error || ''}\n onClose={() => {\n setError('')\n }}\n />\n {confirmModalState.show && (\n <ConfirmModal\n hideCancelBtn\n onConfirm={() => setConfirmModalState({ show: false, message: '' })}\n message={confirmModalState.message}\n />\n )}\n {!isLoggedIn && (\n <div className=\"account-actions-block\">\n <div className=\"action-item\">\n <div>\n <span>\n Create (or log in to) your account, then click on Confirm Registration.\n </span>\n <span> If you have a</span>\n <b> {CONFIGS.CLIENT_NAME || 'Mana Common'} </b>\n <span>account and password already</span>\n </div>\n </div>\n <div className=\"action-item login-block\">\n <button\n className=\"login-register-button\"\n type=\"button\"\n onClick={() => {\n setShowModalLogin(true)\n }}\n >\n Login\n </button>\n </div>\n </div>\n )}\n {showModalLogin && (\n <LoginModal\n logo={logo}\n onClose={() => {\n setShowModalLogin(false)\n }}\n onLogin={res => {\n setShowModalLogin(false)\n onLoginSuccess(res)\n }}\n showForgotPasswordButton={showForgotPasswordButton}\n onForgotPassword={() => {\n setShowModalLogin(false)\n setShowModalForgotPassword(true)\n }}\n alreadyHasUser={alreadyHasUser}\n />\n )}\n {showModalForgotPassword && (\n <ForgotPasswordModal\n onClose={() => {\n setShowModalForgotPassword(false)\n }}\n onLoginButtonClick={() => {\n setShowModalForgotPassword(false)\n setShowModalLogin(true)\n }}\n onForgotPasswordSuccess={onForgotPasswordSuccess}\n onForgotPasswordError={onForgotPasswordError}\n displaySuccessMessage\n />\n )}\n {isPreRegistrationComplete ? (\n <PreRegistrationComplete\n eventId={eventId}\n logo={logo}\n themeOptions={themeOptions}\n onLoginSuccess={onLoginSuccess}\n data={{} as IShareOptionsData}\n classNamePrefix=\"\"\n onLinkCopied={_identity}\n updateShareActionData={_identity}\n hash={hash}\n shareActionData={{} as ISubmitShareActionAttributes}\n skipInitialValidation={true}\n />\n ) : (\n <>\n <h2>Pre-Registration</h2>\n <Formik\n initialValues={getFormInitialValues(formFields)}\n enableReinitialize={true}\n onSubmit={async (values: FormikValues) => {\n try {\n if (isLoggedIn) {\n if (isPreregistrationStarted) {\n const updatedValues = { ...values }\n const holderAgeDate = new Date(values.holderAge)\n updatedValues.dobDay = holderAgeDate.getDate()\n updatedValues.dobMonth = holderAgeDate.getMonth() + 1\n updatedValues.dobYear = holderAgeDate.getFullYear()\n updatedValues.referrerId = referrerId\n updatedValues.shareHash = hash\n // remove date picker string value\n delete updatedValues.holderAge\n\n const confirmationData = await confirmPreRegistration(\n eventId,\n updatedValues as IConfirmPreRegistrationRequestData\n )\n if (isWindowDefined) {\n window.localStorage.setItem(\n `pre-registration-hash-${eventId}`,\n _get(confirmationData, 'attributes.hash')\n )\n }\n\n setIsPreRegistrationComplete(true)\n onConfirmationSuccess(confirmationData)\n } else {\n setConfirmModalState({\n show: true,\n message: 'The preregistration has not started',\n })\n }\n } else {\n const bodyFormData = new FormData()\n bodyFormData.append('first_name', values.firstName)\n bodyFormData.append('last_name', values.lastName)\n bodyFormData.append('email', values.email)\n bodyFormData.append('confirm_email', values.confirmEmail)\n bodyFormData.append('zip', values.zip)\n bodyFormData.append('country', values.country)\n bodyFormData.append('password', values.password)\n bodyFormData.append('password_confirmation', values.confirmPassword)\n bodyFormData.append('client_id', CONFIGS.CLIENT_ID)\n bodyFormData.append('client_secret', CONFIGS.CLIENT_SECRET)\n bodyFormData.append('register_for', 'prereg')\n\n const res = await register(bodyFormData)\n const profileRes = await getProfileData()\n onLoginSuccess(res.data)\n if (isWindowDefined) {\n window.localStorage.setItem(\n 'user_data',\n JSON.stringify(_get(profileRes, 'data'))\n )\n setUserData(_get(profileRes, 'data'))\n }\n }\n } catch (e) {\n const error = e as AxiosError\n let errorMessage = error?.message || 'Error'\n const emailErrors = _get(error, 'response.data.message.email') || ''\n const errorDataMessage = _get(error, 'response.data.message')\n\n if (typeof errorDataMessage === 'string') {\n errorMessage = errorDataMessage\n }\n if (emailErrors?.length > 0) {\n if (emailErrors[0] === 'The email is already used') {\n setShowModalLogin(true)\n setAlreadyHasUser(true)\n }\n } else {\n setError(errorMessage)\n }\n\n onConfirmationError(error)\n }\n }}\n >\n {props => (\n <Form>\n <div className=\"login-modal-body\">\n <FieldsSection\n formFields={formFields}\n values={props.values}\n setFieldValue={props.setFieldValue}\n containerClass=\"pre-registration\"\n countries={countries}\n themeOptions={themeOptions}\n />\n </div>\n <div className=\"button-container\">\n <Button\n type=\"submit\"\n variant=\"contained\"\n className=\"login-register-button\"\n disabled={props.isSubmitting}\n >\n {props.isSubmitting ? (\n <CircularProgress size={26} />\n ) : isLoggedIn ? (\n 'Confirm Pre-Registration'\n ) : (\n 'Create Account'\n )}\n </Button>\n </div>\n </Form>\n )}\n </Formik>\n </>\n )}\n </div>\n </ThemeProvider>\n )\n}\n","import './style.css'\n\nimport Button from '@mui/material/Button'\nimport CircularProgress from '@mui/material/CircularProgress'\nimport { Field, Form, Formik } from 'formik'\nimport _find from 'lodash/find'\nimport React, { useState } from 'react'\n\nimport { addToWaitingList } from '../../api'\nimport { isBrowser } from '../../utils'\nimport { ErrorFocus } from '../../utils/formikErrorFocus'\nimport {\n combineValidators,\n emailValidator,\n requiredValidator,\n} from '../../validators'\nimport { CustomField } from '../common/index'\n\ninterface WaitingListProps {\n tickets: any;\n eventId: number;\n defaultMaxQuantity: number;\n}\n\ninterface WaitingListFields {\n ticketTypeId: string;\n quantity: string;\n firstName: string;\n lastName: string;\n email: string;\n}\n\nconst generateQuantity = (n: number) => {\n const quantityList = []\n for (let i = 1; i <= n; i++) {\n quantityList.push({ label: i, value: i })\n }\n return quantityList\n}\n\nconst WaitingList = ({\n tickets = {},\n eventId,\n defaultMaxQuantity = 10,\n}: WaitingListProps) => {\n const userData =\n isBrowser && window.localStorage.getItem('user_data')\n ? JSON.parse(window.localStorage.getItem('user_data') || '')\n : {}\n\n const [showSuccessMessage, setShowSuccessMessage] = useState(false)\n const [loading, setLoading] = useState(false)\n const ticketTypesList = Object.values(tickets).map((d: any) => ({\n label: d.displayName,\n value: d.id,\n }))\n\n const showTicketsField = Boolean(ticketTypesList.length)\n\n const handleSubmit = async (values: WaitingListFields) => {\n try {\n setLoading(true)\n const response = await addToWaitingList(eventId, { attributes: values })\n\n if (response.success) {\n setShowSuccessMessage(true)\n }\n } catch (error) {\n } finally {\n setLoading(false)\n }\n }\n\n return (\n <div className=\"waiting-list\">\n {showSuccessMessage ? (\n <div className=\"success-message\">\n <p className=\"added-success-message\">You've been added to the waiting list!</p>\n <p>You'll be notified if tickets become available.</p>\n </div>\n ) : (\n <>\n <h2>WAITING LIST</h2>\n <Formik\n initialValues={{\n ticketTypeId: '',\n quantity: '',\n firstName: userData.first_name || '',\n lastName: userData.last_name || '',\n email: userData.email || '',\n }}\n onSubmit={handleSubmit}\n >\n {({ values, setFieldValue }) => {\n const selectedTicket = _find(tickets, n => n.id === values.ticketTypeId)\n return (\n <Form>\n <ErrorFocus />\n {showTicketsField && (\n <>\n <div className=\"field-item\">\n <Field\n name=\"ticketTypeId\"\n label=\"Type of Ticket\"\n type=\"select\"\n component={CustomField}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n setFieldValue('ticketTypeId', e.target.value)\n setFieldValue('quantity', '')\n }}\n selectOptions={[\n { label: 'Type of Ticket', value: '', disabled: true },\n ...ticketTypesList,\n ]}\n />\n </div>\n <div className=\"field-item\">\n <Field\n name=\"quantity\"\n label=\"Quantity Requested\"\n type=\"select\"\n component={CustomField}\n selectOptions={[\n {\n label: 'Quantity Requested',\n value: '',\n disabled: true,\n },\n ...generateQuantity(selectedTicket?.waitingListMaxQuantity || (defaultMaxQuantity ?? 10)\n ),\n ]}\n />\n </div>\n </>\n )}\n <div className=\"field-item\">\n <Field\n name=\"firstName\"\n label=\"First name\"\n validate={(value: string) =>\n requiredValidator(value, 'Please enter your First name')\n }\n component={CustomField}\n />\n </div>\n <div className=\"field-item\">\n <Field\n name=\"lastName\"\n label=\"Last name\"\n validate={(value: string) =>\n requiredValidator(value, 'Please enter your Last name')\n }\n component={CustomField}\n />\n </div>\n <div className=\"field-item\">\n <Field\n name=\"email\"\n label=\"Email\"\n validate={combineValidators(\n (value: string) =>\n requiredValidator(value, 'Please enter your Email'),\n (value: string) => emailValidator(value)\n )}\n component={CustomField}\n />\n </div>\n\n <Button\n type=\"submit\"\n variant=\"contained\"\n className=\"waiting-list-button\"\n >\n {loading ? (\n <CircularProgress size=\"22px\" />\n ) : (\n 'ADD TO WAITING LIST'\n )}\n </Button>\n </Form>\n )\n }}\n </Formik>\n </>\n )}\n </div>\n )\n}\n\nexport default WaitingList\n","import React from 'react'\nimport Button from 'react-bootstrap/Button'\n\nexport interface IAccessCodeSectionProps {\n code: string;\n setCode: (value: string) => void;\n updateTickets: (value: boolean) => void;\n}\n\n// This section is seperate because additional changes layter may be applied to Access Code\n\nexport const AccessCodeSection = ({\n code,\n setCode,\n updateTickets\n}: IAccessCodeSectionProps) => {\n const isAccessCodeHasValue = !!code.trim()\n\n return (\n <div className=\"access-code-block\">\n <div className=\"access-code-block\">\n <p className=\"access-code-text\">\n Access code required\n </p>\n </div>\n <input\n className=\"access-code-input\"\n placeholder=\"\"\n onChange={e => {\n setCode(e.target.value)\n }}\n onKeyPress={event => {\n if (event.key === 'Enter' && isAccessCodeHasValue) {\n updateTickets(true)\n }\n }}\n />\n <Button\n className=\"access-submit-button\"\n onClick={() => {\n if (isAccessCodeHasValue) {\n updateTickets(true)\n }\n }}\n >\n ENTER\n </Button>\n </div>\n )\n}\n","import React from 'react'\nimport Button from 'react-bootstrap/Button'\nimport SVG from 'react-inlinesvg'\n\nimport DoneSvg from '../../assets/images/done.svg'\nimport XmarkSvg from '../../assets/images/xmark.svg'\n\nexport interface IPromoCodeSectionProps {\n code: string;\n codeIsApplied: boolean;\n showPromoInput: boolean;\n setCode: (value: string) => void;\n setShowPromoInput: (value: boolean) => void;\n updateTickets: (value: boolean, type: string) => void;\n setCodeIsApplied: (value: boolean) => void;\n codeIsInvalid: boolean;\n setCodeIsInvalid: (value: boolean) => void;\n promoText?: string;\n showAlertIcons?: boolean;\n}\n\nexport const PromoCodeSection = ({\n code,\n codeIsApplied,\n showPromoInput,\n setCode,\n setShowPromoInput,\n updateTickets,\n setCodeIsApplied,\n codeIsInvalid,\n setCodeIsInvalid,\n promoText,\n showAlertIcons\n}: IPromoCodeSectionProps) => {\n const isPromoCodeHasValue = !!code.trim()\n const appliedPromoCode = window?.localStorage?.getItem('appliedPromoCode')\n\n const renderInputField = () => (\n <div className=\"promo-code-block\">\n <div className=\"promo-code-block\">\n <p className=\"promo-code-text\">Promo code</p>\n </div>\n <input\n className=\"promo-code-input\"\n placeholder=\"\"\n onChange={e => {\n setCode(e.target.value)\n }}\n onKeyPress={event => {\n if (event.key === 'Enter' && isPromoCodeHasValue) {\n setShowPromoInput(false)\n updateTickets(true, 'promo')\n }\n }}\n />\n <Button\n className=\"promo-submit-button\"\n onClick={() => {\n if (isPromoCodeHasValue) {\n setShowPromoInput(false)\n updateTickets(true, 'promo')\n }\n }}\n >\n APPLY\n </Button>\n </div>\n )\n\n return (\n <div>\n {codeIsApplied ? (\n <div className=\"alert-info\">\n {showAlertIcons && (\n <SVG\n src={DoneSvg}\n preProcessor={code =>\n code.replace(/fill=\".*?\"/g, 'fill=\"currentColor\"')\n }\n />\n )}\n <p className=\"promo-code-success\">PROMO CODE APPLIED SUCCESSFULLY</p>\n </div>\n ) : null}\n {codeIsApplied ? (\n <div className=\"alert-info\">\n <p className=\"promo-code-success\">PROMO CODE: {appliedPromoCode}</p>\n </div>\n ) : null}\n {codeIsInvalid ? (\n <div className=\"alert-info fail\">\n {showAlertIcons && (\n <SVG\n src={XmarkSvg}\n />\n )}\n <p className=\"promo-code-fail\">Invalid Promo Code</p>\n </div>\n ) : null}\n {!showPromoInput && (\n <Button\n className=\"promo-code-button\"\n placeholder=\"Promo Codes\"\n onClick={() => {\n setCodeIsApplied(false)\n setShowPromoInput(true)\n setCodeIsInvalid(false)\n }}\n >\n {promoText ?? 'Got a promo code? Click here'}\n </Button>\n )}\n {showPromoInput && renderInputField()}\n </div>\n )\n}","import { useEffect } from 'react'\n\nimport { postReferralVisits } from '../../api'\n\ninterface IReferralLogicProps {\n eventId: string | number;\n}\n\nexport const ReferralLogic = (props: IReferralLogicProps) => {\n const { eventId } = props\n\n useEffect(() => {\n const isWindowDefined = typeof window !== 'undefined'\n\n if (isWindowDefined) {\n const params: URLSearchParams = new URL(`${window.location}`).searchParams\n const referralId = params.get('ttf_r') || params.get('referrer_id') || ''\n const referralValue = [eventId, '.', referralId].join('')\n const isAlreadyCounted = localStorage.getItem('referral_key') === referralValue\n\n if (referralId && eventId && !isAlreadyCounted) {\n (async () => {\n try {\n await postReferralVisits(`${eventId}`, referralId)\n localStorage.setItem('referral_key', referralValue)\n } catch (error) {}\n })()\n }\n }\n }, [eventId])\n\n return null\n}\n","export const getTicketSelectOptions = (maxCount = 10, minCount = 1, multiplier = 1) => {\n const options = [{ label: 0, value: 0 }]\n for (let i = minCount || 1; i <= Math.min(50, maxCount); i += multiplier) {\n options.push({ label: i, value: i })\n }\n return options\n}\n\ninterface eventDatesInfo {\n salesStarted: boolean;\n salesEnded: boolean;\n presalesStarted: boolean;\n presalesEnded: boolean;\n presalesEnabled: boolean;\n}\n\nexport const defineIsSalesClosed = (eventDatesInfo: eventDatesInfo): boolean => {\n const { salesStarted, salesEnded, presalesStarted, presalesEnded, presalesEnabled } =\n eventDatesInfo\n let isSalesClosed = false\n if (!salesStarted || (salesStarted && salesEnded)) {\n isSalesClosed = true\n }\n if (presalesEnabled) {\n if (\n (!presalesStarted && !presalesEnded) ||\n (presalesStarted && presalesEnded && !salesStarted)\n ) {\n isSalesClosed = true\n } else {\n isSalesClosed = false\n }\n }\n return isSalesClosed\n}\n","import './style.css'\n\nimport Box from '@mui/material/Box'\nimport FormControl from '@mui/material/FormControl'\nimport MenuItem from '@mui/material/MenuItem'\nimport Select from '@mui/material/Select'\nimport _get from 'lodash/get'\nimport React from 'react'\n\nimport { defineIsSalesClosed, getTicketSelectOptions } from './utils'\n\ninterface ITicketRowProps {\n ticketTier: any;\n prevTicketTier: any;\n selectedTickets: any;\n handleTicketSelect: any;\n event: any;\n isSeatMapAllowed?: boolean;\n tableType?: boolean;\n}\n\nexport const TicketRow = ({\n ticketTier,\n prevTicketTier,\n selectedTickets,\n handleTicketSelect,\n event,\n isSeatMapAllowed,\n tableType,\n}: ITicketRowProps) => {\n const soldOutMessage = ticketTier.soldOutMessage\n ? `${ticketTier.soldOutMessage}`.toUpperCase()\n : 'SOLD OUT'\n const isSalesClosed = defineIsSalesClosed({\n salesStarted: ticketTier.salesStarted,\n salesEnded: ticketTier.salesEnded,\n presalesStarted: event?.presalesStarted,\n presalesEnded: event?.presalesEnded,\n presalesEnabled: event?.presales_enabled,\n })\n const maxCount = tableType ? ticketTier.maxGuests : ticketTier.maxQuantity\n const minCount = tableType ? ticketTier.minGuests : ticketTier.minQuantity\n const { multiplier } = ticketTier\n const options = getTicketSelectOptions(maxCount, minCount, multiplier)\n\n const ticketsClosedMessage = !ticketTier.salesStarted\n ? 'Sales not started'\n : 'Sales Ended'\n const canPurchaseTicket = ticketTier.displayTicket && ticketTier.maxQuantity\n const isDirectPurchaseAllowed = _get(ticketTier, 'allowDirectPurchase', false)\n\n const onSaleContent = (\n <div className=\"get-tickets\">\n {ticketTier.isTable && <span>GUESTS</span>}\n <Box className=\"get-tickets__selectbox\">\n <FormControl fullWidth>\n <Select\n sx={{ borderRadius: 0 }}\n value={selectedTickets[ticketTier.id] ? selectedTickets[ticketTier.id] : 0}\n onChange={handleTicketSelect}\n displayEmpty\n inputProps={{ 'aria-label': 'Without label' }}\n MenuProps={{\n PaperProps: {\n sx: { maxHeight: 150 },\n className: 'get-tickets-paper',\n },\n }}\n >\n {options.map((option, index) => (\n <MenuItem key={index} value={option.value}>\n {option.value}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </Box>\n </div>\n )\n\n let returnValue: any = ''\n\n // ticketTier.soldOut === false --> means that ticket is in the stock\n const isSoldOut =\n ticketTier.sold_out ||\n !(ticketTier.displayTicket || ticketTier.slotGroupId) ||\n ticketTier.soldOut ||\n ticketTier.soldOut === false\n\n if (isSoldOut) {\n returnValue = soldOutMessage\n } else if (isSalesClosed) {\n returnValue = ticketsClosedMessage\n } else if (canPurchaseTicket && isSeatMapAllowed && !isDirectPurchaseAllowed) {\n // Seat Map Tickets renderer logic\n returnValue = null\n } else if (\n canPurchaseTicket ||\n (canPurchaseTicket && event?.presalesStarted && !event?.presalesEnded)\n ) {\n returnValue = onSaleContent\n } else if (_get(prevTicketTier, 'in_stock')) {\n returnValue = 'SOON'\n }\n\n return <>{returnValue} </>\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport './style.css'\n\nimport _get from 'lodash/get'\nimport _sortBy from 'lodash/sortBy'\nimport React, { ReactNode, useState } from 'react'\nimport { Tooltip } from 'react-tooltip'\n\nimport { FEES_STYLES } from '../../constants'\nimport { CONFIGS } from '../../utils'\nimport InfoIcon from './InfoIcon'\nimport { TicketRow } from './TicketRow'\n\nfunction decodeHTML(html: string): string {\n const textArea = document.createElement('textarea')\n textArea.innerHTML = html\n return textArea.value\n}\n\ninterface ITicketsSectionProps {\n event: any;\n ticketsList: any;\n selectedTickets: any;\n handleTicketSelect: any;\n sortBySoldOut: boolean;\n hideTicketsHeader: boolean;\n hideTableTicketsHeader: boolean;\n tableTickets: any;\n ticketsHeaderComponent?: ReactNode;\n tableTicketsHeaderComponent?: ReactNode;\n showGroupNameBlock?: boolean;\n currencySymbol?: string;\n isSeatMapAllowed?: boolean;\n descriptionTrigger?: 'click' | 'hover';\n}\n\nexport const TicketsSection = ({\n event,\n ticketsList,\n selectedTickets,\n handleTicketSelect,\n sortBySoldOut,\n ticketsHeaderComponent,\n tableTicketsHeaderComponent,\n hideTicketsHeader,\n hideTableTicketsHeader,\n showGroupNameBlock,\n currencySymbol,\n isSeatMapAllowed,\n tableTickets,\n descriptionTrigger = 'click',\n}: ITicketsSectionProps) => {\n const symbol = _get(event, 'currency.symbol')\n const sortedTicketsList = sortBySoldOut\n ? _sortBy(_sortBy(ticketsList, 'sortOrder'), 'soldOut')\n : _sortBy(ticketsList, 'sortOrder')\n const showGroup = !!sortedTicketsList.find(ticket => ticket.groupName)\n const priceSymbol = currencySymbol || symbol\n\n const [visibleDescription, setVisibleDescription] = useState<string | null>(null)\n\n const handleDescriptionToggle = (ticketId: string) => {\n setVisibleDescription(current => (current === ticketId ? null : ticketId))\n }\n\n return (\n <>\n {!hideTicketsHeader && ticketsHeaderComponent}\n {sortedTicketsList.map((ticket, i, arr) => {\n const ticketPriceWithoutFees = `${priceSymbol} ${(+ticket.cost).toFixed(2)}`\n const ticketPriceWithFees = `${priceSymbol} ${(+ticket.basePrice).toFixed(2)}`\n const ticketOldPriceWithFees = `${priceSymbol} ${(+ticket.oldBasePrice).toFixed(2)}`\n const ticketOldPriceWithoutFees = `${priceSymbol} ${(+ticket.oldCost).toFixed(2)}`\n const ticketFinalPrice = ticket.feeIncluded && !ticket.isForward\n ? +(ticket.x_face_value || ticket.basePrice)\n : ticket.feeIncluded ? +ticket.basePrice : +ticket.cost\n const ticketFinalPriceFormatted = `${priceSymbol} ${Math.round(ticketFinalPrice)}`\n const ticketOldFinalPrice = ticket.feeIncluded && !ticket.isForward\n ? +(ticket.x_face_value || ticket.basePrice)\n : ticket.feeIncluded ? +ticket.oldBasePrice : +ticket.oldCost\n const ticketOldFinalPriceFormatted = `${priceSymbol} ${Math.round(ticketOldFinalPrice)}`\n const ticketFeeAmount = (+ticket.basePrice - +ticket.cost).toFixed(2)\n const ticketBreakdown = !ticket.feeIncluded\n ? '(+ fees at checkout)'\n : !ticket.isForward\n ? null\n : (parseFloat(ticketFeeAmount) > 0 ? `(${priceSymbol} ${(+ticket.cost).toFixed(2)} + ${priceSymbol} ${ticketFeeAmount} fee)` : null)\n\n const isSoldOut =\n ticket.sold_out ||\n !(ticket.displayTicket || ticket.slotGroupId) ||\n ticket.soldOut\n const ticketSelect = (event: any) => {\n const { value } = event.target\n handleTicketSelect(ticket.id, value)\n }\n\n let ticketIsDiscounted = false\n if (ticket.oldPrice && !isSoldOut && ticket.oldPrice !== ticket.price) {\n ticketIsDiscounted = true\n }\n\n const ticketIsFree = +ticket.price === 0\n const discountTicketPriceElem = CONFIGS.FEES_STYLE === FEES_STYLES.FINAL_WITH_BREAKDOWN\n ? ticketOldFinalPriceFormatted\n : CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH || !ticket.feeIncluded\n ? ticketOldPriceWithoutFees\n : ticketOldPriceWithFees\n const ticketPriceElem = isSoldOut\n ? 'SOLD OUT'\n : ticketIsFree\n ? 'FREE'\n : CONFIGS.FEES_STYLE === FEES_STYLES.FINAL_WITH_BREAKDOWN\n ? ticketFinalPriceFormatted\n : (CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH || !ticket.feeIncluded)\n ? ticketPriceWithoutFees\n : ticketPriceWithFees\n const isNewGroupTicket = ticket?.groupName !== arr[i - 1]?.groupName\n\n return (\n <React.Fragment key={ticket.id || ticket.name}>\n {showGroupNameBlock && showGroup && isNewGroupTicket ? (\n <div className=\"event-detail__tier group-title\">\n {ticket.groupName || ''}\n </div>\n ) : null}\n <div\n className={`event-detail__tier ${isSoldOut ? 'disabled' : ''}`}\n id={ticket.id || ticket.name}\n >\n <div className=\"event-detail__tier-name\">\n {ticket.displayName || ticket.name}\n {ticket.descriptionRich && (\n <>\n <span\n aria-hidden\n className=\"info-icon\"\n onClick={\n descriptionTrigger === 'click'\n ? () => handleDescriptionToggle(ticket.id)\n : undefined\n }\n onMouseEnter={\n descriptionTrigger === 'hover'\n ? () => setVisibleDescription(ticket.id)\n : undefined\n }\n onMouseLeave={\n descriptionTrigger === 'hover'\n ? () => setVisibleDescription(null)\n : undefined\n }\n data-tooltip-id={`tooltip-${ticket.id}`}\n data-tooltip-content=\"View ticket info\"\n style={{\n marginLeft: 8,\n cursor: 'pointer',\n display: 'flex',\n }}\n >\n <InfoIcon />\n </span>\n\n <Tooltip id={`tooltip-${ticket.id}`} place=\"top\">\n {ticket.description || 'No description available'}\n </Tooltip>\n </>\n )}\n </div>\n <div className=\"event-tickets-container\">\n <div className=\"event-detail__tier-price\">\n {ticketIsDiscounted && <p className=\"old-price\">{discountTicketPriceElem}</p>}\n <p className={isSoldOut ? 'sold-out' : ''}>{ticketPriceElem}</p>\n {!isSoldOut && !ticketIsFree && (\n <p className=\"fees\">\n {CONFIGS.FEES_STYLE === FEES_STYLES.TRADITIONAL &&\n (ticket.feeIncluded ? '(incl. Fees)' : '(excl. Fees)')}\n {CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH &&\n `(${ticketPriceWithFees} with fees)`}\n {CONFIGS.FEES_STYLE === FEES_STYLES.FINAL_WITH_BREAKDOWN &&\n ticketBreakdown}\n </p>\n )}\n </div>\n <div className=\"event-detail__tier-state\" style={{ minWidth: 55 }}>\n <TicketRow\n ticketTier={ticket}\n prevTicketTier={arr[i - 1]}\n selectedTickets={selectedTickets}\n handleTicketSelect={ticketSelect}\n event={event}\n />\n </div>\n </div>\n {visibleDescription === ticket.id && (\n <div className=\"ticket-description\">\n <div\n dangerouslySetInnerHTML={{\n __html: decodeHTML(ticket.descriptionRich),\n }}\n />\n </div>\n )}\n </div>\n </React.Fragment>\n )\n })}\n {!hideTableTicketsHeader && tableTicketsHeaderComponent}\n {tableTickets.map((ticket: any, i: any, arr: any) => {\n const ticketPriceWithoutFees = `${priceSymbol} ${(+ticket.cost).toFixed(2)}`\n const ticketPriceWithFees = `${priceSymbol} ${(+ticket.basePrice).toFixed(2)}`\n const ticketOldPriceWithFees = `${priceSymbol} ${(+ticket.oldBasePrice).toFixed(2)}`\n const ticketOldPriceWithoutFees = `${priceSymbol} ${(+ticket.oldCost).toFixed(2)}`\n const ticketFinalPrice = ticket.feeIncluded && !ticket.isForward\n ? +(ticket.x_face_value || ticket.basePrice)\n : ticket.feeIncluded ? +ticket.basePrice : +ticket.cost\n const ticketFinalPriceFormatted = `${priceSymbol} ${Math.round(ticketFinalPrice)}`\n const ticketOldFinalPrice = ticket.feeIncluded && !ticket.isForward\n ? +(ticket.x_face_value || ticket.basePrice)\n : ticket.feeIncluded ? +ticket.oldBasePrice : +ticket.oldCost\n const ticketOldFinalPriceFormatted = `${priceSymbol} ${Math.round(ticketOldFinalPrice)}`\n const ticketFeeAmount = (+ticket.basePrice - +ticket.cost).toFixed(2)\n const ticketBreakdown = !ticket.feeIncluded\n ? '(+ fees at checkout)'\n : !ticket.isForward\n ? null\n : (parseFloat(ticketFeeAmount) > 0 ? `(${priceSymbol} ${(+ticket.cost).toFixed(2)} + ${priceSymbol} ${ticketFeeAmount} fee)` : null)\n\n const isSoldOut =\n ticket.sold_out ||\n !(ticket.displayTicket || ticket.slotGroupId) ||\n ticket.soldOut\n const ticketSelect = (event: any) => {\n const { value } = event.target\n handleTicketSelect(ticket.id, value, true)\n }\n\n let ticketIsDiscounted = false\n if (ticket.oldPrice && !isSoldOut && ticket.oldPrice !== ticket.price) {\n ticketIsDiscounted = true\n }\n\n const ticketIsFree = +ticket.price === 0\n const discountTicketPriceElem = CONFIGS.FEES_STYLE === FEES_STYLES.FINAL_WITH_BREAKDOWN\n ? ticketOldFinalPriceFormatted\n : CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH || !ticket.feeIncluded\n ? ticketOldPriceWithoutFees\n : ticketOldPriceWithFees\n const ticketPriceElem = isSoldOut\n ? 'SOLD OUT'\n : ticketIsFree\n ? 'FREE'\n : CONFIGS.FEES_STYLE === FEES_STYLES.FINAL_WITH_BREAKDOWN\n ? ticketFinalPriceFormatted\n : (CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH || !ticket.feeIncluded)\n ? ticketPriceWithoutFees\n : ticketPriceWithFees\n const isNewGroupTicket = ticket?.groupName !== arr[i - 1]?.groupName\n\n return (\n <React.Fragment key={ticket.id || ticket.name}>\n {showGroupNameBlock && showGroup && isNewGroupTicket ? (\n <div className=\"event-detail__tier group-title\">\n {ticket.groupName || ''}\n </div>\n ) : null}\n <div\n className={`event-detail__tier ${isSoldOut ? 'disabled' : ''}`}\n id={ticket.id || ticket.name}\n >\n <div className=\"event-detail__tier-name\">\n {ticket.displayName || ticket.name}\n {ticket.descriptionRich && (\n <>\n <span\n aria-hidden\n className=\"info-icon\"\n onClick={\n descriptionTrigger === 'click'\n ? () => handleDescriptionToggle(ticket.id)\n : undefined\n }\n onMouseEnter={\n descriptionTrigger === 'hover'\n ? () => setVisibleDescription(ticket.id)\n : undefined\n }\n onMouseLeave={\n descriptionTrigger === 'hover'\n ? () => setVisibleDescription(null)\n : undefined\n }\n style={{ marginLeft: 8, cursor: 'pointer', display: 'flex' }}\n data-tooltip-id={`tooltip-${ticket.id}`}\n data-tooltip-content=\"View ticket info\"\n >\n <InfoIcon />\n </span>\n <Tooltip id={`tooltip-${ticket.id}`} place=\"top\">\n {ticket.description || 'No description available'}\n </Tooltip>\n </>\n )}\n </div>\n <div className=\"event-tickets-container\">\n <div className=\"event-detail__tier-price\">\n {ticketIsDiscounted && <p className=\"old-price\">{discountTicketPriceElem}</p>}\n <p className={isSoldOut ? 'sold-out' : ''}>{ticketPriceElem}</p>\n {!isSoldOut && !ticketIsFree && (\n <p className=\"fees\">\n {CONFIGS.FEES_STYLE === FEES_STYLES.TRADITIONAL &&\n (ticket.feeIncluded ? '(incl. Fees)' : '(excl. Fees)')}\n {CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH &&\n `(${ticketPriceWithFees} with fees)`}\n {CONFIGS.FEES_STYLE === FEES_STYLES.FINAL_WITH_BREAKDOWN &&\n ticketBreakdown}\n </p>\n )}\n {ticket.depositPercent && (\n <p className=\"deposits\">{ticket.depositPercent + '% DEPOSIT'}</p>\n )}\n </div>\n <div className=\"event-detail__tier-state\" style={{ minWidth: 55 }}>\n <TicketRow\n tableType={true}\n ticketTier={ticket}\n prevTicketTier={arr[i - 1]}\n selectedTickets={selectedTickets}\n handleTicketSelect={ticketSelect}\n isSeatMapAllowed={isSeatMapAllowed}\n event={event}\n />\n </div>\n </div>\n {visibleDescription === ticket.id && (\n <div className=\"ticket-description\">\n <div\n dangerouslySetInnerHTML={{\n __html: decodeHTML(ticket.descriptionRich),\n }}\n />\n </div>\n )}\n </div>\n </React.Fragment>\n )\n })}\n </>\n )\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport './style.css'\n\nimport Box from '@mui/material/Box'\nimport FormControl from '@mui/material/FormControl'\nimport MenuItem from '@mui/material/MenuItem'\nimport Select from '@mui/material/Select'\nimport moment from 'moment-timezone'\nimport React, { useState } from 'react'\nimport { Tooltip } from 'react-tooltip'\n\nimport { FEES_STYLES } from '../../constants'\nimport { CONFIGS } from '../../utils'\nimport InfoIcon from './InfoIcon'\nimport { getTicketSelectOptions } from './utils'\n\nfunction decodeHTML(html: string): string {\n const textArea = document.createElement('textarea')\n textArea.innerHTML = html\n return textArea.value\n}\n\ninterface TimeSlotOption {\n timeKey: string;\n ticketInstance: any;\n}\n\ninterface ITimeSlotTicketRowProps {\n ticketKey: string;\n ticket: any;\n availableTimeSlots: TimeSlotOption[];\n selectedTickets: any;\n selectedTimeSlots: any;\n handleTicketSelect: (ticketKey: string, quantity: number, ticketInstance: any) => void;\n handleTimeSlotSelect: (ticketKey: string, timeKey: string, ticketInstance: any) => void;\n priceSymbol: string;\n isSoldOut: boolean;\n}\n\nexport const TimeSlotTicketRow = ({\n ticketKey,\n ticket,\n availableTimeSlots,\n selectedTickets,\n selectedTimeSlots,\n handleTicketSelect,\n handleTimeSlotSelect,\n priceSymbol,\n isSoldOut,\n}: ITimeSlotTicketRowProps) => {\n const [visibleDescription, setVisibleDescription] = useState<boolean>(false)\n\n const currentSelectedTimeKey = selectedTimeSlots[ticketKey] || ''\n const currentTicketInstance = availableTimeSlots.find(slot => slot.timeKey === currentSelectedTimeKey)?.ticketInstance\n const currentSelectedQuantity = currentTicketInstance ? (selectedTickets[currentTicketInstance.id] || 0) : 0\n\n const maxCount = ticket.maxQuantity\n const minCount = ticket.minQuantity\n const { multiplier } = ticket\n const options = getTicketSelectOptions(maxCount, minCount, multiplier)\n\n const ticketPriceWithoutFees = `${priceSymbol} ${(+ticket.cost).toFixed(2)}`\n const ticketPriceWithFees = `${priceSymbol} ${(+ticket.basePrice).toFixed(2)}`\n const ticketOldPriceWithFees = `${priceSymbol} ${(+ticket.oldBasePrice).toFixed(2)}`\n const ticketOldPriceWithoutFees = `${priceSymbol} ${(+ticket.oldCost).toFixed(2)}`\n const ticketFinalPrice = ticket.feeIncluded && !ticket.isForward\n ? +(ticket.x_face_value || ticket.basePrice)\n : ticket.feeIncluded ? +ticket.basePrice : +ticket.cost\n const ticketFinalPriceFormatted = `${priceSymbol} ${Math.round(ticketFinalPrice)}`\n const ticketOldFinalPrice = ticket.feeIncluded && !ticket.isForward\n ? +(ticket.x_face_value || ticket.basePrice)\n : ticket.feeIncluded ? +ticket.oldBasePrice : +ticket.oldCost\n const ticketOldFinalPriceFormatted = `${priceSymbol} ${Math.round(ticketOldFinalPrice)}`\n const ticketFeeAmount = (+ticket.basePrice - +ticket.cost).toFixed(2)\n const ticketBreakdown = !ticket.feeIncluded\n ? '(+ fees at checkout)'\n : !ticket.isForward\n ? null\n : (parseFloat(ticketFeeAmount) > 0 ? `(${priceSymbol} ${(+ticket.cost).toFixed(2)} + ${priceSymbol} ${ticketFeeAmount} fee)` : null)\n\n let ticketIsDiscounted = false\n if (ticket.oldPrice && !isSoldOut && ticket.oldPrice !== ticket.price) {\n ticketIsDiscounted = true\n }\n\n const ticketIsFree = +ticket.price === 0\n const discountTicketPriceElem = CONFIGS.FEES_STYLE === FEES_STYLES.FINAL_WITH_BREAKDOWN\n ? ticketOldFinalPriceFormatted\n : CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH || !ticket.feeIncluded\n ? ticketOldPriceWithoutFees\n : ticketOldPriceWithFees\n const ticketPriceElem = isSoldOut\n ? 'SOLD OUT'\n : ticketIsFree\n ? 'FREE'\n : CONFIGS.FEES_STYLE === FEES_STYLES.FINAL_WITH_BREAKDOWN\n ? ticketFinalPriceFormatted\n : CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH || !ticket.feeIncluded\n ? ticketPriceWithoutFees\n : ticketPriceWithFees\n\n const handleTimeChange = (event: any) => {\n const selectedTimeKey = event.target.value\n const selectedOption = availableTimeSlots.find(slot => slot.timeKey === selectedTimeKey)\n if (selectedOption) {\n handleTimeSlotSelect(ticketKey, selectedOption.timeKey, selectedOption.ticketInstance)\n }\n }\n\n const handleQuantityChange = (event: any) => {\n const { value } = event.target\n // Only allow quantity selection if a time slot is selected\n if (!currentSelectedTimeKey && value > 0) {\n return\n }\n if (currentTicketInstance) {\n handleTicketSelect(ticketKey, value, currentTicketInstance)\n }\n }\n\n const handleDescriptionToggle = () => {\n setVisibleDescription(current => !current)\n }\n\n return (\n <>\n <div className={`event-detail__tier ${isSoldOut ? 'disabled' : ''}`} id={ticketKey}>\n <div className=\"event-detail__tier-name\">\n {ticket.displayName || ticket.name}\n {ticket.descriptionRich && (\n <>\n <span\n aria-hidden\n className=\"info-icon\"\n onClick={handleDescriptionToggle}\n data-tooltip-id={`tooltip-${ticketKey}`}\n data-tooltip-content=\"View ticket info\"\n style={{\n marginLeft: 8,\n cursor: 'pointer',\n display: 'flex',\n }}\n >\n <InfoIcon />\n </span>\n\n <Tooltip id={`tooltip-${ticketKey}`} place=\"top\">\n {ticket.description || 'No description available'}\n </Tooltip>\n </>\n )}\n </div>\n <div className=\"event-tickets-container\">\n <div className=\"event-detail__tier-price\">\n {ticketIsDiscounted && <p className=\"old-price\">{discountTicketPriceElem}</p>}\n <p className={isSoldOut ? 'sold-out' : ''}>{ticketPriceElem}</p>\n {!isSoldOut && !ticketIsFree && (\n <p className=\"fees\">\n {CONFIGS.FEES_STYLE === FEES_STYLES.TRADITIONAL &&\n (ticket.feeIncluded ? '(incl. Fees)' : '(excl. Fees)')}\n {CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH &&\n `(${ticketPriceWithFees} with fees)`}\n {CONFIGS.FEES_STYLE === FEES_STYLES.FINAL_WITH_BREAKDOWN &&\n ticketBreakdown}\n </p>\n )}\n </div>\n {!isSoldOut && (\n <div className=\"event-detail__tier-state time-slot-selectors-container\">\n {/* Time Slot Selector */}\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 2,\n marginTop: 2,\n }}\n >\n <FormControl>\n <Select\n sx={{ borderRadius: 0, minWidth: 120 }}\n value={currentSelectedTimeKey}\n onChange={handleTimeChange}\n displayEmpty\n inputProps={{ 'aria-label': 'Select time slot' }}\n MenuProps={{\n PaperProps: {\n className: 'get-tickets-paper',\n },\n }}\n >\n <MenuItem value=\"\" disabled>\n Time\n </MenuItem>\n {availableTimeSlots.map((slot, index) => (\n <MenuItem key={index} value={slot.timeKey}>\n {moment(slot.ticketInstance.slotStartDate).format('hh:mm A')}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n {/* Quantity Selector */}\n <FormControl>\n <Select\n sx={{ borderRadius: 0, minWidth: 60 }}\n value={currentSelectedQuantity}\n onChange={handleQuantityChange}\n displayEmpty\n disabled={!currentSelectedTimeKey}\n inputProps={{ 'aria-label': 'Select quantity' }}\n MenuProps={{\n PaperProps: {\n sx: { maxHeight: 150 },\n className: 'get-tickets-paper',\n },\n }}\n >\n {options.map((option, index) => (\n <MenuItem key={index} value={option.value}>\n {option.value}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </Box>\n </div>\n )}\n </div>\n {visibleDescription && ticket.descriptionRich && (\n <div className=\"ticket-description\">\n <div\n dangerouslySetInnerHTML={{\n __html: decodeHTML(ticket.descriptionRich),\n }}\n />\n </div>\n )}\n </div>\n </>\n )\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Box, CircularProgress, TextField } from '@mui/material'\nimport { LocalizationProvider, StaticDatePicker as DatePicker } from '@mui/x-date-pickers'\nimport { AdapterMoment } from '@mui/x-date-pickers/AdapterMoment'\nimport _get from 'lodash/get'\nimport _map from 'lodash/map'\nimport _sortBy from 'lodash/sortBy'\nimport moment from 'moment-timezone'\nimport React, { ReactNode, useMemo, useState } from 'react'\n\nimport { TimeSlotTicketRow } from './TimeSlotTicketRow'\n\ninterface Props {\n event: any;\n eventId: number;\n availableDates: string[];\n selectedDate: string | null;\n timeSlotGroups: { [key: string]: any[] };\n setTimeSlotGroups: (value: { [key: string]: any[] }) => void;\n setSelectedDate: (value: string | null) => void;\n getTimeSlots: (date: string | null, type?: string) => Promise<void>;\n\n selectedTickets: any;\n handleTicketSelect: any;\n sortBySoldOut: boolean;\n hideTicketsHeader: boolean;\n ticketsHeaderComponent?: ReactNode;\n showGroupNameBlock?: boolean;\n currencySymbol?: string;\n isSeatMapAllowed?: boolean;\n}\n\ninterface TimeSlotOption {\n timeKey: string;\n ticketInstance: any;\n}\n\ninterface UniqueTicket {\n ticket: any;\n availableTimeSlots: TimeSlotOption[];\n}\n\nconst TimeSlotsSection: React.FC<Props> = ({\n event,\n availableDates,\n selectedDate,\n timeSlotGroups,\n setSelectedDate,\n getTimeSlots,\n selectedTickets,\n handleTicketSelect,\n sortBySoldOut,\n hideTicketsHeader,\n ticketsHeaderComponent,\n currencySymbol,\n}) => {\n const [loading, setLoading] = useState(false)\n const [selectedTimeSlots, setSelectedTimeSlots] = useState<{ [key: string]: string }>({})\n\n const handleDateChange = async (date: string | null) => {\n setSelectedDate(date)\n setSelectedTimeSlots({}) // Reset time slot selections when date changes\n if (date) {\n setLoading(true)\n try {\n await getTimeSlots(date)\n } catch (error) {\n console.error('Error fetching time slots:', error)\n } finally {\n setLoading(false)\n }\n }\n }\n\n const isDateDisabled = (date: string) => {\n const formattedDate = moment(date).format('YYYY-MM-DD')\n return !availableDates.includes(formattedDate)\n }\n\n // Group tickets by unique ticket type using displayName + price\n const uniqueTickets = useMemo(() => {\n const ticketMap: { [key: string]: UniqueTicket } = {}\n\n // Iterate through all time slots\n _map(timeSlotGroups, (tickets, timeKey) => {\n tickets.forEach((ticket: any) => {\n // Use displayName + price as the unique identifier for ticket types\n // This handles cases where multiple ticket types share the same optionName\n const ticketKey = `${ticket.displayName || ticket.name}_${ticket.price}`\n\n if (!ticketMap[ticketKey]) {\n ticketMap[ticketKey] = {\n ticket: { ...ticket },\n availableTimeSlots: [],\n }\n }\n\n // Store both the time key and the ticket instance for this slot\n if (!ticketMap[ticketKey].availableTimeSlots.find((slot: any) => slot.timeKey === timeKey)) {\n ticketMap[ticketKey].availableTimeSlots.push({\n timeKey,\n ticketInstance: ticket,\n })\n }\n })\n })\n\n // Convert to array and sort\n const ticketsArray = Object.values(ticketMap)\n return sortBySoldOut\n ? _sortBy(_sortBy(ticketsArray, t => t.ticket.sortOrder), t => t.ticket.soldOut)\n : _sortBy(ticketsArray, t => t.ticket.sortOrder)\n }, [timeSlotGroups, sortBySoldOut])\n\n const handleTimeSlotSelect = (ticketKey: string, timeKey: string, ticketInstance: any) => {\n setSelectedTimeSlots(prev => ({\n ...prev,\n [ticketKey]: timeKey,\n }))\n\n // Reset quantity when time slot changes\n if (selectedTickets[ticketInstance.id]) {\n handleTicketSelect(ticketInstance.id, 0)\n }\n }\n\n const handleTicketSelectWithTimeSlot = (ticketKey: string, quantity: number, ticketInstance: any) => {\n const timeSlot = selectedTimeSlots[ticketKey]\n if (!timeSlot && quantity > 0) {\n return // Don't allow quantity selection without time slot\n }\n\n if (ticketInstance) {\n handleTicketSelect(ticketInstance.id, quantity)\n }\n }\n\n const symbol = _get(event, 'currency.symbol')\n const priceSymbol = currencySymbol || symbol\n\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', alignItems: 'center' }}>\n <LocalizationProvider dateAdapter={AdapterMoment}>\n <DatePicker\n value={selectedDate}\n onChange={handleDateChange}\n shouldDisableDate={isDateDisabled}\n renderInput={params => <TextField {...params} />}\n showToolbar={false}\n componentsProps={{ actionBar: { actions: [] } }}\n disablePast\n />\n </LocalizationProvider>\n {loading ? (\n <CircularProgress sx={{ marginTop: 2 }} />\n ) : (\n <Box\n sx={{\n marginTop: 2,\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n {!hideTicketsHeader && ticketsHeaderComponent}\n {uniqueTickets.map(({ ticket, availableTimeSlots }) => {\n const ticketKey = `${ticket.displayName || ticket.name}_${ticket.price}`\n const isSoldOut =\n ticket.sold_out ||\n !(ticket.displayTicket || ticket.slotGroupId) ||\n ticket.soldOut\n\n return (\n <TimeSlotTicketRow\n key={ticketKey}\n ticketKey={ticketKey}\n ticket={ticket}\n availableTimeSlots={availableTimeSlots}\n selectedTickets={selectedTickets}\n selectedTimeSlots={selectedTimeSlots}\n handleTicketSelect={handleTicketSelectWithTimeSlot}\n handleTimeSlotSelect={handleTimeSlotSelect}\n priceSymbol={priceSymbol}\n isSoldOut={isSoldOut}\n />\n )\n })}\n </Box>\n )}\n </Box>\n )\n}\n\nexport default TimeSlotsSection\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport './style.css'\n\nimport { ThemeOptions } from '@mui/material'\nimport Alert from '@mui/material/Alert'\nimport { createTheme, ThemeProvider } from '@mui/material/styles'\nimport { CSSProperties } from '@mui/styles'\nimport axios, { AxiosError } from 'axios'\nimport _filter from 'lodash/filter'\nimport _find from 'lodash/find'\nimport _flatten from 'lodash/flatten'\nimport _forEach from 'lodash/forEach'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport _includes from 'lodash/includes'\nimport _isEmpty from 'lodash/isEmpty'\nimport _map from 'lodash/map'\nimport _some from 'lodash/some'\nimport moment from 'moment-timezone'\nimport React, { ReactNode, useEffect, useRef, useState } from 'react'\nimport Button from 'react-bootstrap/Button'\n\nimport {\n addToCart,\n getCheckoutPageConfigs,\n getEvent,\n getProfileData,\n getTickets,\n postOnCheckout,\n} from '../../api'\nimport { getTimeSlotsByDate } from '../../api/common'\nimport { getPreRegistrationInfluencers } from '../../api/preRegistrationComplete'\nimport { X_TF_ECOMMERCE } from '../../constants'\nimport { useCookieListener } from '../../hooks/useCookieListener'\nimport { useLocalStorageListener } from '../../hooks/useLocalStorageListener'\nimport { usePixel } from '../../hooks/usePixel'\nimport {\n createCheckoutDataBodyWithDefaultHolder,\n getCookieByName,\n getQueryVariable,\n isBrowser,\n setLoggedUserData,\n} from '../../utils'\nimport { logoutUser } from '../../utils/auth'\nimport { Loader } from '../common/index'\nimport { PoweredBy } from '../common/PoweredBy'\nimport ConfirmModal from '../confirmModal'\nimport Countdown from '../countdown'\nimport { VerificationPendingModal } from '../idVerificationContainer/VerificationPendingModal'\nimport { LoginModal } from '../loginModal'\nimport { PreRegistration } from '../preRegistration'\nimport WaitingList from '../waitingList'\nimport { AccessCodeSection } from './AccessCodeSection'\nimport { PromoCodeSection } from './PromoCodeSection'\nimport { ReferralLogic } from './ReferralLogic'\nimport { TicketsSection } from './TicketsSection'\nimport TimeSlotsSection from './TimeSlotsSection'\n\nconst checkUserPreregistration = (preregisteredUsers: IInfluencerData[]) => {\n const isWindowDefined = typeof window !== 'undefined'\n const userDataString = isWindowDefined ? window.localStorage.getItem('user_data') : ''\n let isPreregisteredUser = false\n if (userDataString) {\n const user = JSON.parse(userDataString)\n isPreregisteredUser = _some(preregisteredUsers, item => item.email === user?.email)\n }\n return isPreregisteredUser\n}\n\ninterface TimeSlotsAttributes {\n ValidPromoCode: boolean;\n is_access_code: boolean;\n isPromotionsEnabled: boolean;\n}\n\ninterface CartSuccess {\n skip_billing_page: boolean;\n event_id: string;\n hash?: string | number;\n total?: string | number;\n hasAddOn?: boolean;\n eventSlug?: string;\n cart?: ICart[];\n currencySymbol?: string;\n}\n\nexport interface IGetTickets {\n eventId: number;\n onAddToCartSuccess: (response: CartSuccess) => void;\n getTicketsLabel?: string;\n contentStyle?: React.CSSProperties;\n onAddToCartError: (e: AxiosError) => void;\n onGetTicketsSuccess: (response: {\n data: { attributes: { tickets: ITicketData[] } };\n }) => void;\n onGetTicketsPress: () => void;\n onGetTicketsError: (e: AxiosError) => void;\n onLogoutSuccess: () => void;\n onLogoutError: (e: AxiosError) => void;\n onGetProfileDataSuccess: (response: {\n data: { attributes: { [key: string]: string | number | boolean | null } };\n }) => void;\n onGetProfileDataError: (e: AxiosError) => void;\n onLoginSuccess: () => void;\n handleNotInvitedModalClose: () => void;\n handleInvalidLinkModalClose: () => void;\n theme?: 'light' | 'dark';\n queryPromoCode?: string;\n isPromotionsEnabled?: boolean;\n themeOptions?: ThemeOptions & {\n input?: CSSProperties;\n checkbox?: CSSProperties;\n };\n isAccessCodeEnabled?: boolean;\n hideSessionButtons?: boolean;\n hideWaitingList?: boolean;\n enableBillingInfoAutoCreate?: boolean;\n isButtonScrollable?: boolean;\n sortBySoldOut?: boolean;\n disableCountdownLeadingZero?: boolean;\n isLoggedIn?: boolean;\n actionsSectionComponent?: ReactNode;\n ticketsHeaderComponent?: ReactNode;\n hideTicketsHeader?: boolean;\n tableTicketsHeaderComponent?: ReactNode;\n hideTableTicketsHeader?: boolean;\n enableInfluencersSection?: boolean;\n enableAddOns?: boolean;\n ordersPath?: string;\n showPoweredByImage?: boolean;\n promoText?: string;\n showGroupNameBlock?: boolean;\n currencySymbol?: string;\n onReserveButtonClick?: () => void;\n onPendingVerification?: () => void;\n showAlertIcons?: boolean;\n submitMode?: 'auto' | 'click';\n onPreRegistrationSuccess?: (response: any) => void;\n onPreRegistrationError?: (e: AxiosError) => void;\n onPreRegistrationGetCountriesSuccess?: (res: any) => void;\n onPreRegistrationGetCountriesError?: (e: AxiosError) => void;\n onForgotPasswordSuccess?: (res: any) => void;\n onForgotPasswordError?: (e: AxiosError) => void;\n showForgotPasswordButton?: boolean;\n logo?: string;\n}\n\nexport interface ITicket {\n id: string | number;\n [key: string]: string | number;\n}\n\ninterface IInfluencer {\n [key: string]: string | undefined;\n}\nexport interface ISelectedTickets {\n isTable: boolean;\n [key: string]: string | number | boolean;\n}\n\nexport const TicketsContainer = ({\n onLoginSuccess,\n getTicketsLabel,\n eventId,\n onAddToCartSuccess,\n contentStyle = {},\n onAddToCartError = _identity,\n onGetTicketsSuccess = _identity,\n onGetTicketsError = _identity,\n onLogoutSuccess = _identity,\n onLogoutError = _identity,\n onGetProfileDataSuccess = _identity,\n onGetProfileDataError = _identity,\n onGetTicketsPress = _identity,\n theme = 'light',\n queryPromoCode = '',\n isPromotionsEnabled = true,\n themeOptions,\n isAccessCodeEnabled = false,\n hideSessionButtons = false,\n hideWaitingList = false,\n enableBillingInfoAutoCreate = true,\n isButtonScrollable = false,\n sortBySoldOut = false,\n disableCountdownLeadingZero = false,\n isLoggedIn = false,\n actionsSectionComponent: ActionsSectionComponent,\n ticketsHeaderComponent,\n hideTicketsHeader = false,\n tableTicketsHeaderComponent,\n hideTableTicketsHeader = false,\n enableInfluencersSection = true,\n enableAddOns = true,\n handleNotInvitedModalClose = _identity,\n handleInvalidLinkModalClose = _identity,\n ordersPath,\n showPoweredByImage = false,\n promoText,\n showGroupNameBlock = false,\n currencySymbol = '',\n onReserveButtonClick = _identity,\n onPendingVerification = _identity,\n showAlertIcons = true,\n onPreRegistrationSuccess = _identity,\n onPreRegistrationError = _identity,\n onPreRegistrationGetCountriesSuccess = _identity,\n onPreRegistrationGetCountriesError = _identity,\n onForgotPasswordSuccess = _identity,\n onForgotPasswordError = _identity,\n showForgotPasswordButton = false,\n logo,\n}: IGetTickets) => {\n const [selectedTickets, setSelectedTickets] = useState({} as ISelectedTickets)\n const [isLogged, setIsLogged] = useState(Boolean(getCookieByName(X_TF_ECOMMERCE)))\n const [showLoginModal, setShowLoginModal] = useState(false)\n const [tickets, setTickets] = useState([] as ITicketData[])\n const [event, setEvent] = useState<any>(null)\n const [showWaitingList, setShowWaitingList] = useState(false)\n const [isLoading, setIsLoading] = useState(true)\n const [codeIsLoading, setCodeIsLoading] = useState(false)\n const [handleBookIsLoading, setHandleBookIsLoading] = useState(false)\n const [code, setCode] = useState(getQueryVariable('r') || queryPromoCode)\n const [showPromoInput, setShowPromoInput] = useState(false)\n const [codeIsApplied, setCodeIsApplied] = useState(false)\n const [codeIsInvalid, setCodeIsInvalid] = useState(false)\n const [showAccessCodeSection, setShowAccessCodeSection] = useState(isAccessCodeEnabled)\n const [showPromoCodeSection, setShowPromoCodeSection] = useState(isPromotionsEnabled)\n const [error, setError] = useState<string | null>(null)\n const [isNotInvitedError, setIsNotInvitedError] = useState('')\n const [isInvalidLinkError, setIsInvalidLinkError] = useState('')\n const [pendingVerificationMessage, setPendingVerificationMessage] = useState()\n const [preregisteredUsers, setPreregisteredUsers] = useState(\n [] as Array<IInfluencerData>\n )\n const [ticketsNotAvailableModalOpen, setTicketsNotAvailableModalOpen] = useState(false)\n const [isPreregistered, setIsPreregistered] = useState(\n checkUserPreregistration(preregisteredUsers)\n )\n const ticketsContainerRef = useRef<HTMLDivElement>(null)\n const pageUrl = isBrowser ? window.location.href.split('?')[0] : ''\n const isTimeSlotEvent = event?.isTimeSlotEvent\n const [availableDates, setAvailableDates] = useState<string[]>([])\n const [selectedDate, setSelectedDate] = useState<string | null>(null)\n const [timeSlotGroups, setTimeSlotGroups] = useState<{ [key: string]: any[] }>({})\n\n useCookieListener(X_TF_ECOMMERCE, value => setIsLogged(Boolean(value)))\n useLocalStorageListener('user_data', (user: any) => {\n const isPreregisteredUser = _some(\n preregisteredUsers,\n item => item.email === user?.email\n )\n setIsPreregistered(isPreregisteredUser)\n })\n usePixel(eventId, { pageUrl })\n\n useEffect(() => {\n window.localStorage.removeItem('extraData')\n }, [])\n\n useEffect(() => {\n if (eventId) {\n getTicketsApi()\n fetchPreregisteredData()\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [eventId])\n\n useEffect(() => {\n setIsPreregistered(checkUserPreregistration(preregisteredUsers))\n }, [preregisteredUsers])\n\n useEffect(() => {\n if (isLogged) {\n fetchUserData()\n .then(res => {\n window.localStorage.setItem('user_data', JSON.stringify(res))\n onGetProfileDataSuccess({ data: { attributes: res } })\n })\n .catch(e => {\n if (axios.isAxiosError(e)) {\n onGetProfileDataError(e)\n }\n })\n }\n }, [isLogged])\n\n\n const handleLogout = () => {\n logoutUser({ onLogoutError, onLogoutSuccess, setIsLogged })\n }\n\n const handleExternalLogin = () => {\n setIsLogged(true)\n }\n\n const handleOnClose = () => {\n setShowLoginModal(false)\n }\n\n const handleOnLogin = () => {\n setShowLoginModal(false)\n setIsLogged(true)\n if (onLoginSuccess) {\n onLoginSuccess()\n }\n }\n\n const getTimeSlots = async (date: string | null, type?: string): Promise<void> => {\n if (!date) {\n setShowPromoCodeSection(false)\n return\n }\n\n try {\n const timeSlotsResponse = await getTimeSlotsByDate(\n eventId,\n moment(date).format('YYYY-MM-DD'),\n code\n )\n\n const groupedTickets: any = {}\n _map(timeSlotsResponse.data.attributes.timeslots, (timeslots, date) => {\n const dateKeyChunks = date.split('-')\n const dateKey = [dateKeyChunks[0], dateKeyChunks[1], dateKeyChunks[2]].join('-')\n\n _forEach(timeslots, ticketList => {\n if (!groupedTickets[dateKey]) {\n groupedTickets[dateKey] = []\n }\n groupedTickets[dateKey] = groupedTickets[dateKey].concat(ticketList)\n })\n })\n\n setTimeSlotGroups(groupedTickets)\n setShowPromoCodeSection(true)\n\n const attributes: TimeSlotsAttributes = timeSlotsResponse?.data?.attributes\n\n if (type === 'promo') {\n setCodeIsApplied(attributes.ValidPromoCode)\n setCodeIsInvalid(!attributes.ValidPromoCode)\n setCode('')\n window.localStorage.setItem('appliedPromoCode', code)\n setShowAccessCodeSection(attributes.is_access_code)\n setShowPromoCodeSection(attributes.isPromotionsEnabled)\n }\n } catch (error) {}\n }\n\n async function getTicketsApi(isUpdatingCode?: boolean, type?: string) {\n try {\n if (isUpdatingCode) {\n setCodeIsLoading(true)\n } else {\n setIsLoading(true)\n }\n\n const previewKey = getQueryVariable('pk') || undefined\n const eventResponse = await getEvent(eventId, previewKey)\n if (eventResponse.success) {\n const event = eventResponse.data.attributes\n setEvent(event)\n\n if (event.country && isBrowser) {\n window.localStorage.setItem('eventCountry', event.country)\n }\n\n if (event.isTimeSlotEvent) {\n getTimeSlots(selectedDate, code)\n // For timeslots we shouldn't fetch all tickets at once\n setAvailableDates(event?.timeslotSettings?.availableDates ?? [])\n return\n }\n }\n\n const response = await getTickets(eventId, code, previewKey)\n\n if (response.success) {\n const attributes = response?.data?.attributes\n type === 'promo' && setCodeIsApplied(attributes.ValidPromoCode)\n type === 'promo' && setCodeIsInvalid(!attributes.ValidPromoCode)\n setTickets(attributes.tickets)\n setShowWaitingList(attributes.showWaitingList)\n onGetTicketsSuccess({\n data: { attributes: { tickets: response.data.attributes.tickets } },\n })\n setCode('')\n window.localStorage.setItem('appliedPromoCode', code)\n setShowAccessCodeSection(attributes.is_access_code)\n setShowPromoCodeSection(attributes.isPromotionsEnabled)\n }\n } catch (e) {\n if (axios.isAxiosError(e)) {\n onGetTicketsError(e)\n setError(_get(e, 'response.data.message', ''))\n window.localStorage.removeItem('appliedPromoCode')\n }\n } finally {\n setIsLoading(false)\n setCodeIsLoading(false)\n }\n }\n\n async function fetchPreregisteredData() {\n try {\n const preregistrationData = await getPreRegistrationInfluencers({\n eventId,\n })\n setPreregisteredUsers(preregistrationData.data.attributes.influencers)\n } catch (error) {\n if (axios.isAxiosError(error)) {\n setError(_get(error, 'response.data.message', ''))\n }\n }\n }\n\n const handleTicketSelect = (key: string, value: number | string, isTable = false) => {\n localStorage.setItem('selectedTicketsQuantity', value.toString())\n setSelectedTickets(prevState => {\n // Allow multiple ticket types to be selected simultaneously when flag is enabled\n if (event?.allowMultipleTicketTypePurchases === true) {\n // Check if we're switching between tables and regular tickets\n const hasExistingSelection = Object.keys(prevState).some(k => k !== 'isTable')\n const switchingTicketType = hasExistingSelection && prevState.isTable !== isTable\n\n // If switching from tables to regular tickets or vice versa, clear all selections\n if (switchingTicketType && Number(value) > 0) {\n return {\n [key]: value,\n isTable,\n }\n }\n\n // If value is 0, remove this ticket from selection\n if (!value || Number(value) === 0) {\n const newState = { ...prevState }\n delete newState[key]\n // If no ticket keys remain (only isTable left), return empty state\n const ticketKeys = Object.keys(newState).filter(k => k !== 'isTable')\n if (ticketKeys.length === 0) {\n return { isTable: false } as ISelectedTickets\n }\n return { ...newState, isTable: prevState.isTable }\n }\n\n // If value > 0, add or update this ticket while keeping others of the same type selected\n return {\n ...prevState,\n [key]: value,\n isTable,\n }\n }\n\n // Default behavior: only one ticket type at a time\n if (Object.keys(prevState)[0] !== key && !value) {\n return prevState\n }\n return {\n [key]: value,\n isTable,\n }\n })\n }\n\n const handleOrdersClick = () => {\n if (isBrowser) {\n window.location.href = ordersPath ?? '/orders'\n }\n }\n\n const onErrorClose = () => {\n setError(null)\n }\n\n const handleBook = async () => {\n const timeSlotTickets = _flatten(_map(timeSlotGroups, slots => slots))\n\n setHandleBookIsLoading(true)\n\n // Unified flow: works for both single and multiple ticket types\n const ticketsList = event?.isTimeSlotEvent ? timeSlotTickets : tickets\n\n // Get all selected ticket IDs with quantity > 0 (excluding 'isTable' key)\n const selectedTicketIds = Object.keys(selectedTickets).filter(\n key => key !== 'isTable' && Number(selectedTickets[key]) > 0\n )\n\n // Build ticket_types object with all selected tickets (works for 1 or N tickets)\n const ticketTypesData: any = {}\n let totalProductCartQuantity = 0\n let firstTicket: ITicket | null = null\n\n selectedTicketIds.forEach(ticketId => {\n const ticket = _find(ticketsList || [], item => String(item.id) === ticketId) as ITicket\n if (ticket) {\n if (!firstTicket) firstTicket = ticket\n const optionName = _get(ticket, 'optionName')\n const quantity = +selectedTickets[ticketId]\n totalProductCartQuantity += quantity\n\n ticketTypesData[ticketId] = {\n product_options: {\n [optionName]: ticketId,\n ticket_price: ticket.price,\n },\n quantity,\n }\n }\n })\n\n if (!firstTicket) {\n setHandleBookIsLoading(false)\n return\n }\n\n const firstOptionName = _get(firstTicket, 'optionName')\n const firstTicketId = _get(firstTicket, 'id')\n\n const data: ICartRequestData = {\n attributes: {\n alternative_view_id: null,\n product_cart_quantity: totalProductCartQuantity,\n product_options: {\n [firstOptionName]: firstTicketId,\n },\n product_id: eventId,\n ticket_types: ticketTypesData,\n },\n }\n\n try {\n onGetTicketsPress()\n const result = await addToCart(eventId, data)\n const pageConfigsDataResponse = enableAddOns\n ? await getCheckoutPageConfigs()\n : {\n status: 200,\n data: { attributes: _get(result, 'data.attributes') },\n }\n\n if (pageConfigsDataResponse.status === 200) {\n const pageConfigsData: any =\n _get(pageConfigsDataResponse, 'data.attributes') || {}\n\n const skipBillingPage = pageConfigsData.skip_billing_page ?? false\n const hasAddOn = pageConfigsData.has_add_on ?? false\n const freeTicket = pageConfigsData.free_ticket ?? false\n\n let hash: string | number | undefined = ''\n let total: string | number | undefined = ''\n\n isBrowser && window.localStorage.removeItem('add_ons')\n isBrowser && window.localStorage.removeItem('checkoutAdditionalConfigs')\n\n if (skipBillingPage && !hasAddOn) {\n // Get user data for checkout data\n const userData =\n isBrowser && window.localStorage.getItem('user_data')\n ? JSON.parse(window.localStorage.getItem('user_data') || '{}')\n : {}\n\n const checkoutBody = createCheckoutDataBodyWithDefaultHolder(\n totalProductCartQuantity,\n userData\n )\n\n const checkoutResponse = enableBillingInfoAutoCreate\n ? await postOnCheckout(checkoutBody, freeTicket)\n : null\n\n hash = checkoutResponse?.data?.attributes?.hash || ''\n total = checkoutResponse?.data?.attributes?.total || ''\n }\n\n onAddToCartSuccess({\n skip_billing_page: skipBillingPage,\n event_id: String(eventId),\n hash,\n total,\n hasAddOn,\n eventSlug: event?.slug,\n cart: pageConfigsDataResponse.data.attributes.cart,\n currencySymbol: event?.currency.symbol,\n })\n }\n } catch (e) {\n const errorResponse: any = _get(e, 'response', {})\n if (errorResponse?.data?.data?.hasUnverifiedOrder) {\n setPendingVerificationMessage(errorResponse?.data?.message)\n } else if (axios.isAxiosError(e)) {\n onAddToCartError(e)\n const message = _get(e, 'response.data.message', '')\n const isInvalidLinkError = _includes(\n message,\n 'No more of this ticket type are available right now'\n )\n const isNotInvitedError = _includes(\n message,\n 'You must have been invited to this event to attend'\n )\n\n if (isInvalidLinkError) {\n setIsInvalidLinkError(message)\n } else if (isNotInvitedError) {\n setIsNotInvitedError(message)\n } else {\n setError(message)\n }\n }\n } finally {\n setHandleBookIsLoading(false)\n }\n }\n\n const updateTickets = (isUpdatingCode?: boolean, type?: string) => {\n getTicketsApi(isUpdatingCode, type)\n }\n\n const fetchUserData = async () => {\n const userDataResponse = await getProfileData()\n const profileData = _get(userDataResponse, 'data')\n const profileDataObj = setLoggedUserData(profileData)\n return profileDataObj\n }\n\n const isTicketOnSale = event?.isTimeSlotEvent\n ? true\n : _some(\n tickets,\n item =>\n (item.salesStarted || event?.presalesStarted) &&\n !item.salesEnded &&\n !item.soldOut\n )\n\n const eventHasTickets = !_isEmpty(tickets)\n const isSalesClosed = event?.salesEnded\n\n const themeMui = createTheme(themeOptions)\n\n useEffect(() => {\n window.document.addEventListener('custom-login', handleExternalLogin)\n window.document.addEventListener('custom-logout', handleLogout)\n\n return () => {\n window.document.removeEventListener('custom-login', handleExternalLogin)\n window.document.removeEventListener('custom-logout', handleLogout)\n }\n }, [])\n\n const handleGetTicketClick = () => {\n if (\n !handleBookIsLoading &&\n !_isEmpty(selectedTickets) &&\n Number(Object.values(selectedTickets)[0]) > 0\n ) {\n handleBook()\n } else {\n if (isButtonScrollable && ticketsContainerRef && ticketsContainerRef.current) {\n ticketsContainerRef.current.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'nearest',\n })\n }\n }\n }\n\n const handleNotAvailableTicketsClick = () => {\n if (!_isEmpty(selectedTickets)) {\n setTicketsNotAvailableModalOpen(true)\n }\n }\n\n const bookButtonIsDisabled =\n (handleBookIsLoading ||\n _isEmpty(selectedTickets) ||\n Object.values(selectedTickets)[0] === 0) &&\n !event?.flagSeatMapAllowed\n\n const isTicketAvailable = _some(\n tickets,\n ticket =>\n ticket.displayTicket &&\n !ticket.soldOut &&\n (ticket.salesStarted || (event?.presalesStarted && !event?.presalesEnded))\n )\n\n const wrappedActionsSectionComponent = React.isValidElement(ActionsSectionComponent)\n ? React.cloneElement(ActionsSectionComponent as React.ReactElement<any>, {\n handleGetTicketClick,\n isTicketOnSale,\n isTicketAvailable,\n })\n : null\n\n const externalUrl = event?.redirectUrl\n const eventSaleIsNotStarted =\n !event?.salesStarted && event?.salesStart && !isTicketAvailable\n const influencers = event?.referralsEnabled ? event?.referrals : []\n\n const canShowGetTicketBtn = () => {\n if (\n !wrappedActionsSectionComponent &&\n !eventSaleIsNotStarted &&\n isTicketOnSale &&\n !event?.salesEnded &&\n !externalUrl\n ) {\n return true\n }\n\n return false\n }\n\n const onClose = (value: string) => {\n if (value === 'notInvited') {\n handleNotInvitedModalClose()\n } else if (value === 'invalidLink') {\n handleInvalidLinkModalClose()\n }\n setIsNotInvitedError('')\n setIsInvalidLinkError('')\n }\n const hideTopInfluencers = event?.hideTopInfluencers\n const isSeatMapAllowed = _get(event, 'seatMapAllowed', false)\n const isTableMapEnabled = _get(event, 'tableMapEnabled', false)\n\n const notAvailableTicketsMessage = `Tickets for this event are not available until ${moment(\n event?.salesStart\n ).format(\n 'dddd, DD MMMM YYYY'\n )}. \\n If you pre-registered, log into your account first to buy your pre-sale ticket.`\n\n const tableTickets = _filter(tickets, (ticket: any) => ticket.isTable)\n const ordinaryTickets = {} as ITicket\n _forEach(tickets, (ticket: any, key: string) => {\n if (!ticket.isTable) {\n ordinaryTickets[key] = ticket\n }\n })\n\n\n // Check if event is in pre-registration mode\n const isPreRegistrationMode =\n event?.preregEnabled &&\n event?.preregStarted &&\n !event?.preregEnded\n\n return (\n <ThemeProvider theme={themeMui}>\n {!isLoading && <ReferralLogic eventId={eventId} />}\n <div className={`get-tickets-page ${theme} open-ground`} style={contentStyle}>\n {isInvalidLinkError && (\n <ConfirmModal\n message={isInvalidLinkError}\n hideCancelBtn={true}\n onClose={() => onClose('invalidLink')}\n onConfirm={() => onClose('invalidLink')}\n />\n )}\n {isNotInvitedError && (\n <ConfirmModal\n hideCancelBtn={true}\n message={isNotInvitedError}\n onClose={() => onClose('notInvited')}\n onConfirm={() => onClose('notInvited')}\n // loading={removeFromResaleLoading}\n />\n )}\n {error && (\n <Alert\n severity=\"error\"\n onClose={onErrorClose}\n variant=\"filled\"\n style={{ width: '350px' }}\n >\n {error}\n </Alert>\n )}\n {ticketsNotAvailableModalOpen && (\n <ConfirmModal\n message={notAvailableTicketsMessage}\n hideCancelBtn={true}\n onClose={() => onClose('invalidLink')}\n onConfirm={() => setTicketsNotAvailableModalOpen(false)}\n />\n )}\n {isLoading ? (\n <Loader />\n ) : isPreRegistrationMode ? (\n <PreRegistration\n eventId={eventId}\n isPreregistrationStarted={event?.preregStarted}\n logo={logo}\n showForgotPasswordButton={showForgotPasswordButton}\n onClose={() => {}}\n onLogin={onLoginSuccess}\n onLoginButtonClick={() => {}}\n onLoginSuccess={onLoginSuccess}\n onConfirmationSuccess={onPreRegistrationSuccess}\n onConfirmationError={onPreRegistrationError}\n onGetCountriesSuccess={onPreRegistrationGetCountriesSuccess}\n onGetCountriesError={onPreRegistrationGetCountriesError}\n onForgotPasswordSuccess={onForgotPasswordSuccess}\n onForgotPasswordError={onForgotPasswordError}\n themeOptions={themeOptions}\n />\n ) : (\n <div ref={ticketsContainerRef} className=\"tickets-section-container\">\n {isTimeSlotEvent && (\n <TimeSlotsSection\n event={event}\n eventId={eventId}\n availableDates={availableDates}\n selectedDate={selectedDate}\n setSelectedDate={setSelectedDate}\n timeSlotGroups={timeSlotGroups}\n setTimeSlotGroups={setTimeSlotGroups}\n selectedTickets={selectedTickets}\n handleTicketSelect={handleTicketSelect}\n sortBySoldOut={sortBySoldOut}\n ticketsHeaderComponent={ticketsHeaderComponent}\n hideTicketsHeader={hideTicketsHeader}\n showGroupNameBlock={showGroupNameBlock}\n currencySymbol={currencySymbol}\n isSeatMapAllowed={isSeatMapAllowed}\n getTimeSlots={getTimeSlots}\n />\n )}\n {!isSalesClosed && !isTimeSlotEvent && (\n <TicketsSection\n event={event}\n ticketsList={ordinaryTickets}\n tableTickets={tableTickets}\n selectedTickets={selectedTickets}\n handleTicketSelect={handleTicketSelect}\n sortBySoldOut={sortBySoldOut}\n ticketsHeaderComponent={ticketsHeaderComponent}\n tableTicketsHeaderComponent={tableTicketsHeaderComponent}\n hideTableTicketsHeader={hideTableTicketsHeader || _isEmpty(tableTickets)}\n hideTicketsHeader={hideTicketsHeader || _isEmpty(ordinaryTickets)}\n showGroupNameBlock={showGroupNameBlock}\n currencySymbol={currencySymbol}\n isSeatMapAllowed={isSeatMapAllowed}\n />\n )}\n {externalUrl ? null : isSalesClosed ? (\n <p\n className={`event-closed-message ${\n !isLoggedIn ? 'event-closed-on-bottom' : ''\n }`}\n >\n Sales for this event are closed.\n </p>\n ) : eventSaleIsNotStarted ? (\n <Countdown\n startDate={event.salesStart}\n timezone={event.timezone}\n title=\"Sales start in:\"\n message=\"No tickets are currently available for this event.\"\n showMessage={!eventHasTickets}\n callback={updateTickets}\n disableLeadingZero={disableCountdownLeadingZero}\n isLoggedIn={isLoggedIn}\n />\n ) : null}\n {event?.enableWaitingList &&\n showWaitingList &&\n event.salesStarted &&\n !hideWaitingList && (\n <WaitingList\n tickets={ordinaryTickets}\n eventId={eventId}\n defaultMaxQuantity={event.waitingListMaxQuantity}\n />\n )}\n {codeIsLoading ? (\n <Loader />\n ) : isSalesClosed ? null : showAccessCodeSection ? (\n <AccessCodeSection\n code={code}\n setCode={setCode}\n updateTickets={updateTickets}\n />\n ) : showPromoCodeSection ? (\n <PromoCodeSection\n code={code}\n codeIsApplied={codeIsApplied}\n setCodeIsApplied={setCodeIsApplied}\n showPromoInput={showPromoInput}\n setShowPromoInput={setShowPromoInput}\n setCode={setCode}\n updateTickets={updateTickets}\n codeIsInvalid={codeIsInvalid}\n setCodeIsInvalid={setCodeIsInvalid}\n promoText={promoText}\n showAlertIcons={showAlertIcons}\n />\n ) : null}\n {wrappedActionsSectionComponent}\n {canShowGetTicketBtn() && (\n <Button\n aria-hidden={true}\n className={`book-button\n ${bookButtonIsDisabled ? 'disabled' : ''}\n ${isButtonScrollable ? 'is-scrollable' : ''}\n ${!isLoggedIn ? 'on-bottom' : ''}\n `}\n onClick={\n event?.salesStart &&\n event?.presalesStarted &&\n !event?.presalesEnded &&\n (!isPreregistered || !isLogged)\n ? handleNotAvailableTicketsClick\n : handleGetTicketClick\n }\n >\n {selectedTickets.isTable\n ? 'RESERVE TABLES'\n : getTicketsLabel || 'GET TICKETS'}\n </Button>\n )}\n {isSeatMapAllowed && !event?.salesEnded && isTicketAvailable && (\n <Button\n className=\"reserve-button\"\n aria-hidden={true}\n onClick={onReserveButtonClick}\n >\n {isTableMapEnabled ? 'Select on map' : 'Select your seats'}\n </Button>\n )}\n {isLogged && !hideSessionButtons ? (\n <div className=\"session-wrapper\">\n <span className=\"session-container\">\n <Button\n variant=\"outline-light\"\n className=\"session-buttons\"\n onClick={handleOrdersClick}\n >\n My Orders\n </Button>\n </span>\n <span className=\"session-container\">\n <Button\n variant=\"outline-light\"\n className=\"session-buttons\"\n onClick={handleLogout}\n >\n Log out\n </Button>\n </span>\n </div>\n ) : (\n ''\n )}\n </div>\n )}\n {showLoginModal ? (\n <LoginModal onClose={handleOnClose} onLogin={handleOnLogin} showForgotPasswordButton />\n ) : null}\n </div>\n {showPoweredByImage ? <PoweredBy /> : null}\n {enableInfluencersSection && !hideTopInfluencers && influencers.length ? (\n <div className=\"event-influencers\">\n <h3>\n <span>TOP</span> INFLUENCERS\n </h3>\n <ol className=\"influencer-list\">\n {influencers.map((influencer: IInfluencer, i: number) => (\n <li className=\"influencer-item\" key={i}>\n {`${influencer.firstName} ${influencer.lastName?.charAt(0)}`}{' '}\n </li>\n ))}\n </ol>\n </div>\n ) : null}\n <VerificationPendingModal\n message={pendingVerificationMessage}\n onClose={() => {\n onPendingVerification()\n }}\n />\n </ThemeProvider>\n )\n}\n","import _map from 'lodash/map'\nimport moment from 'moment-timezone'\nimport React from 'react'\n\nconst EventInfoItem = ({ image, name }: EventInfoTypes) => (\n <div className=\"event-info\">\n <img src={image} alt=\"event\" />\n {name}\n </div>\n)\n\nconst tableConfig = (columns?: IColumnData[], key?: string) => {\n let config\n\n if (columns?.length) {\n return {\n header: _map(columns, item => item.label),\n body: _map(columns, item => {\n if (item.component) {\n const ItemComponent = item.component\n return (row: RowItems) => ({\n columnProps: item,\n component: <ItemComponent {...row} />,\n })\n }\n\n if (item.key === 'event') {\n return (row: RowItems) => ({\n columnProps: item,\n component: <EventInfoItem image={row.image} name={row.eventName} />,\n })\n }\n\n if (item.key === 'total') {\n return (row: RowItems) => ({\n columnProps: item,\n component: row.currency + row.amount,\n })\n }\n\n return (row: RowItems) => ({\n columnProps: item,\n component: item.normalizer\n ? item.normalizer(row[item.key as keyof RowItems])\n : row[item.key as keyof RowItems],\n })\n }) as ITableBodyType[],\n }\n }\n\n switch (key) {\n default:\n config = {\n header: ['Order No.', 'Date', 'Event', 'Total'],\n body: [\n (row: RowItems) => ({\n columnProps: {} as IColumnData,\n component: row.id,\n }),\n (row: RowItems) => ({\n columnProps: {} as IColumnData,\n component: row.timezone\n ? moment.tz(row.date, row.timezone).format('DD MMMM YYYY')\n : row.date,\n }),\n (row: RowItems) => ({\n columnProps: {} as IColumnData,\n component: <EventInfoItem image={row.image} name={row.eventName} />,\n }),\n (row: RowItems) => ({\n columnProps: {} as IColumnData,\n component: row.currency + row.amount,\n }),\n ] as ITableBodyType[],\n }\n }\n return config\n}\n\nexport default tableConfig\n","import TableCell from '@mui/material/TableCell'\nimport TableRow from '@mui/material/TableRow'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport React from 'react'\n\nimport tableConfig from './tableConfig'\n\nconst Row = ({\n row,\n handleDetailsInfo,\n columns = [],\n hideDetailsButton,\n}: RowPropsTypes) => (\n <TableRow sx={{ '& > *': { borderBottom: 'unset' } }}>\n {tableConfig(columns).body.map((column: ITableBodyType, index: number) => (\n <TableCell\n component=\"th\"\n scope=\"row\"\n key={index}\n onClick={e => {\n const { columnProps, component }: IRowReturnType = column(row)\n const onCellClick = columnProps?.onCellClick || _identity\n const componentProps = _get(component, 'props', {})\n\n onCellClick(componentProps, e)\n }}\n >\n {column(row).component}\n </TableCell>\n ))}\n {!hideDetailsButton && (\n <TableCell component=\"th\" scope=\"row\">\n <button\n type=\"button\"\n className=\"order-details-button\"\n onClick={() => handleDetailsInfo(row.id)}\n >\n Details\n </button>\n </TableCell>\n )}\n </TableRow>\n)\n\nexport default Row\n","import React from 'react'\nimport FormGroup from '@mui/material/FormGroup'\nimport FormControlLabel from '@mui/material/FormControlLabel'\nimport Radio from '@mui/material/Radio';\nimport { FieldInputProps } from 'formik'\nimport { useTheme } from '@mui/styles'\n\nexport interface IRadioField {\n label: string | number | JSX.Element;\n field?: FieldInputProps<any>;\n}\n\ninterface IOtherProps {\n [key: string]: any;\n}\n\nexport const RadioField = ({\n label,\n field,\n theme,\n disableDropdown,\n ...rest\n}: IRadioField & IOtherProps) => {\n const customTheme: any = useTheme()\n return (\n <FormGroup>\n <FormControlLabel\n control={<Radio {...field} {...rest} />}\n label={label}\n componentsProps={{\n typography: customTheme?.checkbox\n }}\n />\n </FormGroup>\n )\n}\n","import './style.css'\n\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport CircularProgress from '@mui/material/CircularProgress'\nimport Modal from '@mui/material/Modal'\nimport { Field, Form, Formik } from 'formik'\nimport React from 'react'\nimport SVG from 'react-inlinesvg'\nimport * as yup from 'yup'\n\nimport EmailSvg from '../../assets/images/email.svg'\nimport UserSvg from '../../assets/images/user.svg'\nimport { CheckboxField } from '../common/CheckboxField'\nimport { CustomField } from '../common/CustomField'\nimport { RadioField } from '../common/RadioField'\nimport { ITicketTypes } from '../orderDetailsContainer/ticketsTable'\n\ninterface Props {\n ticket: ITicketTypes;\n onClose: () => void;\n onSubmit: (values: InitialValuesTypes) => void;\n loading?: boolean;\n}\n\nexport interface InitialValuesTypes {\n to: string;\n first_name: string;\n last_name: string;\n email: string;\n confirm_email: string;\n confirm: boolean;\n}\n\nconst style: React.CSSProperties = {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n minWidth: 480,\n backgroundColor: '#e3e3e3',\n border: '1px solid white',\n outline: 'none',\n padding: '14px',\n maxHeight: '85vh',\n overflow: 'auto'\n}\n\nconst schema = yup.object().shape({\n to: yup.string().required(),\n first_name: yup.string().when('to', {\n is: (to: string) => to === 'friend',\n then: yup.string().required('First Name is required')\n }),\n last_name: yup.string().when('to', {\n is: (to: string) => to === 'friend',\n then: yup.string().required('Last Name is required')\n }),\n email: yup.string().when('to', {\n is: (to: string) => to === 'friend',\n then: yup.string().email('Invalid email').required('Email is required')\n }),\n confirm_email: yup.string().when('to', {\n is: (to: string) => to === 'friend',\n then: yup.string().email('Invalid email').oneOf([yup.ref('email'), null], 'Emails must match').required('Confirm Email is required')\n }),\n confirm: yup.boolean().oneOf([true])\n})\n\nconst initialValues: InitialValuesTypes = {\n to: 'friend',\n first_name: '',\n last_name: '',\n email: '',\n confirm_email: '',\n confirm: false\n}\n\nexport const TicketResaleModal = ({\n ticket = {} as ITicketTypes,\n onClose = () => { },\n onSubmit = () => { },\n loading = false\n}: Props) => {\n const { hash, holder_name, event_name, currency, retain_amount_on_sale, ticket_type_is_active } = ticket\n\n return (\n <Modal\n open={true}\n onClose={onClose}\n aria-labelledby=\"modal-modal-title\"\n aria-describedby=\"modal-modal-description\"\n className='resale-modal'\n >\n <Box style={style}>\n <h3>Sell Ticket</h3>\n <div>\n <h3>Ticket Details</h3>\n <div>\n <h4>Event</h4>\n <p>{event_name}</p>\n </div>\n <div>\n <h4>Ticket Holder</h4>\n <p>{holder_name}</p>\n </div>\n <div>\n <h4>Ticket ID</h4>\n <p>{hash}</p>\n </div>\n </div>\n <div>\n <h3>Sell to Whom</h3>\n <Formik\n initialValues={initialValues}\n validationSchema={schema}\n onSubmit={onSubmit}\n >\n {({ values, isValid, dirty }) => (\n <Form>\n <div>\n <Field\n name='to'\n label='I want to sell the ticket to someone I know'\n type='radio'\n value='friend'\n component={RadioField}\n />\n {values.to === 'friend' && (\n <div className='sell-to-friend'>\n <div className='user-info-box'>\n <div className='field-box'>\n <div className='icon'>\n <SVG\n src={UserSvg}\n width='24'\n height='24'\n />\n </div>\n <Field\n name='first_name'\n label='First Name'\n type='text'\n component={CustomField}\n />\n </div>\n <div className='field-box'>\n <div className='empty-box' />\n <Field\n name='last_name'\n label='Last Name'\n type='text'\n component={CustomField}\n />\n </div>\n </div>\n <div className='email-info-box'>\n <div className='field-box'>\n <div className='icon'>\n <SVG\n src={EmailSvg}\n width='24'\n height='24'\n />\n </div>\n <Field\n name='email'\n label='Email address'\n type='text'\n component={CustomField}\n />\n </div>\n <div className='field-box'>\n <div className='empty-box' />\n <Field\n name='confirm_email'\n label='Confirm Email address'\n type='text'\n component={CustomField}\n />\n </div>\n </div>\n </div>\n )}\n </div>\n {ticket_type_is_active && (\n <div>\n <Field\n name=\"to\"\n label=\"I will sell my ticket to anyone who wants to buy it\"\n type=\"radio\"\n value=\"anyone\"\n component={RadioField}\n />\n </div>\n )}\n <div>\n <h4>Terms of Resale</h4>\n <p>I confirm that I want to sell this ticket and that, if someone chooses to buy it, I will no longer own it or have the right to ask for it back.</p>\n <p>I also understand that, if no one chooses to buy it, it remains my property, is valid for entry to <strong>{event_name}</strong> and I will not receive any refund.</p>\n <p>If my ticket is sold, the original card I used to buy my ticket will be refunded with the original amount paid, minus a small handling fee of <strong>{`${currency ?? ''} ${retain_amount_on_sale ?? '0'}`}</strong>, and that any existing refunds due to me for referring sales for this event are no longer valid.</p>\n <Field\n name='confirm'\n label='I agree'\n type='checkbox'\n component={CheckboxField}\n />\n </div>\n <div className=\"resale-action-button\">\n <Button\n type=\"submit\"\n disabled={!(isValid && dirty)}\n >\n {loading ? <CircularProgress size=\"22px\" /> : 'Sell Ticket'}\n </Button>\n </div>\n </Form>\n )}\n </Formik>\n </div>\n </Box>\n </Modal>\n )\n}\n","import { Field, Form, Formik, FormikProps } from 'formik'\nimport _identity from 'lodash/identity'\nimport React from 'react'\n\nimport { fieldDataAdapter } from '../../adapters/customFields'\nimport {\n getFieldComponent,\n getFieldLabel,\n getValidateFunctions,\n} from '../billing-info-container/utils'\nimport { CustomFieldTypes } from './index'\n\ninterface HolderCustomFieldsProps {\n initialValues: { [key: string]: any };\n fields: Array<CustomFieldTypes>;\n handleFormSubmit?: (values: Record<string, any>) => void;\n handleFormClose?: () => void;\n}\n\nconst CustomFieldsForm = ({\n initialValues = {},\n fields = [],\n handleFormSubmit = _identity,\n handleFormClose = _identity,\n}: HolderCustomFieldsProps) => (\n <Formik\n initialValues={initialValues}\n onSubmit={values => handleFormSubmit(values)}\n enableReinitialize={true}\n >\n {(props: FormikProps<any>) => (\n <Form>\n <div className=\"updatable-custom-fields\">\n {fields.map((customField: CustomFieldTypes) => {\n const adaptedCustomField = fieldDataAdapter(customField)\n return (\n <Field\n key={customField.id}\n name={customField.name}\n label={getFieldLabel(customField)}\n component={getFieldComponent(adaptedCustomField)}\n validate={getValidateFunctions(\n customField,\n [],\n props.values,\n props.errors\n )}\n isMultiple={adaptedCustomField.isMultiple}\n radios={adaptedCustomField.radios}\n options={adaptedCustomField.options}\n />\n )\n })}\n </div>\n <div className=\"buttons-block\">\n <button\n className=\"cancel-btn\"\n type=\"button\"\n onClick={() => {\n props.resetForm()\n handleFormClose()\n }}\n >\n Cancel\n </button>\n <button className=\"submit-btn\" type=\"submit\">\n Update ticket\n </button>\n </div>\n </Form>\n )}\n </Formik>\n)\n\nexport { CustomFieldsForm }\n","import _isArray from 'lodash/isArray'\nimport _isEmpty from 'lodash/isEmpty'\n\nimport { CustomFieldOption, CustomFieldTypes } from '../index'\n\nconst getLabelForValue = (options: CustomFieldOption[], value: string | string[]): string => {\n const getLabel = (singleValue: string) => {\n const option = options.find(option => option.value === singleValue)\n return option ? option.name : ''\n }\n\n if (_isArray(value)) {\n const labels = value.map(getLabel)\n return labels.join(', ')\n }\n\n return getLabel(value as string)\n}\n\nexport const renderCustomFieldValue = (customField: CustomFieldTypes) => {\n if (customField.type === 'checkbox') {\n return customField.value ? 'Checked' : 'Unchecked'\n }\n\n if (_isEmpty(customField.value)) {\n return 'N/A'\n }\n\n if (customField.type === 'select' || customField.type === 'select_multi' || customField.type === 'radio') {\n return getLabelForValue(customField.options as CustomFieldOption[], customField.value)\n }\n\n return customField.value\n}\n\nexport const isFieldUpdatable = (field: CustomFieldTypes): boolean => {\n if (!field?.settings?.allowUpdate || (field?.type === 'checkbox' && field?.required)) {\n return false\n }\n return true\n}\n\nexport const createCustomFieldsUpdateBody = (\n updatedValues: Record<string, any>,\n notUpdatableCustomFieldsValues: Array<CustomFieldTypes> = []\n) =>\n notUpdatableCustomFieldsValues.reduce(\n (acc, customField) => {\n if (!isFieldUpdatable(customField)) {\n acc[customField.name] = customField.value\n }\n return acc\n },\n { ...updatedValues }\n )\n","import _identity from 'lodash/identity'\nimport _isEmpty from 'lodash/isEmpty'\nimport React, { useMemo, useState } from 'react'\nimport SVG from 'react-inlinesvg'\n\nimport EditSvg from '../../assets/images/edit.svg'\nimport { CustomFieldsForm } from './CustomFieldsForm'\nimport { CustomFieldTypes } from './index'\nimport { ITicketTypes } from './ticketsTable'\nimport {\n createCustomFieldsUpdateBody,\n isFieldUpdatable,\n renderCustomFieldValue,\n} from './utils'\n\ninterface HolderCustomFieldsProps {\n ticket: ITicketTypes;\n holderCustomFields: CustomFieldTypes[];\n handleTicketHoldersUpdate: (values: Record<string, any>, ticketHash: string) => void;\n}\n\nconst TicketHolderCustomFields = ({\n ticket,\n holderCustomFields,\n handleTicketHoldersUpdate = _identity,\n}: HolderCustomFieldsProps) => {\n const [showHolderCustomFieldsSection, setShowHolderCustomFieldsSection] =\n useState(false)\n\n const [allowedHolderCustomFields, notAllowedHolderCustomFields] = useMemo(() => {\n const allowedFields: CustomFieldTypes[] = []\n const notAllowedFields: CustomFieldTypes[] = []\n\n holderCustomFields.forEach((field: CustomFieldTypes) => {\n if (isFieldUpdatable(field)) {\n allowedFields.push(field)\n } else {\n notAllowedFields.push(field)\n }\n })\n return [allowedFields, notAllowedFields]\n }, [holderCustomFields])\n\n const holderEditableFieldsFormInitialValues = useMemo(\n () => getHolderCustomFieldsInitialValues(holderCustomFields),\n [holderCustomFields]\n )\n\n const handleFormClose = () => {\n setShowHolderCustomFieldsSection(false)\n }\n\n const handleForSubmit = (values: Record<string, any>) => {\n // Collect all updatable and non updatable values for bulk update\n const fullUpdatableValues = createCustomFieldsUpdateBody(\n values,\n notAllowedHolderCustomFields\n )\n setShowHolderCustomFieldsSection(false)\n handleTicketHoldersUpdate(fullUpdatableValues, ticket.hash)\n }\n\n function getHolderCustomFieldsInitialValues(fields: Array<CustomFieldTypes>) {\n const initialValues: { [key: string]: string | boolean | string[] } = {}\n\n for (const field of fields) {\n if (isFieldUpdatable(field)) {\n initialValues[field.name] =\n field.type === 'checkbox' ? Boolean(field.value) : field.value || ''\n }\n }\n return initialValues\n }\n\n return (\n <>\n <div className=\"holder-custom-fields\">\n {!_isEmpty(allowedHolderCustomFields) && <SVG src={EditSvg} onClick={() => setShowHolderCustomFieldsSection(true)} />}\n {holderCustomFields.map((customField: CustomFieldTypes) => (\n <div className=\"info-item\" key={customField.id}>\n <b>{customField.label} :</b> {renderCustomFieldValue(customField)}\n </div>\n ))}\n </div>\n {showHolderCustomFieldsSection && (\n <div className=\"custom-fields-block show\">\n <p className=\"editable-ticket-id\">Edit ticket {ticket.hash}</p>\n <CustomFieldsForm\n initialValues={holderEditableFieldsFormInitialValues}\n fields={allowedHolderCustomFields}\n handleFormSubmit={handleForSubmit}\n handleFormClose={handleFormClose}\n />\n </div>\n )}\n </>\n )\n}\n\nexport { TicketHolderCustomFields }\n","import CircularProgress from '@mui/material/CircularProgress'\nimport Paper from '@mui/material/Paper'\nimport Table from '@mui/material/Table'\nimport TableBody from '@mui/material/TableBody'\nimport TableCell from '@mui/material/TableCell'\nimport TableContainer from '@mui/material/TableContainer'\nimport TableHead from '@mui/material/TableHead'\nimport TableRow from '@mui/material/TableRow'\nimport _identity from 'lodash/identity'\nimport _isEmpty from 'lodash/isEmpty'\nimport _map from 'lodash/map'\nimport React, { Fragment, useState } from 'react'\n\nimport { downloadPDF } from '../../utils'\nimport SnackbarAlert from '../common/SnackbarAlert'\nimport { CustomFieldTypes } from './index'\nimport { TicketHolderCustomFields } from './TicketHolderCustomFields'\n\ninterface IAddOnTypes {\n name: string;\n groupName: string;\n status: string;\n}\n\nexport interface ITicketTypes {\n add_ons?: IAddOnTypes[];\n hash: string;\n ticket_type: string;\n holder_name: string;\n status: string;\n pdf_link: string;\n is_sellable: boolean;\n is_on_sale?: boolean;\n event_name: string;\n currency: string;\n ticket_type_hash: string;\n ticket_type_is_active?: boolean;\n canSellTicket?: boolean;\n retain_amount_on_sale: number | string;\n ticketsTitle: string;\n}\n\nexport interface IActionColumns {\n download?: boolean;\n sell_ticket?: boolean;\n}\n\ninterface TicketsTableTypes {\n canSellTicket?: boolean;\n tickets: ITicketTypes[];\n columns: Array<{\n id?: string | number;\n key: keyof ITicketTypes & keyof IActionColumns;\n label: string | number | null | undefined;\n }>;\n handleSellTicket: (ticket: ITicketTypes) => void;\n handleRemoveFromResale: (ticket: ITicketTypes) => void;\n handleTicketHoldersUpdate: (values: Record<string, any>, ticketHash: string) => void;\n\n icon?: string;\n displayColumnNameInRow?: boolean;\n ticketsTitle?: string;\n ticketHoldersCustomFields?: Array<CustomFieldTypes>;\n}\n\ntype PdfDownload = {\n hash: string;\n loading: boolean;\n}\n\nconst TicketsTable = ({\n tickets = [],\n columns = [],\n icon = '',\n displayColumnNameInRow = false,\n canSellTicket = true,\n ticketsTitle = 'Your Tickets',\n ticketHoldersCustomFields = [],\n handleSellTicket = _identity,\n handleRemoveFromResale = _identity,\n handleTicketHoldersUpdate = _identity,\n}: TicketsTableTypes) => {\n const [pdfError, setPdfError] = useState<string | null>(null)\n const [pdfDownload, setPdfDownload] = useState<PdfDownload>({\n hash: '',\n loading: false,\n })\n\n const getRow = (ticket: ITicketTypes) =>\n _map(columns, (column, columnIndex) => {\n if (column.key === 'download') {\n const ticketIsDownloading =\n pdfDownload.loading && pdfDownload.hash === ticket.hash\n\n if (!ticket.pdf_link || ticket.status === 'Sold' || ticket.is_on_sale)\n return <TableCell key={columnIndex}>{null}</TableCell>\n\n return (\n <TableCell key={columnIndex}>\n {Boolean(icon) && <img src={icon} alt=\"nodata\" />}\n <span\n aria-hidden={true}\n className=\"action-button\"\n onClick={async () => {\n if (ticketIsDownloading) {\n return\n }\n\n setPdfDownload({ hash: ticket.hash, loading: true })\n try {\n const pdfDownloadError = await downloadPDF(ticket.pdf_link)\n if (pdfDownloadError) {\n setPdfError(pdfDownloadError?.message)\n }\n } catch (err) {\n if (err && typeof err === 'string') {\n setPdfError(err)\n }\n } finally {\n setPdfDownload({ hash: '', loading: false })\n }\n }}\n >\n {ticketIsDownloading ? <CircularProgress size=\"22px\" /> : 'Download'}\n </span>\n </TableCell>\n )\n }\n\n if (column.key === 'sell_ticket') {\n return (\n <TableCell key={columnIndex}>\n {ticket.is_sellable && canSellTicket && (\n <span\n aria-hidden={true}\n className=\"action-button\"\n onClick={() => handleSellTicket(ticket)}\n >\n Sell Ticket\n </span>\n )}\n {ticket.is_on_sale && (\n <span\n aria-hidden={true}\n className=\"action-button\"\n onClick={() => handleRemoveFromResale(ticket)}\n >\n Remove from Resale\n </span>\n )}\n </TableCell>\n )\n }\n\n return displayColumnNameInRow ? (\n <TableCell key={columnIndex}>\n <div className=\"cell-block\">\n <span>{column.label}</span>\n <span>{ticket[column.key]}</span>\n </div>\n </TableCell>\n ) : (\n <TableCell key={columnIndex}>\n <div className=\"cell-block\">\n <span>{ticket[column.key]}</span>\n </div>\n </TableCell>\n )\n })\n\n return (\n <div className=\"tickets-box\">\n <SnackbarAlert\n type=\"error\"\n isOpen={!!pdfError}\n message={pdfError || ''}\n onClose={() => setPdfError(null)}\n />\n <h4 className=\"sub-title tickets-title\">{ticketsTitle}</h4>\n <TableContainer component={Paper}>\n <Table aria-label=\"collapsible table\">\n {displayColumnNameInRow ? null : (\n <TableHead>\n <TableRow>\n {_map(columns, item => (\n <TableCell key={item.key}>{item.label || ''}</TableCell>\n ))}\n </TableRow>\n </TableHead>\n )}\n <TableBody>\n {tickets.map((ticket: ITicketTypes, index: number) => {\n const holderCustomFields = ticketHoldersCustomFields.filter(\n (field: CustomFieldTypes) => field?.ticketHash === ticket?.hash\n )\n\n return (\n <Fragment key={index}>\n <TableRow>{getRow(ticket)}</TableRow>\n {!_isEmpty(holderCustomFields) && (\n <TableRow>\n <TableCell colSpan={columns.length}>\n <TicketHolderCustomFields\n ticket={ticket}\n holderCustomFields={holderCustomFields}\n handleTicketHoldersUpdate={handleTicketHoldersUpdate}\n />\n </TableCell>\n </TableRow>\n )}\n {!!ticket.add_ons?.length && (\n <TableRow>\n <TableCell colSpan={6}>\n <Table className=\"ticket-add-on-table\">\n <TableHead>\n <TableRow>\n <TableCell>Add-On</TableCell>\n <TableCell>Status</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {ticket.add_ons.map((add_on: IAddOnTypes, index: number) => (\n <TableRow key={index}>\n <TableCell>\n {add_on.groupName && `${add_on.groupName}: `}{' '}\n {add_on.name}\n </TableCell>\n <TableCell>{add_on.status}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableCell>\n </TableRow>\n )}\n </Fragment>\n )\n })}\n </TableBody>\n </Table>\n </TableContainer>\n </div>\n )\n}\n\nexport default TicketsTable\n","import './style.css'\n\nimport { CircularProgress } from '@mui/material'\nimport axios, { AxiosError } from 'axios'\nimport { Field, Form, Formik } from 'formik'\nimport _identity from 'lodash/identity'\nimport React, { FC, useState } from 'react'\nimport * as Yup from 'yup'\n\nimport { resetPassword } from '../../api'\nimport { CustomField } from '../common/CustomField'\n\ninterface IResetPasswordProps {\n token?: string;\n onResetPasswordSuccess?: (res: any) => void;\n onResetPasswordError?: (e: AxiosError) => void;\n}\n\nconst Schema = Yup.object().shape({\n password: Yup.string()\n .min(8, 'Password must have 8+ characters')\n .required('Required')\n .matches(\n new RegExp('^(?=.*[@$!%*#?&])'),\n 'Password must contain at least one special character'\n ),\n password_confirmation: Yup.string()\n .required('Required')\n .oneOf([Yup.ref('password'), null], 'Passwords must match'),\n})\n\nexport const ResetPasswordContainer: FC<IResetPasswordProps> = ({\n token: tokenProps = '',\n onResetPasswordSuccess = _identity,\n onResetPasswordError = _identity,\n}) => {\n const [loading, setLoading] = useState(false)\n return (\n <div className=\"reset-password\">\n <div className=\"title\">Change Password</div>\n <Formik\n initialValues={{ password: '', password_confirmation: '' }}\n validationSchema={Schema}\n onSubmit={async (values: any) => {\n try {\n setLoading(true)\n let token\n if (tokenProps) {\n token = tokenProps\n } else {\n if (typeof window !== 'undefined') {\n const params: URLSearchParams = new URL(`${window.location}`).searchParams\n token = params.get('token')\n }\n }\n\n const payload = {\n token,\n ...values,\n }\n const res = await resetPassword(payload)\n onResetPasswordSuccess(res)\n } catch (e) {\n if (axios.isAxiosError(e)) {\n onResetPasswordError(e)\n }\n } finally {\n setLoading(false)\n }\n }}\n >\n {({ isValid, dirty }) => (\n <Form>\n <div className=\"body\">\n <div className=\"field-item\">\n <Field\n name=\"password\"\n label=\"New Password\"\n type=\"password\"\n component={CustomField}\n />\n </div>\n <div className=\"field-item\">\n <Field\n name=\"password_confirmation\"\n label=\"Confirm Password\"\n type=\"password\"\n component={CustomField}\n />\n </div>\n </div>\n <div className=\"action-button\">\n <button type=\"submit\" disabled={!(isValid && dirty)}>\n {loading ? <CircularProgress size=\"22px\" /> : 'Submit'}\n </button>\n </div>\n </Form>\n )}\n </Formik>\n </div>\n )\n}\n","import axios, { AxiosError } from 'axios'\nimport { Field, Form, Formik } from 'formik'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport React, { FC, useState } from 'react'\n\nimport { authorize, getProfileData } from '../../api'\nimport { combineValidators, emailValidator, requiredValidator } from '../../validators'\nimport { CustomField } from '../common'\nimport { PoweredBy } from '../common/PoweredBy'\n\nexport interface ILoginFormProps {\n alreadyHasUser?: boolean;\n userExpired?: boolean;\n\n onLoginSuccess?: (res: IProfileData) => void;\n onLoginError?: (e: AxiosError) => void;\n\n onGetProfileDataSuccess?: (res: IProfileData) => void;\n onGetProfileDataError?: (e: AxiosError) => void;\n\n onForgotPasswordButtonClick?: () => void;\n onSignupButtonClick?: () => void;\n\n logo?: string;\n showForgotPasswordButton?: boolean;\n showSignUpButton?: boolean;\n showPoweredByImage?: boolean;\n registerUrl?: string;\n}\n\n// interface IUserData {\n// id: string;\n// firstName: string;\n// lastName: string;\n// email: string;\n// city?: string;\n// country?: string;\n// countryId?: string;\n// phone?: string;\n// streetAddress?: string;\n// state?: string;\n// zip?: string;\n// zipCode?: string;\n// stateId?: string;\n// }\n\nexport const setLoggedUserData = (data: IProfileData) => ({\n id: data.id,\n first_name: data.firstName,\n last_name: data.lastName,\n email: data.email,\n confirmEmail: data.email,\n city: data?.city || '',\n country: data?.countryId || '',\n phone: data?.phone || '',\n street_address: data?.streetAddress || '',\n state: data?.stateId || '',\n zip: data?.zipCode || '',\n})\n\nexport const LoginForm: FC<ILoginFormProps> = ({\n alreadyHasUser = false,\n userExpired = false,\n\n onLoginSuccess = _identity,\n onLoginError = _identity,\n\n onGetProfileDataSuccess = _identity,\n onGetProfileDataError = _identity,\n\n onForgotPasswordButtonClick = _identity,\n onSignupButtonClick = _identity,\n\n logo,\n showForgotPasswordButton = false,\n showSignUpButton = false,\n showPoweredByImage = false,\n registerUrl = 'https://www.ticketfairy.com/register',\n}) => {\n const [error, setError] = useState('')\n return (\n <div className=\"login-modal\">\n <Formik\n initialValues={{ email: '', password: '' }}\n onSubmit={async ({ email, password }) => {\n try {\n const body = { email, password }\n const authRes = await authorize(body)\n let profileResponse = null\n try {\n profileResponse = await getProfileData()\n onGetProfileDataSuccess(_get(profileResponse, 'data'))\n } catch (e) {\n if (axios.isAxiosError(e)) {\n onGetProfileDataError(e)\n }\n return\n }\n\n const profileSpecifiedData = _get(profileResponse, 'data')\n const profileDataObj = setLoggedUserData(profileSpecifiedData)\n if (typeof window !== 'undefined') {\n window.localStorage.setItem('user_data', JSON.stringify(profileDataObj))\n const event = new window.CustomEvent('tf-login')\n window.document.dispatchEvent(event)\n }\n onLoginSuccess(_get(authRes, 'data'))\n } catch (e) {\n if (axios.isAxiosError(e)) {\n const error = _get(e, 'response.data.message') || 'Error'\n setError(error)\n onLoginError(e)\n } else if (e instanceof Error) {\n setError(e?.message || 'Error')\n }\n }\n }}\n >\n {props => (\n <Form onSubmit={props.handleSubmit}>\n <div className=\"modal-title\">Login</div>\n <div className=\"login-logo-container\">\n <img\n className=\"login-logo-tff\"\n src={\n logo ||\n 'https://www.ticketfairy.com/resources/images/logo-ttf-black.svg'\n }\n alt=\"logo\"\n />\n </div>\n <div className=\"server_auth__error\">{error}</div>\n {alreadyHasUser && (\n <p className=\"info-text-for-login\">\n It appears this email is already attached to an account. Please log in\n here to complete your registration.\n </p>\n )}\n {userExpired && (\n <p className=\"info-text-for-login\">\n Your session has expired, please log in again.\n </p>\n )}\n <div className=\"login-modal-body\">\n <div className=\"login-modal-body__email\">\n <Field\n name=\"email\"\n label=\"Email\"\n type=\"email\"\n component={CustomField}\n validate={combineValidators(requiredValidator, emailValidator)}\n />\n </div>\n <div className=\"login-modal-body__password\">\n <Field\n name=\"password\"\n label=\"Password\"\n type=\"password\"\n component={CustomField}\n validate={requiredValidator}\n />\n </div>\n <div className=\"login-action-button\">\n <button type=\"submit\">Login</button>\n </div>\n {showForgotPasswordButton && (\n <div className=\"forgot-password\">\n <span aria-hidden=\"true\" onClick={onForgotPasswordButtonClick}>\n Forgot password?\n </span>\n </div>\n )}\n {showSignUpButton && (\n <div className=\"forgot-password\">\n {onSignupButtonClick !== _identity ? (\n <span\n aria-hidden=\"true\"\n onClick={onSignupButtonClick}\n style={{ cursor: 'pointer' }}\n >\n Sign up\n </span>\n ) : (\n <a\n href={registerUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Sign up\n </a>\n )}\n </div>\n )}\n {showPoweredByImage ? <PoweredBy /> : null}\n </div>\n </Form>\n )}\n </Formik>\n </div>\n )\n}\n","import { FormikValues } from 'formik'\nimport _isEmpty from 'lodash/isEmpty'\nimport _map from 'lodash/map'\n\nimport { isBrowser } from '../../../../utils'\nimport { combineValidators, requiredValidator } from '../../../../validators'\n\nexport const getValidateFunctions = ({\n element,\n values,\n}: {\n element: IFormField;\n values: FormikValues;\n}) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const validationFunctions: any[] = []\n if (element.required) {\n validationFunctions.push(requiredValidator)\n }\n\n if (element.onValidate) {\n validationFunctions.push(element.onValidate)\n }\n\n if (element.name === 'confirmEmail') {\n const isSameEmail = (confirmEmail?: string) =>\n values.email !== confirmEmail\n ? 'Please confirm your email address correctly'\n : null\n validationFunctions.push(isSameEmail)\n }\n\n if (element.name === 'confirmPassword') {\n const isSame = (confirmPassword?: string) =>\n values.password !== confirmPassword\n ? 'Password confirmation does not match'\n : null\n\n validationFunctions.push(isSame)\n }\n\n return combineValidators(...validationFunctions)\n}\n\nexport const updateFormFieldsAttributes = (\n formFields: IFormFieldsSection[],\n attributes?: IFieldAttribute\n) => {\n if (attributes && !_isEmpty(attributes)) {\n const updatedFormFields = _map(formFields, fieldSection => {\n const fieldSectionAttributes = attributes[fieldSection.name] || {}\n\n const updatedFields = _map(fieldSection.fields, fieldItem => {\n const fieldItemAttributes = attributes[fieldItem.name] || {}\n return { ...fieldItem, ...fieldItemAttributes }\n })\n\n return {\n ...fieldSection,\n ...fieldSectionAttributes,\n fields: updatedFields,\n }\n })\n\n return updatedFormFields\n }\n return formFields\n}\n\nexport const getFieldClassNames = (id: string, existingClassNames: string) => {\n if (isBrowser) {\n const elem = document && document.getElementById(id)\n\n if ((elem?.parentElement?.clientWidth || 0) < 375) {\n return existingClassNames + ' full-width'\n }\n }\n\n return existingClassNames\n}\n\nexport const insertHTML = (elementId: string, text = '') => {\n if (isBrowser) {\n const elem = document && document.getElementById(elementId)\n\n if (!elem?.childNodes.length) {\n elem?.insertAdjacentHTML('afterbegin', text)\n }\n }\n\n return null\n}\n","import { Field, FormikValues } from 'formik'\nimport _identity from 'lodash/identity'\nimport _map from 'lodash/map'\nimport React, { FC } from 'react'\n\nimport { replaceVarInString } from '../../../utils'\nimport {\n CheckboxField,\n CustomField,\n DatePickerField,\n PhoneNumberField,\n SelectField,\n} from '../index'\nimport { getFieldClassNames, getValidateFunctions, insertHTML } from './utils'\n\nexport interface IFieldsSectionProps {\n formFields?: IFormFieldsSection[];\n values: FormikValues;\n setFieldValue: (\n field: string,\n value: FormikValues | string | number,\n shouldValidate?: boolean | undefined\n ) => void;\n disableField?: string;\n countries?: { [key: string]: string | number }[];\n states?: { [key: string]: string | number }[];\n theme?: 'dark' | 'light';\n containerClass?: string;\n setPhoneValidationIsLoading?: (isLoading: boolean) => void;\n onFieldChange?: (name: string, value: string | number) => void;\n}\n\nconst SectionContainer: FC<{ className: string }> = ({\n children,\n className,\n}) => <div className={className}>{children}</div>\n\nexport const FieldsSection = ({\n formFields = [],\n countries = [],\n states = [],\n values,\n setFieldValue,\n theme,\n containerClass = '',\n setPhoneValidationIsLoading = _identity,\n onFieldChange = _identity,\n disableField,\n}: IFieldsSectionProps) => (\n <>\n {_map(formFields, (item, index) => {\n const {\n name,\n groupLabel,\n groupLabelVars = [],\n groupLabelClassName,\n groupClassName = '',\n fields,\n } = item\n return (\n <SectionContainer key={name} className={groupClassName}>\n <span id={`group_label_${index}`} className={groupLabelClassName}>\n {typeof groupLabel === 'string'\n ? insertHTML(\n `group_label_${index}`,\n replaceVarInString(groupLabel, groupLabelVars)\n )\n : groupLabel}\n </span>\n <div className={`fields-container ${groupClassName}`}>\n {_map(fields, (fieldData, fieldIndex) => {\n const {\n name,\n label,\n className = 'full-width',\n type,\n component,\n options = [],\n required,\n } = fieldData\n const id = `${name}-${fieldIndex}`\n const classNames = `${containerClass}-container__field ${className}`\n return (\n component || (\n <div\n key={name}\n id={id}\n className={getFieldClassNames(id, classNames)}\n >\n <Field\n disabled={name === disableField || name === 'state' && !states.length}\n name={name}\n label={`${label}${required ? '' : ' (optional)'}`}\n type={type}\n validate={name === 'state' && !states.length ? false : getValidateFunctions({\n element: fieldData,\n values,\n })}\n setFieldValue={setFieldValue}\n component={\n type === 'checkbox'\n ? CheckboxField\n : type === 'select'\n ? SelectField\n : type === 'phone'\n ? PhoneNumberField\n : type === 'date'\n ? DatePickerField\n : CustomField\n }\n options={\n name === 'country'\n ? countries\n : name === 'state'\n ? states\n : options\n }\n theme={theme}\n setPhoneValidationIsLoading={\n type === 'phone'\n ? setPhoneValidationIsLoading\n : undefined\n }\n onChange={(e: React.FormEvent<EventTarget>) => {\n const element = e.target as HTMLInputElement\n const { value } = element\n setFieldValue(name, value)\n onFieldChange(name, value)\n }}\n disableDropdown={fieldData.disableDropdown}\n />\n </div>\n )\n )\n })}\n </div>\n </SectionContainer>\n )\n })}\n </>\n)\n","import _map from 'lodash/map'\n\nexport const collectStates = (states: any) => {\n const mappedStates = _map(states, (item, key) => ({\n label: item,\n value: key,\n }))\n\n return mappedStates\n}\n","import React from 'react'\n\nimport { CONFIGS } from '../../utils'\n\nexport const formDefaultFields: IFormFieldsSection[] = [\n {\n name: 'basic-info',\n groupLabel: 'Create your account.',\n groupLabelClassName: '',\n groupClassName: '',\n fields: [\n {\n className: 'half-width',\n name: 'firstName',\n label: 'First Name',\n type: 'text',\n required: true,\n onValidate: null,\n },\n {\n className: 'half-width',\n name: 'lastName',\n label: 'Last Name',\n type: 'text',\n required: true,\n onValidate: null,\n },\n {\n name: 'email',\n label: 'Email',\n type: 'email',\n required: true,\n onValidate: null,\n },\n {\n name: 'confirmEmail',\n label: 'Confirm Email',\n type: 'email',\n required: true,\n onValidate: null,\n },\n ],\n },\n {\n name: 'billing-info',\n groupLabel: '',\n groupLabelClassName: '',\n groupClassName: '',\n fields: [\n {\n className: 'half-width',\n name: 'zip',\n label: 'Post Code/Zip',\n type: 'text',\n required: true,\n onValidate: null,\n },\n {\n className: 'half-width',\n name: 'country',\n label: 'Country',\n type: 'select',\n required: true,\n onValidate: null,\n },\n ],\n },\n {\n name: 'password-info',\n groupLabel: (\n <div className=\"email-info-block\">\n <span>Choose a password for your new</span>\n <b> {CONFIGS.CLIENT_NAME || 'Mana Common'} </b>\n <span>account</span>\n </div>\n ),\n groupLabelClassName: '',\n groupClassName: '',\n fields: [\n {\n className: 'half-width',\n name: 'password',\n label: 'Password',\n type: 'password',\n required: true,\n onValidate: null,\n },\n {\n className: 'half-width',\n name: 'confirmPassword',\n label: 'Confirm Password',\n type: 'password',\n required: true,\n onValidate: null,\n },\n ],\n },\n]\n","import { Button, CircularProgress } from '@mui/material'\nimport axios, { AxiosError } from 'axios'\nimport { Form, Formik, FormikValues } from 'formik'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport _map from 'lodash/map'\nimport React, { FC, useEffect, useState } from 'react'\n\nimport { getCountries, getProfileData, getStates, register } from '../../api'\nimport { CONFIGS, getFormInitialValues, getQueryVariable } from '../../utils'\nimport { FieldsSection } from '../common/FieldSection'\nimport { updateFormFieldsAttributes } from '../common/FieldSection/utils'\nimport ConfirmModal from '../confirmModal'\nimport { collectStates } from './adapters'\nimport { formDefaultFields } from './constants'\n\ninterface IRegistrationProps {\n formFields?: Array<IFormFieldsSection>;\n additionalFieldAttribute?: IFieldAttribute;\n registrationType: string;\n onGetCountriesSuccess?: (res: any) => void;\n onGetCountriesError?: (e: AxiosError) => void;\n onRegisterAccountSuccess?: (res: any) => void;\n onRegisterAccountError?: (e: AxiosError) => void;\n onGetStatesSuccess?: (res: any) => void;\n onGetStatesError?: (e: AxiosError) => void;\n customerEmail: string;\n}\n\nexport const RegistrationForm: FC<IRegistrationProps> = ({\n formFields,\n additionalFieldAttribute,\n registrationType,\n customerEmail,\n onGetCountriesSuccess = _identity,\n onGetCountriesError = _identity,\n onRegisterAccountSuccess = _identity,\n onRegisterAccountError = _identity,\n onGetStatesSuccess = _identity,\n onGetStatesError = _identity,\n}) => {\n const [errorMessage, setErrorMessage] = useState('')\n const [countries, setCountries] = useState<{ [key: string]: string | number }[]>([])\n const [states, setStates] = useState<{ [key: string]: string | number }[]>([])\n const [phoneValidationIsLoading, setPhoneValidationIsLoading] = useState(false)\n const [showErrorModal, setshowErrorModal] = useState(false)\n\n const updatedFormFields = updateFormFieldsAttributes(\n formFields || formDefaultFields,\n additionalFieldAttribute\n )\n\n // Fetch countries data\n const fetchCountries = async () => {\n try {\n const res = await getCountries()\n setCountries(\n _map(res.data, item => ({\n label: item.name,\n value: item.id,\n }))\n )\n onGetCountriesSuccess(res.data)\n } catch (e) {\n if (axios.isAxiosError(e)) {\n const errorMessage = _get(e, 'response.data.message') || 'Error'\n setErrorMessage(errorMessage)\n onGetCountriesError(e)\n }\n }\n }\n\n // Fetch states data\n const fetchStates = async (countryId?: string | number) => {\n try {\n const fetchCountryId = countryId ? countryId : '1'\n const res = await getStates(fetchCountryId)\n const states = _get(res, 'data', [])\n const mappedStates = collectStates(states)\n setStates(mappedStates)\n onGetStatesSuccess(res.data)\n } catch (e) {\n if (axios.isAxiosError(e)) {\n const errorMessage = _get(e, 'response.data.message', {}) as AxiosError\n onGetStatesError(errorMessage)\n }\n }\n }\n\n const handleRegisterAccount = async (values: FormikValues) => {\n const accessHash = getQueryVariable('hash') || ''\n\n try {\n const bodyFormData = new FormData()\n\n bodyFormData.append('first_name', values.firstName)\n bodyFormData.append('last_name', values.lastName)\n bodyFormData.append('email', values.email)\n bodyFormData.append('zip', values.zip)\n bodyFormData.append('city', values.city)\n bodyFormData.append('country', values.country)\n bodyFormData.append('password', values.password)\n bodyFormData.append('phone', values.phone || '')\n bodyFormData.append('password_confirmation', values.confirmPassword)\n bodyFormData.append('client_id', CONFIGS.CLIENT_ID)\n bodyFormData.append('client_secret', CONFIGS.CLIENT_SECRET)\n bodyFormData.append('register_for', registrationType)\n bodyFormData.append('delegation_access_hash', accessHash)\n\n await register(bodyFormData)\n const profileRes = await getProfileData()\n\n window.localStorage.setItem('user_data', JSON.stringify(_get(profileRes, 'data')))\n onRegisterAccountSuccess(profileRes)\n } catch (e) {\n if (axios.isAxiosError(e)) {\n console.log(e)\n const errorMessage = _get(e, 'response.data.message') || 'Error'\n onRegisterAccountError(e)\n setshowErrorModal(true)\n setErrorMessage(errorMessage)\n } else if (e instanceof Error) {\n setErrorMessage(e?.message || 'Error')\n }\n }\n }\n\n useEffect(() => {\n fetchCountries()\n fetchStates()\n }, [])\n\n return (\n <div className=\"register-form-container\">\n <h2>Create an account</h2>\n <div className=\"register-sub-title\">\n To manage your tickets, please create an account:\n </div>\n {showErrorModal && (\n <ConfirmModal\n hideCancelBtn={true}\n message={errorMessage}\n onClose={() => (window.location.href = '/')}\n onConfirm={() => (window.location.href = '/')}\n />\n )}\n {errorMessage && <div className=\"register-error\">{errorMessage}</div>}\n <Formik\n initialValues={{\n ...getFormInitialValues(updatedFormFields),\n email: customerEmail,\n }}\n enableReinitialize={true}\n onSubmit={handleRegisterAccount}\n >\n {props => (\n <Form>\n <div className=\"register-body\">\n <FieldsSection\n disableField={'email'}\n containerClass=\"register\"\n formFields={updatedFormFields}\n values={props.values}\n setFieldValue={props.setFieldValue}\n setPhoneValidationIsLoading={setPhoneValidationIsLoading}\n countries={countries}\n states={states}\n onFieldChange={(name, value) => {\n if (name === 'country') {\n fetchStates(value)\n }\n }}\n />\n </div>\n <div className=\"button-container\">\n <Button\n className=\"register-button\"\n type=\"submit\"\n disabled={props.isSubmitting || phoneValidationIsLoading}\n >\n {props.isSubmitting ? <CircularProgress size={26} /> : 'Create Account'}\n </Button>\n </div>\n </Form>\n )}\n </Formik>\n </div>\n )\n}\n","/* eslint-disable max-len */\nexport const VERIFICATION_STATUSES = {\n PENDING: 'PENDING',\n APPROVED: 'APPROVED_VERIFIED',\n FAILED: 'FAILED',\n WRONG_CUSTOMER: 'WRONG_CUSTOMER',\n}\n\nexport const VERIFICATION_PROVIDERS = {\n JUMIO: 'jumio',\n STRIPE: 'stripe'\n}\n\nexport const TRANSACTION_STATUSES = {\n ERROR: 'ERROR',\n SUCCESS: 'SUCCESS',\n}\n\nexport const VERIFICATION_MESSAGES = {\n PENDING:\n 'Your ID verification is currently being processed. We will notify you as soon as it is completed. Thank you for your patience.',\n APPROVED: 'Your ID verification is approved!',\n FAILED: 'Unfortunately your ID verification has failed. Please try again.',\n WRONG_CUSTOMER: 'The order does not belong to the customer.',\n}\n\nexport const DELEGATION_ACCESS_ERROR = 'Delegation Access not found'\n","import { CircularProgress } from '@mui/material'\nimport { Field, Form, Formik } from 'formik'\nimport _identity from 'lodash/identity'\nimport React from 'react'\n\nimport { requiredValidator } from '../../validators'\nimport { CheckboxField, SelectField } from '../common'\nimport { CustomField } from '../common/CustomField'\nimport { getValidateFunctions } from '../common/FieldSection/utils'\n\nexport interface IIssueTicketForm {\n classNamePrefix?: string;\n handleSubmit: (values: any, resetForm: any) => void;\n selectTicketTypeOptions: Array<any>;\n initialValues?: any;\n}\n\nconst IssueTicketForm = ({\n classNamePrefix = 'delegations',\n handleSubmit = _identity,\n selectTicketTypeOptions,\n initialValues,\n}: IIssueTicketForm) => (\n <div className={`${classNamePrefix}-issue-form`}>\n <Formik\n initialValues={initialValues}\n onSubmit={(values, { resetForm, setSubmitting }) => {\n delete values.confirm\n handleSubmit(values, { resetForm, setSubmitting })\n }}\n >\n {({ isValid, values, isSubmitting }) => (\n <Form>\n <div className=\"body\">\n <div className=\"field-item\">\n <div className=\"field_label\">Ticket Type</div>\n <Field\n name=\"ticketTypeId\"\n label=\"Ticket Type\"\n component={SelectField}\n validate={requiredValidator}\n options={selectTicketTypeOptions}\n />\n </div>\n <div className=\"field-item\">\n <div className=\"field_label\">Name</div>\n <Field\n name=\"firstName\"\n label=\"Name\"\n component={CustomField}\n validate={requiredValidator}\n />\n </div>\n <div className=\"field-item\">\n <div className=\"field_label\">Last Name</div>\n <Field\n name=\"lastName\"\n label=\"Last Name\"\n component={CustomField}\n validate={requiredValidator}\n />\n </div>\n <div className=\"field-item\">\n <div className=\"field_label\">Email</div>\n <Field\n name=\"email\"\n label=\"Email\"\n component={CustomField}\n validate={requiredValidator}\n />\n </div>\n <div className=\"field-item\">\n <div className=\"field_label\">Confirm Email</div>\n <Field\n name=\"confirmEmail\"\n label=\"Confirm Email\"\n component={CustomField}\n validate={getValidateFunctions({\n element: {\n name: 'confirmEmail',\n label: 'Confirm Email',\n required: true,\n },\n values,\n })}\n />\n </div>\n </div>\n <div className=\"field-item checkbox_item\">\n <Field\n name=\"confirm\"\n label=\"I agree to ManaCommon's privacy policy\"\n type=\"checkbox\"\n validate={requiredValidator}\n component={CheckboxField}\n />\n </div>\n <div className=\"action-button\">\n <button type=\"submit\" disabled={!isValid}>\n {isSubmitting ? <CircularProgress size=\"22px\" /> : 'Issue Ticket'}\n </button>\n </div>\n </Form>\n )}\n </Formik>\n </div>\n)\n\nexport default IssueTicketForm\n","import Table from '@mui/material/Table'\nimport TableBody from '@mui/material/TableBody'\nimport TableCell from '@mui/material/TableCell'\nimport TableContainer from '@mui/material/TableContainer'\nimport TableHead from '@mui/material/TableHead'\nimport TableRow from '@mui/material/TableRow'\nimport React from 'react'\n\nexport interface ITicketsAssignedTable {\n tableTitle?: string;\n classNamePrefix?: string;\n noTicketsAssignedText?: string;\n issuePageData: {\n tickets: Array<any>;\n };\n}\n\nconst TicketsAssignedTable = ({\n tableTitle = 'Tickets assigned',\n classNamePrefix = 'delegations',\n issuePageData,\n noTicketsAssignedText = \"You haven't issued any tickets yet.\",\n}: ITicketsAssignedTable) => (\n <div className={`${classNamePrefix}-tables-block`}>\n <div className={`${classNamePrefix}-ticket-holder`}>{tableTitle}</div>\n {issuePageData.tickets?.length ? (\n <TableContainer className=\"my-ticket-table\">\n <Table aria-label=\"collapsible table\">\n <TableHead>\n <TableRow>\n <TableCell key={'Ticket Holder'}>{'Ticket Holder'}</TableCell>\n <TableCell key={'Ticket Type'}>{'Ticket Type'}</TableCell>\n <TableCell key={'Status'}>{'Status'}</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {issuePageData.tickets?.map((ticket: any) => (\n <TableRow key={ticket.id}>\n <TableCell key={ticket.id + 'type'}>\n {ticket.firstName + ' ' + ticket.lastName}\n </TableCell>\n <TableCell key={ticket.id + 'ticketType'}>{ticket.ticketType}</TableCell>\n <TableCell key={ticket.id + 'status'}>{ticket.status}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n ) : (\n noTicketsAssignedText\n )}\n </div>\n)\n\nexport default TicketsAssignedTable\n","import Table from '@mui/material/Table'\nimport TableBody from '@mui/material/TableBody'\nimport TableCell from '@mui/material/TableCell'\nimport TableContainer from '@mui/material/TableContainer'\nimport TableHead from '@mui/material/TableHead'\nimport TableRow from '@mui/material/TableRow'\nimport _map from 'lodash/map'\nimport React from 'react'\n\nimport { IDelegationsTicketType } from '../../api/guestTicketDelegation'\n\nexport interface ITicketsAvailableTable {\n tableTitle?: string;\n classNamePrefix?: string;\n issuePageData: {\n ticketTypes: IDelegationsTicketType;\n };\n}\n\nconst TicketsAvailableTable = ({\n tableTitle = 'Tickets available',\n classNamePrefix = 'delegations',\n issuePageData,\n}: ITicketsAvailableTable) => (\n <div className={`${classNamePrefix}-tables-block`}>\n <div className={`${classNamePrefix}-ticket-holder`}>{tableTitle}</div>\n <TableContainer className=\"my-ticket-table\">\n <Table aria-label=\"collapsible table\">\n <TableHead>\n <TableRow>\n <TableCell key={1}>{'Ticket Type'}</TableCell>\n <TableCell key={2}>{'Total Quantity'}</TableCell>\n <TableCell key={3}>{'Quantity Issued'}</TableCell>\n <TableCell key={4}>{'Quantity Remaining'}</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {_map(issuePageData.ticketTypes, (val, key) => (\n <TableRow key={key}>\n <TableCell key={key + 'name'}>{val.optionValue}</TableCell>\n <TableCell key={key + 'maxQty'}>{val.delegationMaxQuantity}</TableCell>\n <TableCell key={key + 'issued'}>{val.delegationQuantityIssued}</TableCell>\n <TableCell key={key + 'remaining'}>\n {Number(val.delegationMaxQuantity) - Number(val.delegationQuantityIssued)}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n </div>\n)\n\nexport default TicketsAvailableTable\n","import axios, { AxiosError } from 'axios'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport _map from 'lodash/map'\nimport React, { useEffect, useState } from 'react'\n\nimport { IDelegationsData, IDelegationsTicketType } from '../../api/guestTicketDelegation'\nimport { getDelegationTickets, issueTicket } from '../../api/index'\nimport { CONFIGS, getQueryVariable } from '../../utils'\nimport { Loader } from '../common'\nimport ConfirmModal from '../confirmModal'\nimport { DELEGATION_ACCESS_ERROR } from '../idVerificationContainer/constants'\nimport IssueTicketForm from './IssueTicketForm'\nimport TicketsAssignedTable from './TicketsAssignedTable'\nimport TicketsAvailableTable from './TicketsAvailableTable'\n\nexport interface IssueTicketData {\n headTitle?: string;\n classNamePrefix?: string;\n onGetIssuePageDataSuccess?: () => void;\n onGetIssuePageDataError?: (e: AxiosError) => void;\n}\n\nconst IssueComponent = ({\n classNamePrefix = 'delegations',\n headTitle = 'Manage Your Guest Tickets',\n onGetIssuePageDataSuccess = _identity,\n onGetIssuePageDataError = _identity,\n}: IssueTicketData) => {\n const [loading, setLoading] = useState(true)\n const [showMaxQtyModal, setShowMaxQtyModal] = useState(false)\n const [showSuccessModal, setShowSuccessModal] = useState(false)\n const [error, setError] = useState('')\n const accessHash = getQueryVariable('hash') || ''\n const [issuePageData, setIssuePageData] = useState<IDelegationsData>(\n {} as IDelegationsData\n )\n\n useEffect(() => {\n const fetchDelegationTickets = async () => {\n try {\n const res = await getDelegationTickets(accessHash)\n setLoading(false)\n setIssuePageData(res?.data?.data?.attributes || {})\n onGetIssuePageDataSuccess()\n } catch (e) {\n setLoading(false)\n if (axios.isAxiosError(e)) {\n onGetIssuePageDataError(e)\n }\n }\n }\n fetchDelegationTickets()\n }, [showSuccessModal])\n const selectTicketTypeOptions = _map(\n issuePageData.ticketTypes || ({} as IDelegationsTicketType),\n (val, key) => ({\n value: key,\n label: val.optionValue,\n })\n )\n return (\n <div className={`${classNamePrefix}-container`}>\n {loading ? (\n <Loader />\n ) : (\n <>\n {showMaxQtyModal && (\n <ConfirmModal\n hideCancelBtn={true}\n message={error}\n onClose={() =>\n error === DELEGATION_ACCESS_ERROR\n ? (window.location.href = '/')\n : setShowMaxQtyModal(false)\n }\n onConfirm={() =>\n error === DELEGATION_ACCESS_ERROR\n ? (window.location.href = '/')\n : setShowMaxQtyModal(false)\n }\n />\n )}\n {showSuccessModal && (\n <ConfirmModal\n hideCancelBtn={true}\n message=\"Your ticket successfully issued.\"\n onClose={() => setShowSuccessModal(false)}\n onConfirm={() => setShowSuccessModal(false)}\n />\n )}\n <div className={`${classNamePrefix}-head-title`}>{headTitle}</div>\n <div className={`${classNamePrefix}-inner-blocks`}>\n <div className={`${classNamePrefix}-image-block`}>\n <img\n src={`${CONFIGS.BASE_URL}${issuePageData?.eventImage}`}\n alt=\"main_event_img\"\n title=\"\"\n />\n </div>\n <div className={`${classNamePrefix}-tables`}>\n <TicketsAvailableTable\n tableTitle=\"Tickets available\"\n issuePageData={issuePageData}\n classNamePrefix=\"delegations\"\n />\n <TicketsAssignedTable\n tableTitle=\"Tickets assigned\"\n issuePageData={issuePageData}\n classNamePrefix=\"delegations\"\n />\n <div className={`${classNamePrefix}-issue-block`}>\n <div className={`${classNamePrefix}-issue-title`}>Issue New Tickets</div>\n <div className={`${classNamePrefix}-issue-subtitle`}>\n Please select the type of tickets and enter recipient details:\n </div>\n </div>\n <IssueTicketForm\n classNamePrefix={'delegations'}\n handleSubmit={async (values: any, { resetForm, setSubmitting }) => {\n try {\n await issueTicket(accessHash, values)\n setShowSuccessModal(true)\n resetForm()\n } catch (e) {\n if (axios.isAxiosError(e)) {\n const error = _get(e, 'response.data.message') || 'Error'\n setError(error)\n } else if (e instanceof Error) {\n setError(e?.message || 'Error')\n }\n setShowMaxQtyModal(true)\n } finally {\n setLoading(false)\n setSubmitting(false)\n }\n }}\n selectTicketTypeOptions={selectTicketTypeOptions}\n initialValues={{\n ticketTypeId: '',\n firstName: '',\n lastName: '',\n email: '',\n confirmEmail: '',\n confirm: false,\n }}\n />\n </div>\n </div>\n </>\n )}\n </div>\n )\n}\n\nexport default IssueComponent\n","import _get from 'lodash/get'\n\nimport { addToCart, getCheckoutPageConfigs, postOnCheckout } from '../../api'\nimport { createCheckoutDataBodyWithDefaultHolder, isBrowser } from '../../utils'\n\ninterface IAddToCartFuncProps {\n eventId: string | number;\n data: any;\n ticketQuantity: number;\n enableBillingInfoAutoCreate?: boolean;\n}\n\nexport const addToCartFunc = async ({\n eventId,\n data,\n ticketQuantity,\n enableBillingInfoAutoCreate = true,\n}: IAddToCartFuncProps) => {\n const result = await addToCart(eventId, data)\n const pageConfigsDataResponse = await getCheckoutPageConfigs()\n\n if (result.status === 200 && pageConfigsDataResponse.status === 200) {\n const pageConfigsData = _get(pageConfigsDataResponse, 'data.attributes') || {}\n\n const {\n skip_billing_page: skipBillingPage = false,\n has_add_on: hasAddOn = false,\n free_ticket: freeTicket = false,\n } = pageConfigsData\n\n let hash: string | number | undefined = ''\n let total: string | number | undefined = ''\n\n isBrowser && window.localStorage.removeItem('add_ons')\n\n if (skipBillingPage && !hasAddOn) {\n // Get user data for checkout data\n const userData =\n isBrowser && window.localStorage.getItem('user_data')\n ? JSON.parse(window.localStorage.getItem('user_data') || '')\n : {}\n\n const checkoutBody = createCheckoutDataBodyWithDefaultHolder(\n ticketQuantity,\n userData\n )\n\n const checkoutResponse = enableBillingInfoAutoCreate\n ? await postOnCheckout(checkoutBody, freeTicket)\n : null\n\n hash = checkoutResponse?.data?.attributes?.hash || ''\n total = checkoutResponse?.data?.attributes?.total || ''\n }\n\n return {\n skip_billing_page: skipBillingPage,\n event_id: String(eventId),\n hash,\n total,\n hasAddOn,\n }\n }\n\n return null\n}\n","import _find from 'lodash/find'\nimport _forEach from 'lodash/forEach'\nimport _isEmpty from 'lodash/isEmpty'\nimport _values from 'lodash/values'\n\nexport const getTierIdBasedOnSeatId = (seatId: string, eventSeats: Array<EventSeat>) => {\n let tierId: number | string = ''\n\n _forEach(eventSeats, group => {\n _forEach(group.seats, (seatsCount, rowId) => {\n const [row_id, seat_id] = seatId.split(':')\n if (row_id === rowId && seat_id <= seatsCount) {\n tierId = Number(group.tier_id)\n return false\n }\n return true\n })\n })\n\n return tierId\n}\n\nexport const getButtonLabel = (count: number, tableMapEnabled: boolean) => {\n if (!count) {\n return tableMapEnabled ? `GET TABLES` : `GET TICKETS`\n } else if (count === 1) {\n return tableMapEnabled ? `GET ${count} TABLE` : `GET ${count} TICKET`\n }\n return tableMapEnabled ? `GET ${count} TABLES` : `GET ${count} TICKETS`\n}\n\nexport const getOwnReservationsBasedOnStatuses = (statuses: any) => {\n const ownReservations: string[] = []\n Object.keys(statuses).forEach((groupRowId: string) =>\n Object.keys(statuses[groupRowId]).forEach((seatIndex: string | number) => {\n if (statuses[groupRowId][seatIndex] === 'OR') {\n ownReservations.push(`${groupRowId}:${seatIndex}`)\n } else if (statuses[groupRowId][seatIndex] === 'H') {\n statuses[groupRowId][seatIndex] = 'BLOCKED'\n }\n })\n )\n return ownReservations\n}\n\nexport const getTicketDropdownData = (\n reservationData: Array<SeatReservationData>,\n tierReleations: TicketTypeTierRelations\n) => {\n const ticketsDropdownsData: Array<ITicketsDropdownsData> = []\n _forEach(reservationData, reservation => {\n if (tierReleations[reservation.tierId]) {\n const ticketsData = _values(tierReleations[reservation.tierId])\n ticketsDropdownsData.push({\n seatId: reservation.seatId,\n tierId: reservation.tierId,\n ticketsData,\n })\n } else {\n ticketsDropdownsData.push({\n seatId: reservation.seatId,\n tierId: reservation.tierId,\n ticketsData: [\n {\n ticket_type_tier_id: reservation.tierId,\n ticket_type_name: 'Please select Ticket Type',\n ticket_type_price: '',\n ticket_type_id: 'default',\n },\n ],\n })\n }\n })\n return ticketsDropdownsData\n}\n\nexport const getAddToCartRequestData = ({\n eventId,\n reservations = [],\n selectedSeats = [],\n selectedTickets = [],\n guestCounts = {},\n}: any) => {\n const hasGuests = !_isEmpty(guestCounts)\n\n const addToCartData: ICartRequestData = {\n attributes: {\n alternative_view_id: null,\n product_cart_quantity: reservations.length,\n product_options: {},\n product_id: eventId,\n ticket_types: {},\n },\n }\n\n const productOptions = {} as any\n const ticketTypes = {} as any\n\n _forEach(reservations, (item, index) => {\n const ticket = _find(\n selectedSeats[item],\n sitem => sitem.ticket_type_id === selectedTickets[item]\n )\n productOptions[ticket.ticket_type_option] = ticket.ticket_type_id\n\n const ticketTypesKey = hasGuests ? index : ticket.ticket_type_id\n const quantity = hasGuests\n ? guestCounts[item]\n : (ticketTypes[ticket.ticket_type_id]?.quantity || 0) + 1\n\n ticketTypes[ticketTypesKey] = {\n quantity,\n product_options: {\n [ticket.ticket_type_option]: ticket.ticket_type_id,\n ticket_price: ticket.ticket_type_price,\n },\n }\n })\n\n addToCartData.attributes.product_options = productOptions\n addToCartData.attributes.ticket_types = ticketTypes\n\n return addToCartData\n}\n\nexport const getTierRelationsArray = (data: Array<TicketTypeTierRelationsData>) => {\n const ticketTypeTireRelationsArray: Array<string | number | null> = []\n _forEach(data, (item: TicketTypeTierRelationsData) => {\n ticketTypeTireRelationsArray.push(...(_values(item) as any))\n })\n\n return ticketTypeTireRelationsArray\n}\n","import 'tf-seat-map-view/dist/index.css'\n\nimport React, { useEffect } from 'react'\nimport ReactDom from 'react-dom'\nimport SeatMapView from 'tf-seat-map-view'\n\nimport { Loader } from '../common'\nimport { getTierRelationsArray } from './utils'\n\nconst CONTAINER_DEFAULT_ID = 'seat_map_default_container'\n\n// Temp solution\ndeclare global {\n interface Window {\n tierPrices: any;\n }\n}\n\nexport const SeatMapComponent = (props: ISeatMapContainerProps) => {\n const { seatMapProps, mapContainerId } = props\n const {\n seatData,\n statuses,\n seatMapType = null,\n seatMapEvents = {},\n ticketTypeTierRelations = {},\n tierPrices,\n isReserving,\n predefinedSeats,\n isLoadingSeatMapData,\n } = seatMapProps\n\n useEffect(() => {\n const parentElement = document.getElementById(mapContainerId || CONTAINER_DEFAULT_ID)\n\n // Temp solution\n window.tierPrices = tierPrices\n\n if (parentElement) {\n let mapComponent = null\n\n if (!(seatData && statuses) || isLoadingSeatMapData) {\n mapComponent = <Loader />\n } else {\n mapComponent = (\n <SeatMapView\n disabled={isReserving}\n loading={isReserving}\n events={seatMapEvents}\n isSelectionOn={false}\n seatData={seatData}\n statuses={statuses}\n ticketTypeTireRelationsArray={getTierRelationsArray(ticketTypeTierRelations)}\n width={Math.min(parentElement?.clientWidth || 800, 800)}\n height={Math.min(parentElement?.clientWidth || 800, 800)}\n isBlockMap={seatMapType === 'block'}\n isTableMap={seatMapType === 'table'}\n predefinedSeats={predefinedSeats}\n />\n )\n }\n\n ReactDom.render(mapComponent, parentElement)\n }\n }, [\n isReserving,\n mapContainerId,\n seatData,\n seatMapEvents,\n seatMapType,\n tierPrices,\n statuses,\n ticketTypeTierRelations,\n ])\n\n return <div id={CONTAINER_DEFAULT_ID} />\n}\n","import { CSSProperties } from '@emotion/serialize'\nimport { Select, SelectChangeEvent, ThemeOptions } from '@mui/material'\nimport CircularProgress from '@mui/material/CircularProgress'\nimport FormControl from '@mui/material/FormControl'\nimport InputLabel from '@mui/material/InputLabel'\nimport MenuItem from '@mui/material/MenuItem'\nimport { createTheme, ThemeProvider } from '@mui/material/styles'\nimport Tooltip from '@mui/material/Tooltip'\nimport _find from 'lodash/find'\nimport _identity from 'lodash/identity'\nimport _isEmpty from 'lodash/isEmpty'\nimport _keys from 'lodash/keys'\nimport _map from 'lodash/map'\nimport _some from 'lodash/some'\nimport React, { useState } from 'react'\nimport { Button } from 'react-bootstrap'\n\nimport { createFixedFloatNormalizer } from '../../normalizers'\nimport { createMarkup } from '../../utils'\nimport { getButtonLabel, getTicketDropdownData } from './utils'\n\nexport const TicketsSection = (\n props: ITicketsSectionProps & {\n themeOptions?: ThemeOptions & {\n input?: CSSProperties;\n checkbox?: CSSProperties;\n };\n }\n) => {\n const {\n ticketTypeTierRelations,\n reservedSeats,\n theme = 'light',\n getTicketsBtnLabel,\n contentStyle = {},\n isButtonScrollable = false,\n themeOptions,\n handleGetTicketClick,\n handleCancelReservation,\n ticketDeleteButtonContent = 'Delete',\n ticketInfoContent = 'Info',\n selectedTickets,\n handleTicketSelect,\n currencySymbol,\n tableMapEnabled = false,\n guestCounts,\n setGuestCounts,\n isAddingToCart,\n } = props\n\n const [selectedTicketsInfo, setSelectedTicketsInfo] = useState<{\n [seatId: string]: boolean | undefined;\n }>({})\n\n const bookButtonIsDisabled =\n _some(selectedTickets, item => !item) ||\n _isEmpty(reservedSeats) ||\n reservedSeats.length !== _keys(selectedTickets).length\n const themeMui = createTheme(themeOptions)\n\n const ticketsDropdownsData = getTicketDropdownData(\n reservedSeats,\n ticketTypeTierRelations\n )\n\n const handleTicketChange = (event: SelectChangeEvent<string>, seatId: string) => {\n const {\n target: { value },\n } = event\n\n if (value !== 'default') {\n handleTicketSelect(value, seatId)\n }\n }\n\n const handleShowtTicketInfo = (seatId: string) => {\n setSelectedTicketsInfo(prevState => ({ ...prevState, [seatId]: !prevState[seatId] }))\n }\n\n return (\n <ThemeProvider theme={themeMui}>\n <div className={`get-tickets-page ${theme}`} style={contentStyle}>\n <div className=\"tickets-section\">\n {_map(selectedTickets, (ticketItem: string, key: string) => {\n const dropdownData =\n _find(ticketsDropdownsData, item => item.seatId === key) ||\n ({} as ITicketsDropdownsData)\n\n const selectedTicketData = _find(\n dropdownData.ticketsData,\n ticket => ticket.ticket_type_id === ticketItem\n ) as TicketTypeTierRelationsData\n\n // guest count dropdown options\n const startNum = Number(selectedTicketData?.ticket_type_min_number_of_guests)\n const endNum = Number(selectedTicketData?.ticket_type_max_number_of_guests)\n const numLength = endNum - startNum + 1\n const showGuestCountDropdown = Boolean(startNum && endNum)\n const showDescription = Boolean(selectedTicketData?.description)\n\n // prices\n const guestPrice =\n (guestCounts[dropdownData.seatId] - startNum) *\n Number(selectedTicketData?.guest_price)\n\n const finalPrice = createFixedFloatNormalizer(2)(\n selectedTicketData?.ticket_type_price + guestPrice\n )\n\n return (\n <div className=\"ticket\" key={key}>\n <div className=\"ticketsDropdowns\">\n <Select\n value={ticketItem || 'default'}\n onChange={event => handleTicketChange(event, dropdownData.seatId)}\n inputProps={{ 'aria-label': 'Without label' }}\n MenuProps={{\n PaperProps: {\n sx: { maxHeight: 150 },\n className: 'get-tickets-paper',\n },\n }}\n displayEmpty\n sx={{ borderRadius: 0 }}\n >\n <MenuItem value={'default'}>\n {`Please select ${tableMapEnabled ? 'Table Type' : 'Ticket Type'}`}\n </MenuItem>\n {_map(dropdownData.ticketsData, (option, index) => {\n if (option.ticket_type_id !== 'default') {\n return (\n <MenuItem value={option.ticket_type_id} key={index}>\n {option.ticket_type_name}\n </MenuItem>\n )\n }\n return null\n })}\n </Select>\n <Button\n className=\"ticket-delete\"\n onClick={() => {\n handleCancelReservation(dropdownData.seatId, dropdownData.tierId)\n }}\n >\n {ticketDeleteButtonContent}\n </Button>\n </div>\n {selectedTicketData && (\n <>\n <div style={{ display: 'flex' }}>\n <div\n style={{\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n }}\n >\n <div className=\"ticketPrice\">\n Price:\n <span className=\"ticketPrice-value\">\n {`${currencySymbol} ${finalPrice}`}\n </span>\n <span className=\"fees\">\n {selectedTicketData.fee_included\n ? ' (incl. Fees)'\n : ' (excl. Fees)'}\n </span>\n </div>\n {!_isEmpty(selectedTicketData.ticket_type_deposit) && (\n <div className=\"ticketDeposit\">\n Deposit:\n <span className=\"ticketPrice-value\">\n {` ${selectedTicketData?.ticket_type_deposit}%`}\n </span>\n </div>\n )}\n </div>\n <div\n style={{\n width: '100%',\n display: 'flex',\n justifyContent: 'end',\n alignItems: 'center',\n marginRight: 16,\n }}\n >\n {showDescription && (\n <Tooltip\n title=\"View Ticket Info\"\n placement=\"left\"\n arrow\n componentsProps={{\n tooltip: {\n sx: {\n backgroundColor: 'common.black',\n marginRight: '6px !important',\n '& .MuiTooltip-arrow': {\n color: 'common.black',\n },\n },\n },\n }}\n >\n <div\n className=\"ticket-info\"\n onClick={() => handleShowtTicketInfo(dropdownData.seatId)}\n onKeyDown={() => handleShowtTicketInfo(dropdownData.seatId)}\n >\n {ticketInfoContent}\n </div>\n </Tooltip>\n )}\n {showGuestCountDropdown && (\n <FormControl variant=\"outlined\" sx={{ m: 1, minWidth: 80 }}>\n <InputLabel id=\"demo-simple-select-standard-label\" shrink>\n GUESTS\n </InputLabel>\n <Select\n label=\"GUESTS\"\n labelId=\"demo-simple-select-standard-label\"\n value={guestCounts[dropdownData.seatId] || startNum}\n onChange={event => {\n setGuestCounts({\n ...guestCounts,\n [dropdownData.seatId]: Number(event.target.value),\n })\n }}\n inputProps={{ 'aria-label': 'Without label' }}\n MenuProps={{\n PaperProps: {\n sx: { maxHeight: 150 },\n className: 'get-tickets-paper',\n },\n }}\n displayEmpty\n sx={{ borderRadius: 0 }}\n >\n {_map(\n Array.from({ length: numLength }, (_, i) => startNum + i),\n (option, index) => (\n <MenuItem value={option} key={index}>\n {option}\n </MenuItem>\n )\n )}\n </Select>\n </FormControl>\n )}\n </div>\n </div>\n {selectedTicketsInfo[dropdownData.seatId] && (\n <div\n className=\"ticket-description-content\"\n dangerouslySetInnerHTML={createMarkup(\n selectedTicketData.description || ''\n )}\n />\n )}\n </>\n )}\n </div>\n )\n })}\n </div>\n <div>\n <Button\n className={`book-button\n ${bookButtonIsDisabled ? 'disabled' : ''}\n ${isButtonScrollable ? 'is-scrollable' : ''}\n `}\n onClick={!bookButtonIsDisabled ? handleGetTicketClick : _identity}\n disabled={isAddingToCart}\n >\n {isAddingToCart ? (\n <CircularProgress size={20} style={{ marginLeft: 10 }} />\n ) : (\n getTicketsBtnLabel || getButtonLabel(reservedSeats.length, tableMapEnabled)\n )}\n </Button>\n </div>\n </div>\n </ThemeProvider>\n )\n}\n","import React from 'react'\nimport Modal from '@mui/material/Modal'\nimport Box from '@mui/material/Box'\n\ninterface IRedirectModal {\n message: string\n onClickOk: () => void\n}\n\nconst style: React.CSSProperties = {\n position: 'absolute',\n top: '10%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n minWidth: 480,\n backgroundColor: '#e3e3e3',\n border: '1px solid white',\n outline: 'none',\n padding: '14px',\n maxHeight: '85vh',\n overflow: 'auto',\n}\n\nexport const RedirectModal = ({\n message = 'Your cart has expired. Please click on \"OK\" to return to the ticket selection page.',\n onClickOk = () => {},\n}: IRedirectModal) => {\n return (\n <Modal\n open={true}\n aria-labelledby=\"modal-modal-title\"\n aria-describedby=\"modal-modal-description\"\n className=\"redirect-modal\"\n >\n <Box style={style}>\n <p>{message}</p>\n <div className=\"footer\">\n <button onClick={onClickOk}>OK</button>\n </div>\n </Box>\n </Modal>\n )\n}\n","import Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Modal from '@mui/material/Modal'\nimport { Field, Form, Formik } from 'formik'\nimport React, { useState } from 'react'\n\nimport { sendRSVPInfo } from '../../api'\nimport { isBrowser } from '../../utils'\nimport { combineValidators, emailValidator, requiredValidator } from '../../validators'\nimport { CustomField, Loader } from '../common/index'\n\ninterface IRsvpContainerPage {\n showSection?: boolean;\n eventId: number;\n}\n\ninterface IRSVPValuesTypes {\n email: string;\n}\n\nconst style: React.CSSProperties = {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n minWidth: 480,\n backgroundColor: '#e3e3e3',\n border: '1px solid white',\n outline: 'none',\n padding: '14px',\n maxHeight: '85vh',\n overflow: 'auto',\n}\n\nexport const RsvpContainer = ({ showSection = false, eventId }: IRsvpContainerPage) => {\n const userDataEncoded = isBrowser ? window.localStorage.getItem('user_data') : ''\n const parsedData = JSON.parse(userDataEncoded || '{}')\n\n const [loading, setLoading] = useState(false)\n const [modal, setModal] = useState({ isOpen: false, text: '' })\n\n const handleModalClose = () => {\n setModal({ isOpen: false, text: '' })\n }\n\n const handleSubmit = async (values: IRSVPValuesTypes) => {\n try {\n setLoading(true)\n\n const requestData = { data: { email: values.email } }\n const response = await sendRSVPInfo(eventId, requestData)\n\n setModal({ isOpen: true, text: response.message })\n } catch (error) {\n if (error.response.status === 403) {\n setModal({ isOpen: true, text: error.response.data?.message })\n }\n } finally {\n setLoading(false)\n }\n }\n\n if (!showSection) {\n return null\n }\n\n return (\n <>\n <Modal\n open={modal.isOpen}\n onClose={handleModalClose}\n aria-labelledby=\"modal-modal-title\"\n aria-describedby=\"modal-modal-description\"\n className=\"rsvp-modal\"\n >\n <Box style={style} className=\"rsvp-modal-box\">\n <div className=\"rsvp-modal-container\">\n <div className=\"rsvp-modal-header\">{modal.text}</div>\n <div className=\"rsvp-modal-button\">\n <button type=\"button\" onClick={handleModalClose}>\n OK\n </button>\n </div>\n </div>\n </Box>\n </Modal>\n <div className=\"rsvp-container\">\n {loading ? (\n <Loader />\n ) : (\n <>\n <div className=\"rsvp-header\">RSVP</div>\n <div className=\"rsvp-email-container\">\n <Formik\n initialValues={{\n email: parsedData?.email || '',\n }}\n onSubmit={handleSubmit}\n enableReinitialize\n >\n <Form>\n <div className=\"rsvp-email-input-container\">\n <Field\n name=\"email\"\n label=\"EMAIL ADDRESS\"\n type=\"email\"\n validate={combineValidators(\n (value: string) =>\n requiredValidator(value, 'Please enter your Email'),\n (value: string) => emailValidator(value)\n )}\n component={CustomField}\n />\n </div>\n <div className=\"rsvp-button-container\">\n <Button type=\"submit\">RSVP</Button>\n </div>\n </Form>\n </Formik>\n </div>\n </>\n )}\n </div>\n </>\n )\n}\n","import _isEmpty from 'lodash/isEmpty'\nimport _map from 'lodash/map'\nimport React from 'react'\n\nexport const Influancers = (props: IInfluancersProps) => {\n const {\n data,\n classNamePrefix,\n headerNode = (\n <>\n TOP\n <span> INFLUANCERS</span>\n </>\n ),\n } = props\n return (\n <div className={`${classNamePrefix}_influencers_container`}>\n {!_isEmpty(data) && (\n <div className={`${classNamePrefix}_influencers_header`}>{headerNode}</div>\n )}\n <div className={`${classNamePrefix}_influencers`}>\n {_map(data, (influencer, index) => (\n <div key={influencer.prereg_id} className={`${classNamePrefix}_influencer`}>\n <span className={`${classNamePrefix}_influencer_index`}>{index + 1}</span>\n <span className={`${classNamePrefix}_influencer_title`}>INFLUENCER</span>\n <span className={`${classNamePrefix}_influencer_name`}>\n {influencer.name}\n </span>\n </div>\n ))}\n </div>\n </div>\n )\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport _identity from 'lodash/identity'\nimport _isEmpty from 'lodash/isEmpty'\nimport _map from 'lodash/map'\nimport React, { memo, useState } from 'react'\n\nimport { FEES_STYLES } from '../../constants'\nimport { createFixedFloatNormalizer, currencyNormalizerCreator } from '../../normalizers'\nimport { IOrderData } from '../../types'\nimport { CONFIGS } from '../../utils'\nimport Countdown from 'react-countdown'\nimport { showZero } from '../../utils/showZero'\nimport { IRenderer } from '../timerWidget'\n\ninterface OrderDetailsProps {\n orderData: any;\n paymentFieldsData: any[];\n customMobileText?: string;\n handleCountdownFinish?: () => void;\n}\n\ninterface CountdownI {\n expiresAt: number;\n handleCountdownFinish: () => void;\n}\n\nconst SimpleCountdown = memo(({ expiresAt, handleCountdownFinish }: CountdownI) => {\n const renderer = ({\n minutes,\n seconds,\n completed,\n handleCountdownFinish,\n }: IRenderer) => {\n if (completed) {\n handleCountdownFinish()\n return null\n }\n return (\n <span>\n {showZero(minutes)}:{showZero(seconds)}\n </span>\n )\n }\n\n return (<div className=\"mobile-order-timer\">\n {expiresAt && (\n <Countdown\n date={Date.now() + expiresAt * 1000}\n renderer={(props: any) =>\n renderer({\n ...props,\n handleCountdownFinish,\n })\n }\n />\n )}\n </div>)\n})\n\nexport const OrderDetails = ({\n orderData = {},\n paymentFieldsData = [],\n customMobileText = 'Your order total',\n handleCountdownFinish = _identity\n}: OrderDetailsProps) => {\n const { currency, guest_count } = orderData || {}\n const hasTableTypes = Boolean(Number(guest_count))\n const [isExpanded, setIsExpanded] = useState(false)\n\n // Find the total field to display in the mobile view\n const totalField = paymentFieldsData.find(field => field.id === 'total')\n const totalValue =\n totalField && orderData.total\n ? totalField.normalizer\n ? totalField.normalizer(orderData.total, currency, orderData)\n : orderData.total\n : ''\n\n const toggleExpand = () => {\n setIsExpanded(!isExpanded)\n }\n\n const defaultItemRenderer = (item: any) => {\n return (<div>\n <div key={item.id} className=\"add-on-container\">\n <span>{item.quantity}</span>\n <span className=\"add-on-x\">{' x '}</span>\n <span>{item.groupName ? item.groupName + ' - ' : ''}</span>\n <span>{item.name}</span>\n <span>{' - '}</span>\n <span>\n {CONFIGS.FEES_STYLE === FEES_STYLES.TRADITIONAL &&\n currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(parseFloat(item.price)),\n currency,\n ) + ' (incl. fees)'}\n {CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH &&\n currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(parseFloat(item.cost)),\n currency,\n )}\n {CONFIGS.FEES_STYLE === FEES_STYLES.FINAL_WITH_BREAKDOWN &&\n currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(parseFloat(item.price)),\n currency,\n )}\n </span>\n <span className=\"add-on-each\">{' each'}</span>\n </div>\n {CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH && (\n <p className=\"fees\">\n {`(${currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(\n parseFloat(String(item.price)),\n ),\n currency,\n )} with fees)`}\n </p>\n )}\n {CONFIGS.FEES_STYLE === FEES_STYLES.FINAL_WITH_BREAKDOWN && parseFloat(item.price) - parseFloat(item.cost) > 0 && (\n <p className=\"fees\">\n {`(${currencyNormalizerCreator(createFixedFloatNormalizer(2)(parseFloat(item.cost)), currency)} + ${currencyNormalizerCreator(createFixedFloatNormalizer(2)(parseFloat(item.price) - parseFloat(item.cost)), currency)} fee)`}\n </p>\n )}\n </div>)\n }\n\n const defaultTableRenderer = (item: any) => {\n return (<div>\n <div key={item.id} className=\"table-type-container\">\n <span>{item.groupName ? item.groupName + ' - ' : ''}</span>\n <span>{item.name}</span>\n <span>{' - '}</span>\n <span>Guest Count{': '}</span>\n <span>{item.guestCount}</span>\n </div>\n <div>\n <span>\n {CONFIGS.FEES_STYLE === FEES_STYLES.TRADITIONAL &&\n currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(parseFloat(item.price)),\n currency,\n ) + ' (incl. fees)'}\n {CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH &&\n currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(parseFloat(item.cost)),\n currency,\n )}\n {CONFIGS.FEES_STYLE === FEES_STYLES.FINAL_WITH_BREAKDOWN &&\n currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(parseFloat(item.price)),\n currency,\n )}\n </span>\n <br/>\n {CONFIGS.FEES_STYLE === FEES_STYLES.DISPLAY_BOTH && (\n <p className=\"fees\">\n {`(${currencyNormalizerCreator(\n createFixedFloatNormalizer(2)(\n parseFloat(String(item.price)),\n ),\n currency,\n )} with fees)`}\n </p>\n )}\n {CONFIGS.FEES_STYLE === FEES_STYLES.FINAL_WITH_BREAKDOWN && parseFloat(item.price) - parseFloat(item.cost) > 0 && (\n <p className=\"fees\">\n {`(${currencyNormalizerCreator(createFixedFloatNormalizer(2)(parseFloat(item.cost)), currency)} + ${currencyNormalizerCreator(createFixedFloatNormalizer(2)(parseFloat(item.price) - parseFloat(item.cost)), currency)} fee)`}\n </p>\n )}\n </div>\n </div>)\n }\n\n return (\n <div className=\"payment_page payment_page_single\">\n {/* Mobile view summary */}\n <div className=\"mobile-order-summary\">\n <div className=\"mobile-order-summary-content\" onClick={toggleExpand}>\n <div className=\"mobile-order-info\">\n <div\n className={`mobile-order-info-container order-info-container-left ${\n isExpanded ? 'open' : ''\n }`}\n >\n <div className=\"mobile-order-text\">{customMobileText}</div>\n </div>\n <div className=\"mobile-order-info-container order-info-container-right\">\n {!isExpanded && (\n <div className=\"mobile-order-total\">{totalValue}</div>\n )}\n {orderData?.expires_at && (\n <SimpleCountdown expiresAt={orderData?.expires_at} handleCountdownFinish={handleCountdownFinish} />\n )}\n </div>\n </div>\n </div>\n </div>\n\n {/* Original content - will be hidden on mobile when collapsed */}\n <div\n className={`order_info_section ${isExpanded ? 'expanded' : 'collapsed'}`}\n style={{ display: hasTableTypes ? 'block' : 'grid' }}\n >\n {_map(paymentFieldsData, field => {\n const { id, label, className = '', normalizer = _identity } = field\n const value = orderData[id as keyof IOrderData] || ''\n let component = null\n\n if (field.id === 'add_ons' && _isEmpty(value)) {\n return false\n }\n\n if (field.id === 'tableTypes') {\n const valueArray = value as Array<any>\n\n component = (\n <div\n key={id}\n className=\"order_info_block\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n {_map(valueArray, tableTypeItem => (\n <div\n key={tableTypeItem.id}\n style={{\n display: 'grid',\n gridTemplateColumns: '33% 33% 33%',\n gridColumnGap: '10%',\n }}\n >\n <div className=\"order_info_block\">\n <div className=\"order_info_title\">Table Type</div>\n <div className={`${className} order_info_text`}>\n {tableTypeItem.ticketType}\n </div>\n </div>\n <div className=\"order_info_block\">\n <div className=\"order_info_title\">Number of Tables</div>\n <div className={`${className} order_info_text`}>\n {tableTypeItem.count}\n </div>\n </div>\n <div className=\"order_info_block\">\n <div className=\"order_info_title\">Guest Count</div>\n <div className={`${className} order_info_text`}>\n {tableTypeItem.quantity}\n </div>\n </div>\n </div>\n ))}\n </div>\n )\n }\n\n return (\n component || (\n <div key={id} className={`order_info_block ${className}`}>\n <div className=\"order_info_title\">{label}</div>\n <div className={`${className} order_info_text`}>\n {typeof value === 'string' || typeof value === 'number'\n ? normalizer(value, currency, orderData)\n : _map(value, item => (\n item.isTable ? defaultTableRenderer(item) : defaultItemRenderer(item)\n ))}\n </div>\n </div>\n )\n )\n })}\n </div>\n </div>\n )\n}\n","/* eslint-disable max-len */\nimport './style.css'\n\nimport { Button } from '@mui/material'\nimport axios, { AxiosError } from 'axios'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport _map from 'lodash/map'\nimport React, { SyntheticEvent, useEffect, useRef, useState } from 'react'\n\nimport { getConfirmationData } from '../../api'\nimport { usePixel } from '../../hooks/usePixel'\nimport { IReferralPromotion } from '../../types'\nimport { createMarkup, getCookieByName, isBrowser } from '../../utils'\nimport { CopyMessageModal } from '../common'\nimport SocialButtons from './social-buttons'\n\nexport interface IShareButton {\n mainLabel: string;\n subLabel: string;\n platform: string;\n shareData: any;\n points?: number | string;\n onAfterShare?: (event: SyntheticEvent) => void;\n eventActionId?: string;\n oneTimeAction?: boolean;\n alreadyApplied?: boolean;\n btnClassName?: string;\n}\n\nexport interface IConfirmationLabels {\n confirmationTitle?: string;\n confirmationMain?: string;\n confirmationHelper?: string;\n paymentPlanConfirmationTitle?: string;\n paymentPlanConfirmationMain?: string;\n paymentPlanConfirmationHelper?: string;\n}\n\nexport interface IConfirmationPage {\n hasCopyIcon?: boolean;\n isReferralEnabled: boolean;\n showDefaultShareButtons: boolean;\n messengerAppId: string;\n shareButtons: IShareButton[];\n onGetConfirmationDataSuccess: (res: ICheckoutCompleteData) => void;\n onGetConfirmationDataError: (e: AxiosError) => void;\n onLinkCopied: () => void;\n orderHash?: string;\n confirmationLabels: IConfirmationLabels;\n clientLabel?: string;\n showReferralsInfoText?: boolean;\n showCopyInfoModal?: boolean;\n showPricingNoteSection?: boolean;\n showOrderDetailsBtn?: boolean;\n onOrderDetailsClick?: (data: ICheckoutCompleteData) => void;\n showProductImage?: boolean;\n eventTitle?: string;\n eventDate?: string;\n eventLocation?: string;\n}\n\nexport const ConfirmationContainer = ({\n confirmationLabels,\n hasCopyIcon = true,\n isReferralEnabled,\n showDefaultShareButtons,\n messengerAppId = '',\n shareButtons = [],\n onGetConfirmationDataSuccess = _identity,\n onGetConfirmationDataError = _identity,\n orderHash,\n onLinkCopied = _identity,\n clientLabel,\n showReferralsInfoText = false,\n showCopyInfoModal = false,\n showPricingNoteSection = false,\n showOrderDetailsBtn = false,\n onOrderDetailsClick = _identity,\n showProductImage = true,\n eventTitle,\n eventDate,\n eventLocation,\n}: IConfirmationPage) => {\n const inputRef = useRef(null)\n const [data, setData] = useState<ICheckoutCompleteData | null>(null)\n const dataEncoded = (isBrowser && window.localStorage.getItem('checkoutData')) || ''\n const dataDecoded = dataEncoded ? JSON.parse(dataEncoded) : { hash: orderHash }\n const { hash } = dataDecoded\n const eventId = data?.product_id || ''\n\n useEffect(() => {\n (async () => {\n if (hash) {\n try {\n const confirmationDataResponse = await getConfirmationData(hash)\n const data = confirmationDataResponse.data.attributes\n data.personal_share_sales = data.personal_share_sales.map(salesItem => {\n const salesData: IReferralPromotion = {\n label: `If your friends buy ${salesItem.sales} tickets`,\n price: '',\n }\n if (salesItem.price === 0) {\n salesData.subLabel = 'Your ticket becomes'\n salesData.price = 'FREE!'\n } else {\n salesData.subLabel = 'Your ticket goes down to'\n salesData.price = data.currency.symbol + Number(salesItem.price).toFixed(2)\n }\n\n return salesData\n })\n data.personal_share_sales.unshift({\n label: 'Your ticket is currently',\n price: data.currency.symbol + data.product_price?.toFixed(2),\n })\n // Ensure order_hash is included in the data\n if (!data.order_hash) {\n data.order_hash = hash\n }\n setData(data)\n onGetConfirmationDataSuccess(confirmationDataResponse.data.attributes)\n\n // Clear user_data for non-logged-in users after successful purchase\n if (isBrowser) {\n const isLoggedIn = Boolean(getCookieByName('X-TF-ECOMMERCE'))\n if (!isLoggedIn) {\n window.localStorage.removeItem('user_data')\n }\n }\n } catch (error) {\n if (axios.isAxiosError(error)) onGetConfirmationDataError(error)\n }\n }\n })()\n }, [hash])\n\n const [showCopyModal, setShowCopyModal] = useState(false)\n\n const onClose = () => {\n setShowCopyModal(false)\n }\n\n const onChangeShareLink = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newData = {\n ...data,\n personal_share_link: e.target.value,\n } as ICheckoutCompleteData\n setData(newData)\n }\n const {\n confirmationTitle = 'Your Tickets are Confirmed!',\n confirmationMain = 'Your tickets are available in My Tickets section',\n confirmationHelper = 'Please bring them with you to the event',\n paymentPlanConfirmationTitle = 'Your Tickets are Confirmed!',\n paymentPlanConfirmationMain = 'Your payment plan is pending and we are trying to take your initial payment. If your initial payment does not complete, your payment plan will be cancelled.',\n paymentPlanConfirmationHelper = 'You will receive a confirmation with your tickets once your final payment has been made.',\n } = confirmationLabels\n\n const pageUrl = isBrowser ? window.location.href.split('?')[0] : ''\n usePixel(eventId, { page: 'complete', pageUrl, orderHash: hash })\n\n return (\n <div className=\"confirmation-page\">\n {showCopyInfoModal && (\n <CopyMessageModal onClose={onClose} showCopyModal={showCopyModal} />\n )}\n {data && (\n <>\n <div className=\"header-container\">\n {showProductImage && (\n <div className=\"header-product-image\">\n <img alt=\"\" className=\"product-image\" src={data.product_image} />\n </div>\n )}\n <div className=\"header-product-text\">\n <p className=\"title\">\n {data.is_payment_plan ? paymentPlanConfirmationTitle : confirmationTitle}\n </p>\n {(eventTitle || eventDate || eventLocation) && (\n <div className=\"event-details\">\n {eventTitle && <div className=\"event-title\">{eventTitle}</div>}\n {eventDate && <div className=\"event-date\">{eventDate}</div>}\n {eventLocation && <div className=\"event-location\">{eventLocation}</div>}\n </div>\n )}\n <div\n className=\"share-message-section\"\n dangerouslySetInnerHTML={\n data.custom_confirmation_page_text &&\n data.custom_confirmation_page_text_full_replacement\n ? createMarkup(data.custom_confirmation_page_text)\n : undefined\n }\n >\n {data.custom_confirmation_page_text &&\n data.custom_confirmation_page_text_full_replacement ? undefined : (\n <>\n {Boolean(data.is_payment_plan) && (\n <>\n <span className=\"main\">{paymentPlanConfirmationMain}</span>\n <span className=\"helper\">{paymentPlanConfirmationHelper}</span>\n </>\n )}\n {!data.is_payment_plan && (\n <>\n {data.attach_tickets ? (\n <span className=\"main\">\n Your tickets have been emailed to you\n </span>\n ) : (\n <span className=\"main\">{confirmationMain}</span>\n )}\n <span className=\"helper\">\n {data.attach_tickets\n ? 'Please bring them with you to the event'\n : confirmationHelper}\n </span>\n </>\n )}\n </>\n )}\n </div>\n </div>\n </div>\n {data.custom_confirmation_page_text &&\n !data.custom_confirmation_page_text_full_replacement ? (\n <div\n className=\"custom-confirmation-page-text\"\n dangerouslySetInnerHTML={createMarkup(data.custom_confirmation_page_text)}\n />\n ) : null}\n {showOrderDetailsBtn && (\n <div className=\"order-details-button-container\">\n <Button\n className=\"view-order-button\"\n variant=\"contained\"\n onClick={() => {\n onOrderDetailsClick(data)\n }}\n >\n View Order\n </Button>\n </div>\n )}\n {data.disable_referral === false && isReferralEnabled && (\n <>\n <div className=\"referral_text_image_section\">\n <div className=\"referral_text_section\">\n <div className=\"referral_title_text\">\n Your ticket can become\n <span className=\"strong-text\"> cheaper </span>\n or even\n <span className=\"strong-text\"> FREE!</span>\n </div>\n <div className=\"referral_text\">\n <span className=\"strong-text\"> Invite friends </span>\n and we'll refund up to\n <span className=\"strong-text\"> 100% </span>\n of your ticket money, if they buy tickets as well!\n </div>\n </div>\n <img\n className=\"body-product-image\"\n src={data.product_image}\n alt=\"No Data\"\n />\n </div>\n <div className=\"share_wrapper\">\n <div className=\"share_section\">\n <div className=\"invitation_section\">\n <div className=\"invitation_title\">\n How do you invite your friends?\n </div>\n <div className=\"share_buttons\">\n <div className=\"share-by-link\">\n <h5 className=\"share-by-link label\">Send them this link:</h5>\n <div className=\"share-btn-inner\">\n <input\n ref={inputRef}\n className=\"share-input\"\n value={data.personal_share_link}\n onChange={onChangeShareLink}\n />\n <div\n aria-hidden={true}\n className=\"share-by-link-copy-icon\"\n onClick={() => {\n navigator.clipboard.writeText(\n _get(inputRef, 'current.value') || ''\n )\n setShowCopyModal(true)\n onLinkCopied()\n }}\n >\n {hasCopyIcon ? (\n <img\n src=\"https://img.icons8.com/office/50/000000/copy.png\"\n alt=\"copy\"\n />\n ) : (\n <span className=\"copy-icon\">Copy</span>\n )}\n </div>\n </div>\n </div>\n {(showDefaultShareButtons || !!shareButtons.length) && (\n <SocialButtons\n showDefaultShareButtons={showDefaultShareButtons}\n name={data.product_name}\n appId={messengerAppId}\n shareLink={data.personal_share_link}\n shareButtons={shareButtons}\n clientLabel={clientLabel}\n showReferralsInfoText={showReferralsInfoText}\n />\n )}\n </div>\n </div>\n </div>\n <div className=\"pricing-section\">\n <div className=\"invitation_title\">How much cheaper?</div>\n {_map(data.personal_share_sales, (pricing, index) => (\n <div key={index} className=\"pricing-section_wrapper\">\n <div className=\"pricing-section_label\">\n {pricing.label}\n {pricing.subLabel && (\n <div className=\"pricing-section_sublabel\">\n {pricing.subLabel}\n </div>\n )}\n </div>\n <div className=\"pricing-section_price\"> {pricing.price}</div>\n </div>\n ))}\n {showPricingNoteSection && (\n <div className=\"note-pricing-section\">\n ^ This is based on the most expensive ticket in your order.\n </div>\n )}\n </div>\n </div>\n </>\n )}\n </>\n )}\n </div>\n )\n}\n","import _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport React, { FC, useEffect, useState } from 'react'\n\nimport { getCustomerExistsData } from '../../api/guestTicketDelegation'\nimport { Loader } from '../../components/common'\nimport { LoginForm } from '../../components/loginForm'\nimport { RegistrationForm } from '../../components/registerForm'\nimport { useCookieListener } from '../../hooks/useCookieListener'\nimport { getCookieByName, getQueryVariable } from '../../utils'\nimport IssueComponent from './IssueComponent'\n\ninterface IRegistrationProps {\n registerFormFields?: Array<IFormFieldsSection>;\n classNamePrefix?: string;\n logo?: string;\n onCustomerExistsError?: (error: any) => void;\n issuePageErrorText?: string;\n}\n\nconst X_TF_ECOMMERCE = 'X-TF-ECOMMERCE'\n\nexport const DelegationsContainer: FC<IRegistrationProps> = ({\n registerFormFields,\n classNamePrefix = 'guest-ticket-delegation',\n issuePageErrorText = 'You do not have access to manage these tickets.',\n onCustomerExistsError = _identity,\n logo,\n}) => {\n const [loading, setLoading] = useState(true)\n const [isLoggedIn, setIsLoggedIn] = useState(Boolean(getCookieByName(X_TF_ECOMMERCE)))\n const [isCustomerExsists, setIsCustomerExsists] = useState(false)\n const [issuePageError, setIssuePageError] = useState(false)\n const [customerEmail, setCustomerEmail] = useState('')\n const accessHash = getQueryVariable('hash') || ''\n\n useCookieListener(X_TF_ECOMMERCE, value => setIsLoggedIn(Boolean(value)))\n\n const onGetIssuePageDataError = () => {\n setIssuePageError(true)\n }\n\n useEffect(() => {\n const getCustomerData = async () => {\n try {\n const response = await getCustomerExistsData(accessHash)\n const isCustomerExsists = _get(response, 'data.attributes.customerExists', false)\n setIsCustomerExsists(isCustomerExsists)\n setCustomerEmail(_get(response, 'data.attributes.email', ''))\n setLoading(false)\n } catch (error) {\n onCustomerExistsError(error)\n }\n }\n\n getCustomerData()\n }, [])\n\n return (\n <div className={`${classNamePrefix}__container`}>\n {loading ? (\n <Loader />\n ) : issuePageError ? (\n <div className=\"issue_page_error\">{issuePageErrorText}</div>\n ) : isLoggedIn ? (\n <div>\n <IssueComponent\n classNamePrefix={classNamePrefix}\n onGetIssuePageDataError={onGetIssuePageDataError}\n />\n </div>\n ) : isCustomerExsists ? (\n <LoginForm logo={logo} />\n ) : (\n <RegistrationForm\n customerEmail={customerEmail}\n formFields={registerFormFields}\n registrationType=\"delegation\"\n />\n )}\n </div>\n )\n}\n","import Button from '@mui/material/Button'\nimport { AxiosError } from 'axios'\nimport _identity from 'lodash/identity'\nimport _isEmpty from 'lodash/isEmpty'\nimport React, { useEffect, useState } from 'react'\n\nimport {\n checkCustomerOrder,\n checkVerificationStatus,\n getNetverifyUrl,\n updateVerificationStatus,\n} from '../../api'\nimport {\n GetNetverifyUrlResponseData,\n VerificationStatusResponseData,\n} from '../../types/verification'\nimport { getQueryVariable, isBrowser, isJson } from '../../utils'\nimport Modal from '../common/ModalComponent'\nimport {\n VERIFICATION_MESSAGES,\n VERIFICATION_PROVIDERS,\n VERIFICATION_STATUSES,\n} from './constants'\n\ninterface IDVerificationProps {\n onGetVerifyUrlSuccess?: (response: GetNetverifyUrlResponseData) => void;\n onGetVerifyUrlError?: (error: AxiosError) => void;\n\n onGetVerificationStatusSuccess?: (response: {\n data: VerificationStatusResponseData;\n }) => void;\n onGetVerificationStatusError?: (error: AxiosError) => void;\n\n onVerificationMessageModalClose?: (status: string | null) => void;\n\n onPassVerificationStepsSuccess?: () => void;\n onPassVerificationStepsError?: (error: AxiosError | null) => void;\n}\n\nexport const IDVerification = (props: IDVerificationProps) => {\n const {\n onGetVerifyUrlSuccess = _identity,\n onGetVerifyUrlError = _identity,\n\n onGetVerificationStatusSuccess = _identity,\n onGetVerificationStatusError = _identity,\n\n onVerificationMessageModalClose = _identity,\n\n onPassVerificationStepsSuccess = _identity,\n onPassVerificationStepsError = _identity,\n } = props\n\n const [loadingStatus, setLoadingStatus] = useState(true)\n const [verificationStatus, setVerificationStatus] = useState<string | null>(null)\n const [showModal, setShowModal] = useState(false)\n const [netverifyUrl, setNetverifyUrl] = useState<string | null>(null)\n const [provider, setProvider] = useState<string | null>(null)\n const [hasError, setHasError] = useState<boolean>(false)\n const [lastError, setLastError] = useState(null)\n const [modalData, setModalData] = useState({\n message: '',\n hideCancelBtn: true,\n displaModal: false,\n })\n\n const isAccountVerifiedOrPending =\n (verificationStatus === VERIFICATION_STATUSES.APPROVED ||\n verificationStatus === VERIFICATION_STATUSES.PENDING) &&\n verificationStatus !== VERIFICATION_STATUSES.WRONG_CUSTOMER\n\n const handleClose = () => {\n setModalData({\n message: '',\n displaModal: false,\n hideCancelBtn: true,\n })\n\n onVerificationMessageModalClose(verificationStatus)\n }\n\n useEffect(() => {\n const callbackNetVerify = async (e: any) => {\n // Stripe Events\n if (e.data && e.origin === 'https://verify.stripe.com') {\n const { data } = e\n if (data.type === 'STRIPE_IDENTITY_CLOSE') {\n await getUrl()\n setShowModal(false)\n if (hasError) {\n setHasError(false)\n onPassVerificationStepsError(lastError)\n } else {\n setHasError(false)\n onPassVerificationStepsSuccess()\n }\n } else if (data.type === 'STRIPE_IDENTITY_ERROR') {\n setHasError(true)\n setLastError(data)\n }\n }\n\n if (e.data && isJson(e.data)) {\n try {\n const result = JSON.parse(e.data)\n if (\n result.payload &&\n (result.payload.value === 'success' ||\n result.payload.transactionStatus === 'SUCCESS')\n ) {\n await updateVerificationStatus()\n onPassVerificationStepsSuccess()\n } else if (\n result.payload &&\n (result.payload.value === 'error' ||\n result.payload.transactionStatus === 'ERROR')\n ) {\n setShowModal(false)\n onPassVerificationStepsError(result.payload)\n }\n } catch (e) {\n onPassVerificationStepsError(e)\n }\n }\n }\n\n window.addEventListener('message', callbackNetVerify)\n\n return () => {\n window.removeEventListener('message', callbackNetVerify)\n }\n }, [])\n\n const getUrl = async () => {\n try {\n const urlResponse = await getNetverifyUrl()\n setNetverifyUrl(urlResponse.netverifyUrl)\n setProvider(urlResponse.provider)\n onGetVerifyUrlSuccess(urlResponse)\n } catch (error) {\n onGetVerifyUrlError(error)\n }\n }\n\n useEffect(() => {\n let intervalId: any = null\n const orderHash = getQueryVariable('order_hash') || ''\n\n const getVerificationStatus = async () => {\n try {\n let verificationStatus = null\n // Gets te current status of the variable without modifying it\n setVerificationStatus(status => {\n verificationStatus = status\n return status\n })\n let provider = null\n // Gets te current status of the variable without modifying it\n setProvider(state => {\n provider = state\n return provider\n })\n let verifyUrl = null\n // Gets te current status of the variable without modifying it\n setNetverifyUrl(state => {\n verifyUrl = state\n return state\n })\n const statusResponse = await checkVerificationStatus()\n const { status } = statusResponse.data.attributes\n const isApproved = status === VERIFICATION_STATUSES.APPROVED\n\n if (verificationStatus !== status) {\n setVerificationStatus(status)\n setModalData({\n displaModal: isApproved || status === VERIFICATION_STATUSES.FAILED,\n hideCancelBtn: true,\n message: isApproved\n ? VERIFICATION_MESSAGES.APPROVED\n : status === VERIFICATION_STATUSES.FAILED\n ? VERIFICATION_MESSAGES.FAILED\n : status,\n })\n }\n if (\n provider === VERIFICATION_PROVIDERS.STRIPE &&\n verifyUrl === null &&\n !isApproved\n ) {\n getUrl()\n }\n onGetVerificationStatusSuccess(statusResponse)\n } catch (error) {\n onGetVerificationStatusError(error)\n } finally {\n setLoadingStatus(false)\n }\n }\n\n const getCustomerOrderStatus = async () => {\n const customerOrderResponse = await checkCustomerOrder(orderHash)\n return customerOrderResponse\n }\n\n const makeRequests = async () => {\n try {\n if (orderHash) {\n await getCustomerOrderStatus()\n }\n getUrl()\n getVerificationStatus()\n\n // Check the verification status every 30 seconds\n intervalId = setInterval(() => {\n getVerificationStatus()\n }, 10000)\n } catch (error) {\n if (error.response?.data?.message === VERIFICATION_MESSAGES.WRONG_CUSTOMER) {\n setVerificationStatus(VERIFICATION_STATUSES.WRONG_CUSTOMER)\n setModalData({\n displaModal: true,\n hideCancelBtn: true,\n message: VERIFICATION_MESSAGES.WRONG_CUSTOMER,\n })\n }\n }\n }\n\n makeRequests()\n\n // Clear the interval when the component unmounts\n return () => clearInterval(intervalId)\n }, [])\n\n const iframe = (netverifyUrl: string) => {\n // eslint-disable-next-line max-len\n const iframe = `<iframe allowFullScreen id=\"verificationIframe\" frameBorder=\"0\" width=\"100%\" height=\"570px\" allow=\"camera;fullscreen;accelerometer;gyroscope;magnetometer\" src=\"${netverifyUrl}\"></iframe>`\n return {\n __html: iframe,\n }\n }\n\n useEffect(() => {\n const orderHash = getQueryVariable('order_hash')\n\n if (isBrowser) {\n const checkoutData = JSON.parse(window.localStorage.getItem('checkoutData') || '{}')\n if (_isEmpty(checkoutData) && orderHash) {\n window.localStorage.setItem('checkoutData', JSON.stringify({ hash: orderHash }))\n }\n }\n }, [])\n\n return (\n <div>\n <h2 className=\"page-header\">Account Verification</h2>\n {loadingStatus ? null : (\n <>\n {!isAccountVerifiedOrPending && (\n <div className=\"verify-message\">\n To complete the purchase, please verify your identity.\n </div>\n )}\n {verificationStatus === VERIFICATION_STATUSES.APPROVED && (\n <div className=\"verify-message\">{VERIFICATION_MESSAGES.APPROVED}</div>\n )}\n {(verificationStatus === VERIFICATION_STATUSES.PENDING ||\n (provider === VERIFICATION_PROVIDERS.STRIPE &&\n netverifyUrl === null &&\n verificationStatus !== VERIFICATION_STATUSES.APPROVED)) && (\n <div className=\"verify-message\">{VERIFICATION_MESSAGES.PENDING}</div>\n )}\n {!isAccountVerifiedOrPending && netverifyUrl !== null && (\n <Button\n type=\"button\"\n variant=\"contained\"\n className=\"verify-button\"\n onClick={() => {\n setShowModal(true)\n }}\n >\n Verify\n </Button>\n )}\n </>\n )}\n\n {modalData.displaModal && (\n <Modal\n modalClassName=\"verification-message-modal\"\n actions={[\n {\n id: 'ok',\n label: 'Ok',\n variant: 'contained',\n onClick: handleClose,\n },\n ]}\n >\n <div className=\"verify-message\">{modalData.message}</div>\n </Modal>\n )}\n\n {showModal && (\n <Modal\n modalClassName=\"id-verification-modal\"\n actions={[\n {\n id: 'close',\n label: 'Close',\n variant: 'contained',\n onClick: () => {\n setShowModal(false)\n },\n },\n ]}\n >\n <div dangerouslySetInnerHTML={iframe(netverifyUrl || '')} />\n </Modal>\n )}\n </div>\n )\n}\n","import './style.css'\n\nimport Autocomplete from '@mui/material/Autocomplete'\nimport CircularProgress from '@mui/material/CircularProgress'\nimport Paper from '@mui/material/Paper'\nimport Table from '@mui/material/Table'\nimport TableBody from '@mui/material/TableBody'\nimport TableCell from '@mui/material/TableCell'\nimport TableContainer from '@mui/material/TableContainer'\nimport TableHead from '@mui/material/TableHead'\nimport TablePagination from '@mui/material/TablePagination'\nimport TableRow from '@mui/material/TableRow'\nimport TextField from '@mui/material/TextField'\nimport axios from 'axios'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport React, { useEffect, useState } from 'react'\n\nimport { getOrders } from '../../api'\nimport { getCookieByName } from '../../utils'\nimport { LoginModal } from '../loginModal'\nimport MyTicketsRow from './row'\nimport tableConfig from './tableConfig'\n\ninterface MyTicketsTypes {\n handleDetailsInfo: (id: string | number) => void;\n onGetOrdersSuccess: (res: any) => void;\n onGetOrdersError: (err: any) => void;\n logo?: string;\n theme?: 'light' | 'dark';\n selectEventsLabel?: string;\n openLoginModal?: () => void;\n hideDetailsButton?: boolean;\n customNoOrderContent?: React.ReactNode;\n columns?: IColumnData[];\n}\n\ninterface EventFilter {\n event_name: string;\n url_name: string;\n}\n\nexport const MyTicketsContainer = ({\n handleDetailsInfo = _identity,\n onGetOrdersSuccess = _identity,\n onGetOrdersError = _identity,\n theme = 'dark',\n selectEventsLabel = 'Events',\n logo,\n hideDetailsButton = false,\n columns = [],\n openLoginModal,\n customNoOrderContent = null,\n}: MyTicketsTypes) => {\n const [data, setData] = useState<any>(null)\n const [loading, setLoading] = useState(true)\n const [limit, setLimit] = useState(10)\n const [filter, setFilter] = useState('')\n\n const isWindowDefined = typeof window !== 'undefined'\n const [isLogged, setIsLogged] = useState(\n isWindowDefined ? !!getCookieByName('X-TF-ECOMMERCE') : false\n )\n const [showModalLogin, setShowModalLogin] = useState(false)\n const [userExpired, setUserExpired] = useState(false)\n\n //just once\n useEffect(() => {\n fetchData(1, limit, filter)\n }, [isLogged])\n\n const fetchData = async (page: number, limit: number, eventSlug: string) => {\n try {\n setLoading(true)\n const response = await getOrders(page, limit, eventSlug)\n onGetOrdersSuccess(response)\n\n const data = _get(response, 'data.attributes')\n data.page -= 1\n\n setData(data)\n } catch (error) {\n if (axios.isAxiosError(error)) {\n if (_get(error, 'response.data.error') === 'invalid_token') {\n if (isWindowDefined) {\n window.localStorage.removeItem('user_data')\n setUserExpired(true)\n setShowModalLogin(true)\n }\n }\n }\n onGetOrdersError(error)\n } finally {\n setLoading(false)\n }\n }\n\n const handleChangePage = (_event: any, newPage: number) => {\n fetchData(newPage + 1, limit, filter)\n }\n\n const handleChangeRowsPerPage = (event: React.ChangeEvent<HTMLInputElement>) => {\n fetchData(1, +event.target.value, filter)\n setLimit(+event.target.value)\n }\n\n const onChange = (\n _event: React.SyntheticEvent<Element, Event>,\n eventFilter: EventFilter | null\n ) => {\n fetchData(1, limit, eventFilter?.url_name || '')\n setFilter(eventFilter?.url_name || '')\n }\n\n const noOrderContent = customNoOrderContent || (<div className=\"no_orders_section\">\n <div className=\"nodata_title\">\n You have no current ticket orders on this account\n </div>\n <div className=\"nodata_subtitle\">\n Discover your next nite out <a href=\"/events\">here</a>.\n </div>\n </div>)\n\n return (\n <div className={`my-ticket ${theme}`}>\n <>\n {showModalLogin || !isLogged ? (\n openLoginModal ? (\n openLoginModal()\n ) : (\n <LoginModal\n onClose={() => {\n setShowModalLogin(false)\n }}\n onLogin={() => {\n setShowModalLogin(false)\n setUserExpired(false)\n setIsLogged(true)\n }}\n userExpired={userExpired}\n logo={logo}\n showForgotPasswordButton\n />\n )\n ) : null}\n </>\n {data?.orders?.length ? (\n <>\n <h2>My Ticket Orders</h2>\n <Autocomplete\n disablePortal\n id=\"combo-box-demo\"\n getOptionLabel={(option: EventFilter) => option.event_name}\n onChange={onChange}\n options={data.purchased_events}\n sx={{ width: 300 }}\n renderInput={params => <TextField {...params} label={selectEventsLabel} />}\n />\n {loading ? (\n <div className=\"loading\">\n <CircularProgress />\n </div>\n ) : (\n <>\n <TableContainer component={Paper} className=\"my-ticket-table\">\n <Table aria-label=\"collapsible table\">\n <TableHead>\n <TableRow>\n {tableConfig(columns).header.map(\n (column: string, index: number) => (\n <TableCell key={index}>{column}</TableCell>\n )\n )}\n {!hideDetailsButton && <TableCell />}\n </TableRow>\n </TableHead>\n <TableBody>\n {data.orders?.map((row: RowItems) => (\n <MyTicketsRow\n key={row.id}\n row={row}\n handleDetailsInfo={handleDetailsInfo}\n columns={columns}\n hideDetailsButton={hideDetailsButton}\n />\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n <TablePagination\n rowsPerPageOptions={[10, 25, 100]}\n component=\"div\"\n count={data.total_count}\n rowsPerPage={limit}\n page={data.page}\n onPageChange={handleChangePage}\n onRowsPerPageChange={handleChangeRowsPerPage}\n />\n </>\n )}\n </>\n ) : (\n !loading && (\n <>\n <h2>My Ticket Orders</h2>\n {noOrderContent}\n </>\n )\n )}\n <>\n {showModalLogin && (\n <LoginModal\n onClose={() => {\n setShowModalLogin(false)\n }}\n onLogin={() => {\n setShowModalLogin(false)\n setUserExpired(false)\n setIsLogged(true)\n }}\n userExpired={userExpired}\n showForgotPasswordButton\n />\n )}\n </>\n </div>\n )\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport './style.css'\n\nimport { Backdrop, CircularProgress, ThemeOptions } from '@mui/material'\nimport Paper from '@mui/material/Paper'\nimport { createTheme, ThemeProvider } from '@mui/material/styles'\nimport Table from '@mui/material/Table'\nimport TableBody from '@mui/material/TableBody'\nimport TableCell from '@mui/material/TableCell'\nimport TableContainer from '@mui/material/TableContainer'\nimport TableHead from '@mui/material/TableHead'\nimport TableRow from '@mui/material/TableRow'\nimport { CSSProperties } from '@mui/styles'\nimport _find from 'lodash/find'\nimport _get from 'lodash/get'\nimport _has from 'lodash/has'\nimport _identity from 'lodash/identity'\nimport _isEmpty from 'lodash/isEmpty'\nimport _map from 'lodash/map'\nimport moment from 'moment-timezone'\nimport React, { useEffect, useMemo, useState } from 'react'\nimport SVG from 'react-inlinesvg'\n\nimport {\n getOrderDetails,\n removeFromResale,\n resaleTicket,\n updateOrderCustomFields,\n updateTicketHoldersCustomFields,\n} from '../../api'\nimport EditSvg from '../../assets/images/edit.svg'\nimport { isBrowser } from '../../utils'\nimport ConfirmModal from '../confirmModal'\nimport { InitialValuesTypes, TicketResaleModal } from '../ticketResaleModal'\nimport { CustomFieldsForm } from './CustomFieldsForm'\nimport TicketsTable, { IActionColumns, ITicketTypes } from './ticketsTable'\nimport { isFieldUpdatable, renderCustomFieldValue } from './utils'\n\ninterface TicketTypes {\n currency: string;\n discount: string;\n name: string;\n price: string;\n quantity: string;\n total: string;\n groupName: string;\n guests_count: string;\n deposit_paid: string;\n remaining: string;\n}\n\ninterface OrderDetailsTypes {\n columns: Array<{ label: string }>;\n onGetOrdersSuccess: (res: any) => void;\n onGetOrdersError: (err: any) => void;\n onReturnButtonClick: (data: any) => void;\n onRemoveFromResaleSuccess: () => void;\n onRemoveFromResaleError: (err: any) => void;\n onResaleTicketSuccess: () => void;\n onResaleTicketError: (err: any) => void;\n onUpdateOrderCustomFieldsSuccess: (val: any) => void;\n onUpdateOrderCustomFieldsError: (err: any) => void;\n onUpdateTicketHolderCustomFieldsSuccess: (val: any) => void;\n onUpdateTicketHolderCustomFieldsError: (err: any) => void;\n personalLinkIcon?: string;\n displayColumnNameInRow?: boolean;\n canSellTicket?: boolean;\n themeOptions?: ThemeOptions & {\n input?: CSSProperties;\n checkbox?: CSSProperties;\n };\n ticketsTableColumns?: Array<{\n id?: string | number;\n key: keyof ITicketTypes & keyof IActionColumns;\n label: string | number | null | undefined;\n }>;\n ordersPath?: string;\n orderId?: string | number;\n referralTitle?: string;\n itemsTitle?: string;\n ticketsTitle?: string;\n displayLoading?: boolean;\n onDataLoaded?: (data: any) => void;\n}\n\nexport interface CustomFieldOption {\n id: string;\n name: string;\n value: string;\n order: string;\n}\n\nexport interface CustomFieldTypes {\n description: string;\n enabled: string;\n id: string;\n label: string;\n name: string;\n orderId: string;\n required: boolean;\n settings: {\n showOnMyTickets: boolean;\n allowUpdate: boolean;\n className: string;\n };\n type: string;\n value: string | Array<string>;\n\n ticketHash?: string;\n options?: CustomFieldOption[];\n}\n\nconst getTotal = (data: any) => {\n if (data?.total && data?.tickets && data.tickets[0]?.currency)\n return data.tickets[0].currency + data.total\n if (!data?.total || !_has(data, 'items.ticket_types.length')) return ''\n\n return data.items.ticket_types[0].currency + data.total\n}\n\nexport const OrderDetailsContainer = ({\n columns = [],\n onGetOrdersSuccess = _identity,\n onGetOrdersError = _identity,\n onRemoveFromResaleSuccess = _identity,\n onRemoveFromResaleError = _identity,\n onResaleTicketSuccess = _identity,\n onResaleTicketError = _identity,\n onUpdateOrderCustomFieldsSuccess = _identity,\n onUpdateOrderCustomFieldsError = _identity,\n onUpdateTicketHolderCustomFieldsSuccess = _identity,\n onUpdateTicketHolderCustomFieldsError = _identity,\n onReturnButtonClick,\n personalLinkIcon = '',\n displayColumnNameInRow = false,\n canSellTicket = true,\n ticketsTableColumns,\n ordersPath,\n orderId: pOrderId,\n referralTitle = '',\n itemsTitle = '',\n ticketsTitle = 'Your Tickets',\n themeOptions,\n displayLoading = true,\n onDataLoaded = _identity,\n}: OrderDetailsTypes) => {\n const [data, setData] = useState<any>({})\n const [removeFromResaleLoading, setRemoveFromResaleLoading] = useState(false)\n const [resaleTicketLoading, setResaleTicketLoading] = useState(false)\n const [showResaleModal, setShowResaleModal] = useState(false)\n const [showRemoveResaleModal, setShowRemoveResaleModal] = useState(false)\n const [activeTicket, setActiveTicket] = useState<any>(null)\n const [showOrderCustomFieldsSection, setShowOrderCustomFieldsSection] = useState(false)\n const [isLoading, setIsLoading] = useState(false)\n\n const isTable = _get(data, 'tickets[0].is_table', false)\n const columnsProps = isTable\n ? [\n { label: 'Items' },\n { label: 'Price' },\n { label: 'Guests count' },\n { label: 'Deposit paid' },\n { label: 'Remaining' },\n ]\n : columns\n const ticketHoldersCustomFields = _get(data, 'ticket_data_capture', [])\n\n const orderCustomFields = _get(data, 'data_capture', [])\n const [orderUpdatableCustomFields, orderNotUpdatableCustomFields] = useMemo(() => {\n const allowedFields: CustomFieldTypes[] = []\n const notAllowedFields: CustomFieldTypes[] = []\n\n orderCustomFields.forEach((field: CustomFieldTypes) => {\n if (isFieldUpdatable(field)) {\n allowedFields.push(field)\n } else {\n notAllowedFields.push(field)\n }\n })\n return [allowedFields, notAllowedFields]\n }, [orderCustomFields])\n const orderEditableFieldsFormInitialValues = useMemo(() => {\n const initialValues = orderUpdatableCustomFields.map((field: CustomFieldTypes) => [\n field.name,\n field.type === 'checkbox' ? Boolean(field.value) : field.value || '',\n ])\n return Object.fromEntries(initialValues)\n }, [orderUpdatableCustomFields])\n\n let orderId = String(pOrderId) || ''\n if (isBrowser && !pOrderId) {\n const params: URLSearchParams = new URL(`${window.location}`).searchParams\n orderId = params.get('o') || ''\n }\n\n let orderSummery = `ID ${data.id}, placed`\n if (data.date && data.timezone) {\n const date = moment.tz(data.date, data.timezone).format('dddd, DD MMMM YYYY')\n orderSummery += ` ${date}`\n }\n\n useEffect(() => {\n (async () => {\n try {\n let orderId = pOrderId || ''\n if (isBrowser && !pOrderId) {\n const params: URLSearchParams = new URL(`${window.location}`).searchParams\n orderId = params.get('o') || ''\n }\n setIsLoading(true)\n const response = await getOrderDetails(String(orderId))\n onGetOrdersSuccess(response)\n\n const data = _get(response, 'data.attributes')\n setData(data)\n setIsLoading(false)\n onDataLoaded(data)\n } catch (error) {\n onGetOrdersError(error)\n setIsLoading(false)\n }\n })()\n }, [onGetOrdersError, onGetOrdersSuccess, onDataLoaded, pOrderId])\n\n const handleSellTicket = (ticket: ITicketTypes) => {\n const ticketTypesArr = data.items.ticket_types\n const sellTicketType = _find(\n ticketTypesArr,\n ticketType => ticketType.hash === ticket.ticket_type_hash\n )\n setActiveTicket({\n ...ticket,\n ticket_type_is_active: sellTicketType?.active,\n })\n setShowResaleModal(true)\n }\n\n const handleOnClose = () => {\n setShowResaleModal(false)\n setActiveTicket(null)\n }\n\n const handleOnSubmit = async (values: InitialValuesTypes) => {\n if (resaleTicketLoading) {\n return\n }\n\n try {\n setResaleTicketLoading(true)\n const { to, first_name, last_name, email, confirm_email, confirm } = values\n const formData = new FormData()\n formData.append('to', to)\n formData.append('first_name', first_name)\n formData.append('last_name', last_name)\n formData.append('email', email)\n formData.append('confirm_email', confirm_email)\n formData.append('confirm', String(confirm))\n\n await resaleTicket(formData, activeTicket.hash)\n const response = await getOrderDetails(orderId)\n onGetOrdersSuccess(response)\n\n const data = _get(response, 'data.attributes')\n const updatedData = { ...data }\n updatedData?.tickets?.forEach((ticket: ITicketTypes) => {\n if (ticket.hash === activeTicket.hash) {\n ticket.is_sellable = false\n ticket.is_on_sale = true\n }\n })\n\n setData(updatedData)\n onResaleTicketSuccess()\n } catch (error) {\n onResaleTicketError(error)\n } finally {\n setShowResaleModal(false)\n setResaleTicketLoading(false)\n }\n }\n\n const handleRemoveFromResale = (ticket: ITicketTypes) => {\n setShowRemoveResaleModal(true)\n setActiveTicket(ticket)\n }\n\n const onCloseRemoveResale = () => {\n setShowRemoveResaleModal(false)\n setActiveTicket(null)\n }\n\n const onConfirmRemoveResale = async () => {\n if (removeFromResaleLoading) {\n return\n }\n\n try {\n setRemoveFromResaleLoading(true)\n await removeFromResale(activeTicket.hash)\n const response = await getOrderDetails(orderId)\n onGetOrdersSuccess(response)\n\n const data = _get(response, 'data.attributes')\n const updatedData = { ...data }\n updatedData?.tickets?.forEach((ticket: ITicketTypes) => {\n if (ticket.hash === activeTicket.hash) {\n ticket.is_sellable = true\n ticket.is_on_sale = false\n }\n })\n\n setData(updatedData)\n onRemoveFromResaleSuccess()\n } catch (error) {\n onRemoveFromResaleError(error)\n } finally {\n setShowRemoveResaleModal(false)\n setRemoveFromResaleLoading(false)\n }\n }\n\n const handleOrderCustomFieldsUpdate = async (values: Record<string, any>) => {\n setShowOrderCustomFieldsSection(false)\n try {\n // Collect all updatable and non updatable values for bulk update\n const fullUpdatableValues = orderNotUpdatableCustomFields.reduce(\n (acc, customField) => {\n acc[customField.name] = customField.value\n return acc\n },\n { ...values }\n )\n const eventId = _get(data, 'event_id')\n const response = await updateOrderCustomFields(\n eventId,\n orderId,\n fullUpdatableValues\n )\n const updatedCustomFields = _get(response, 'data.data.attributes', [])\n\n setData((prevState: Record<string, any>) => ({\n ...prevState,\n data_capture: updatedCustomFields,\n }))\n onUpdateOrderCustomFieldsSuccess(response)\n } catch (error) {\n onUpdateOrderCustomFieldsError(error)\n }\n }\n\n const handleTicketHoldersUpdate = async (\n values: Record<string, any>,\n ticketHash: string\n ) => {\n try {\n const eventId = _get(data, 'event_id')\n const response = await updateTicketHoldersCustomFields(eventId, values, ticketHash)\n const updatedFields = _get(response, 'data.data.attributes', [])\n const notUpdatedFields = ticketHoldersCustomFields.filter(\n (field: CustomFieldTypes) => field.ticketHash !== ticketHash\n )\n\n setData((prevState: Record<string, any>) => ({\n ...prevState,\n ticket_data_capture: [...updatedFields, ...notUpdatedFields],\n }))\n onUpdateTicketHolderCustomFieldsSuccess(response)\n } catch (error) {\n onUpdateTicketHolderCustomFieldsError(error)\n }\n }\n\n const theme = createTheme(themeOptions ?? {})\n\n if (isLoading || _isEmpty(data)) {\n if (displayLoading) {\n return (\n <ThemeProvider theme={theme}>\n <Backdrop\n sx={{ color: '#fff', backgroundColor: '#000000bd', zIndex: 1205 }}\n open={true}\n >\n <CircularProgress color=\"inherit\" />\n </Backdrop>\n </ThemeProvider>\n )\n }\n\n return null\n }\n\n return (\n <ThemeProvider theme={theme}>\n <div className=\"order-details\">\n <div className=\"layout-block\">\n <h1 className=\"layout-title\">Order Details</h1>\n {!_isEmpty(orderUpdatableCustomFields) && (\n <SVG src={EditSvg} onClick={() => setShowOrderCustomFieldsSection(true)} />\n )}\n </div>\n <div className=\"order-summary-box\">\n <div className=\"summary-block\">\n <div className=\"summary-item\">\n <h6 className=\"sub-title\">Order Summary</h6>\n <p className=\"order-summary-date\">{orderSummery}</p>\n </div>\n <div className=\"summary-item\">\n <div className=\"return-button-container\">\n <button\n type=\"button\"\n className=\"return-button\"\n onClick={() => {\n if (isBrowser) {\n window.location.assign(ordersPath ?? '/orders')\n }\n }}\n >\n Back to Orders\n </button>\n </div>\n </div>\n </div>\n {!_isEmpty(orderCustomFields) && (\n <>\n <div className=\"custom-field-value-container\">\n {orderCustomFields.map((customField: CustomFieldTypes) => (\n <div className=\"info-item\" key={customField.id}>\n <b>{customField.label} :</b> {renderCustomFieldValue(customField)}\n </div>\n ))}\n </div>\n {!_isEmpty(orderUpdatableCustomFields) && (\n <div\n className={`custom-fields-block ${\n showOrderCustomFieldsSection ? 'show' : ''\n }`}\n >\n <p className=\"title\">Aditional Information Request</p>\n <CustomFieldsForm\n initialValues={orderEditableFieldsFormInitialValues}\n fields={orderUpdatableCustomFields}\n handleFormSubmit={handleOrderCustomFieldsUpdate}\n handleFormClose={() => setShowOrderCustomFieldsSection(false)}\n />\n </div>\n )}\n </>\n )}\n {!data?.disable_referral && (\n <>\n {referralTitle && (\n <h4 className=\"referral-title sub-title\">{referralTitle}</h4>\n )}\n <div className=\"personal-link\">\n <div className=\"link-item\">\n <span>Personal Share Link: </span>\n <a href={data?.personal_share_link} target=\"_blank\" rel=\"noreferrer\">\n {Boolean(personalLinkIcon) && (\n <img src={personalLinkIcon} alt=\"Icon\" />\n )}\n {data?.personal_share_link}\n </a>\n </div>\n {data?.sales_referred ? (\n <div className=\"link-item\">\n <p className=\"total-referrer\">{`So far, you’ve referred ${data.sales_referred} tickets`}</p>\n </div>\n ) : null}\n </div>\n </>\n )}\n {itemsTitle && <h4 className=\"items-title sub-title\">{itemsTitle}</h4>}\n <TableContainer component={Paper}>\n <Table className=\"tt-type\" aria-label=\"collapsible table\">\n <TableHead>\n <TableRow>\n {_map(columnsProps, item => (\n <TableCell>{item.label || ''}</TableCell>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {data?.items?.ticket_types?.map((ticket: TicketTypes, index: number) =>\n data?.tickets && !data?.tickets[0].is_table ? (\n <TableRow key={index}>\n <TableCell>\n <b>Ticket Type:</b> {ticket.name}\n </TableCell>\n <TableCell>{ticket.currency + ticket.price}</TableCell>\n <TableCell>{ticket.quantity}</TableCell>\n <TableCell>{ticket.currency + ticket.total}</TableCell>\n </TableRow>\n ) : (\n <TableRow key={index}>\n <TableCell>\n <b>Ticket Type:</b> {ticket.name}\n </TableCell>\n <TableCell>{ticket.currency + ticket.price}</TableCell>\n <TableCell>{ticket.guests_count}</TableCell>\n <TableCell>{ticket.deposit_paid}</TableCell>\n <TableCell>{ticket.remaining}</TableCell>\n </TableRow>\n )\n )}\n {data?.items?.add_ons?.map((ticket: TicketTypes, index: number) => (\n <TableRow key={index}>\n <TableCell>\n <div>\n <b>Add-On</b>\n <div>\n {ticket.groupName && `${ticket.groupName}: `} {ticket.name}\n </div>\n </div>\n </TableCell>\n <TableCell>{ticket.currency + ticket.price}</TableCell>\n <TableCell>{ticket.quantity}</TableCell>\n <TableCell>{ticket.currency + ticket.total}</TableCell>\n </TableRow>\n ))}\n <TableRow className=\"total-row\">\n <TableCell />\n <TableCell />\n <TableCell>Total</TableCell>\n <TableCell>{getTotal(data)}</TableCell>\n </TableRow>\n </TableBody>\n </Table>\n </TableContainer>\n </div>\n <TicketsTable\n ticketsTitle={ticketsTitle}\n tickets={data.tickets}\n columns={\n ticketsTableColumns?.length\n ? ticketsTableColumns\n : [\n { key: 'hash' as never, label: 'Ticket ID' },\n { key: 'ticket_type' as never, label: 'Ticket Type' },\n { key: 'holder_name' as never, label: 'Ticket Holder' },\n { key: 'status' as never, label: 'Status' },\n { key: 'download' as never, label: '' },\n { key: 'sell_ticket' as never, label: '' },\n ]\n }\n handleSellTicket={handleSellTicket}\n handleRemoveFromResale={handleRemoveFromResale}\n displayColumnNameInRow={displayColumnNameInRow}\n canSellTicket={canSellTicket}\n ticketHoldersCustomFields={ticketHoldersCustomFields}\n handleTicketHoldersUpdate={handleTicketHoldersUpdate}\n />\n <div className=\"return-button-container\">\n <button\n type=\"button\"\n className=\"return-button\"\n onClick={() => {\n if (onReturnButtonClick) {\n onReturnButtonClick(data)\n } else if (isBrowser) {\n window.location.assign(ordersPath ?? '/orders')\n }\n }}\n >\n Return to Order History\n </button>\n </div>\n {showResaleModal && (\n <TicketResaleModal\n ticket={activeTicket}\n onClose={handleOnClose}\n onSubmit={handleOnSubmit}\n loading={resaleTicketLoading}\n />\n )}\n {showRemoveResaleModal && (\n <ConfirmModal\n message=\"Are you sure you want to withdraw your ticket from resale?\"\n onClose={onCloseRemoveResale}\n onConfirm={onConfirmRemoveResale}\n loading={removeFromResaleLoading}\n />\n )}\n </div>\n </ThemeProvider>\n )\n}\n","import { createTheme, ThemeProvider } from '@mui/material/styles'\nimport _identity from 'lodash/identity'\nimport _slice from 'lodash/slice'\nimport React, { useEffect, useState } from 'react'\n\nimport { getPreRegistrationInfluencers } from '../../api/preRegistrationComplete'\nimport { Influancers } from './Influancers'\nimport { Prewards } from './Prewards'\n\nexport const PreRegistrationInformations = (props: IPreRegistrationInformationProps) => {\n const {\n classNamePrefix,\n eventId,\n onGetPreregistrationDataSuccess = _identity,\n onGetPreregistrationDataError = _identity,\n influancersHeaderNode,\n prewardsHeaderNode,\n themeOptions,\n } = props\n\n const themeMui = createTheme(themeOptions)\n\n const [prizes, setPrizes] = useState([] as Array<IPrizeData>)\n const [influencers, setInfluencers] = useState([] as Array<IInfluencerData>)\n const topInfluancers = _slice(influencers, 0, 10)\n useEffect(() => {\n const fetchPreregistrationData = async () => {\n try {\n const preregistrationData = await getPreRegistrationInfluencers({\n eventId,\n })\n setPrizes(preregistrationData.data.attributes.prizes)\n setInfluencers(preregistrationData.data.attributes.influencers)\n onGetPreregistrationDataSuccess()\n } catch (error) {\n if (error) {\n onGetPreregistrationDataError()\n }\n }\n }\n fetchPreregistrationData()\n }, [eventId, onGetPreregistrationDataError, onGetPreregistrationDataSuccess])\n\n return (\n <ThemeProvider theme={themeMui}>\n <div className={`${classNamePrefix}_pre_registration_info_container`}>\n <Prewards\n headerNode={prewardsHeaderNode}\n data={prizes}\n classNamePrefix={classNamePrefix}\n />\n <Influancers\n headerNode={influancersHeaderNode}\n data={topInfluancers}\n classNamePrefix={classNamePrefix}\n />\n </div>\n </ThemeProvider>\n )\n}\n","import { Alert } from '@mui/material'\nimport axios from 'axios'\nimport _find from 'lodash/find'\nimport _forEach from 'lodash/forEach'\nimport _get from 'lodash/get'\nimport _identity from 'lodash/identity'\nimport _isEmpty from 'lodash/isEmpty'\nimport _isEqual from 'lodash/isEqual'\nimport _keys from 'lodash/keys'\nimport _map from 'lodash/map'\nimport _values from 'lodash/values'\nimport moment from 'moment'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\nimport Countdown, { CountdownRenderProps } from 'react-countdown'\n\nimport {\n getSeatMapData,\n getSeatMapStatuses,\n removeSeatReserve,\n reserveSeat,\n} from '../../api'\nimport { useOnline } from '../../hooks/useOnline'\nimport { showZero } from '../../utils/showZero'\nimport { ReferralLogic } from '../ticketsContainer/ReferralLogic'\nimport { addToCartFunc } from './addToCart'\nimport { SeatMapComponent } from './SeatMapComponent'\nimport { TicketsSection } from './TicketsSection'\nimport {\n getAddToCartRequestData,\n getOwnReservationsBasedOnStatuses,\n getTicketDropdownData,\n getTierIdBasedOnSeatId,\n} from './utils'\n\nconst OFFLINE_MESSAGE = 'Offline.'\n\ninterface IGuestCounts {\n [key: string]: number;\n}\n\nexport const SeatMapContainer = (props: IMapContainerProps) => {\n const {\n event: {\n id: eventId,\n currency: { symbol },\n tableMapEnabled,\n country,\n },\n mapContainerId,\n timerMessage = '',\n onAddToCartSuccess = _identity,\n onCountdownFinish = _identity,\n ticketDeleteButtonContent,\n ticketInfoContent,\n } = props\n\n const [seatMapData, setSeatMapData] = useState({\n seatMap: '',\n } as {\n seatMap: string;\n seatReservationTime: number;\n seatMapType: string | null;\n tierPrices: any;\n predefinedSeats: any;\n })\n const eventSeatsRef = useRef([] as EventSeat[])\n const ticketTypeTierRelationsRef = useRef({} as TicketTypeTierRelations)\n const [selectedTickets, setSelectedTickets] = useState<{\n [seatId: string]: string;\n }>({})\n const [seatMapStatuses, setSeatMapStatuses] = useState('')\n const [reservedSeats, setReservedSeats] = useState<Array<SeatReservationData>>([])\n const [isLoadingSeatMapData, setIsLoadingSeatMapData] = useState(true)\n const [isLoadingStatuses, setIsLoadingStatuses] = useState(false)\n const [isReserving, setIsReserving] = useState(false)\n const [isAddingToCart, setIsAddingToCart] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [showTimer, setShowTimer] = useState(\n Date.now() <= Number(localStorage.getItem(`reservationStart-${eventId}`))\n )\n const [guestCounts, setGuestCounts] = useState<IGuestCounts>({} as IGuestCounts)\n const [isOnline, setIsOnline] = useState(true)\n const isGuestCountsSet = useRef(false)\n\n useOnline(setIsOnline)\n\n const updateGuestCounts = (data: any) => {\n _forEach(data, (item: any) => {\n const tierTickets = ticketTypeTierRelationsRef.current[item.tierId]\n const seatTicketsArray = _values(tierTickets)\n\n setGuestCounts((prevState: any) => ({\n [item.seatId]: Number(seatTicketsArray[0].ticket_type_min_number_of_guests),\n ...prevState,\n }))\n })\n }\n\n const fetchSeatMapData = useCallback(async () => {\n try {\n const seatMapDataResponse = await getSeatMapData(eventId)\n const {\n data: {\n attributes: {\n seatData,\n ticketTypeTierRelations,\n eventSeats,\n seatReservationTime,\n seatMapType,\n tierPrices,\n predefinedSeats,\n },\n },\n } = seatMapDataResponse\n eventSeatsRef.current = eventSeats\n ticketTypeTierRelationsRef.current = ticketTypeTierRelations\n setSeatMapData({\n seatMap: JSON.parse(seatData),\n seatReservationTime,\n seatMapType,\n tierPrices,\n predefinedSeats,\n })\n } catch (error) {\n setError('Something went wrong')\n } finally {\n setIsLoadingSeatMapData(false)\n }\n }, [eventId])\n\n const fetchSeatMapReservations = useCallback(async () => {\n if (isOnline) {\n try {\n const statusesResponse = await getSeatMapStatuses(eventId)\n const statuses = _get(statusesResponse, 'data.attributes') || {}\n const reservationData: Array<SeatReservationData> = []\n const ownReservations: string[] = getOwnReservationsBasedOnStatuses(statuses)\n\n _forEach(ownReservations, reservation => {\n const tierIdOfReservation = getTierIdBasedOnSeatId(\n reservation,\n eventSeatsRef.current\n ) as string\n reservationData.push({\n seatId: reservation,\n tierId: tierIdOfReservation,\n type: 'reserve',\n })\n })\n\n localStorage.setItem('reservationData', JSON.stringify(reservationData))\n\n if (!_isEqual(seatMapStatuses, statusesResponse.data.attributes)) {\n setSeatMapStatuses(statusesResponse.data.attributes)\n }\n if (!_isEqual(reservationData, reservedSeats)) {\n setReservedSeats(reservationData)\n }\n\n // automatically set ticket/table type if it's the only one\n if (\n ticketTypeTierRelationsRef.current &&\n !_isEqual(reservationData, reservedSeats)\n ) {\n if (!isGuestCountsSet.current) {\n updateGuestCounts(reservationData)\n isGuestCountsSet.current = true\n }\n _forEach(reservationData, (item: any) => {\n const tierTickets = ticketTypeTierRelationsRef.current[item.tierId]\n const seatTicketsArray = _values(tierTickets)\n\n setSelectedTickets((prevState: any) => ({\n ...prevState,\n [item.seatId]:\n seatTicketsArray.length === 1 ? seatTicketsArray[0].ticket_type_id : '',\n }))\n })\n\n if (_isEmpty(reservationData)) {\n setGuestCounts({})\n setSelectedTickets({})\n }\n }\n } catch (error) {\n setError('Something went wrong')\n }\n }\n }, [eventId, seatMapStatuses, reservedSeats, isOnline])\n\n const startTimer = useCallback(\n (duration: number) => {\n setShowTimer(true)\n\n if (!localStorage.getItem(`reservationStart-${eventId}`)) {\n localStorage.setItem(`reservationStart-${eventId}`, String(Date.now() + duration))\n }\n },\n [eventId]\n )\n\n const endTimer = useCallback(() => {\n localStorage.removeItem(`reservationStart-${eventId}`)\n setShowTimer(false)\n }, [eventId])\n\n const handleSeatReservation = async (\n eventId: string,\n tierId: string,\n seatId: string\n ) => {\n setIsReserving(true)\n try {\n await reserveSeat(eventId, tierId, seatId)\n await fetchSeatMapReservations()\n\n startTimer(seatMapData.seatReservationTime * 60000)\n const reservationData = JSON.parse(localStorage.getItem('reservationData') || '')\n setReservedSeats(reservationData)\n updateGuestCounts(reservationData)\n\n // automatically set ticket/table type if it's the only one\n const relations = _keys(ticketTypeTierRelationsRef.current[tierId])\n const [firstItem] = _keys(ticketTypeTierRelationsRef.current[tierId])\n handleTicketSelect(relations.length === 1 ? firstItem : '', seatId)\n } catch (error) {\n setError(\n error?.response?.data?.message === 'Selected seat is not available'\n ? // eslint-disable-next-line max-len\n 'No more of this ticket type are available right now - they’re either sold out or in people’s shopping carts. Try refreshing the page!'\n : 'Something went wrong'\n )\n } finally {\n setIsReserving(false)\n }\n }\n\n const handleCancelSeatReservtion = async (\n eventId: string,\n tierId: string,\n seatId: string\n ) => {\n setIsReserving(true)\n try {\n await removeSeatReserve(eventId, tierId, [seatId])\n await fetchSeatMapReservations()\n if (_isEmpty(JSON.parse(localStorage.getItem('reservationData') as string))) {\n endTimer()\n }\n const reservationData = JSON.parse(localStorage.getItem('reservationData') || '')\n const currentSelectedTickets = { ...selectedTickets }\n delete currentSelectedTickets[seatId]\n setReservedSeats(reservationData)\n setSelectedTickets(currentSelectedTickets)\n } catch (error) {\n setError('Something went wrong')\n } finally {\n setIsReserving(false)\n }\n }\n\n const onSeatClick = async (seatInfo: {\n seat: {\n tierId: string;\n seatId: string;\n status: string;\n };\n }) => {\n const {\n seat: { tierId, seatId, status },\n } = seatInfo\n\n const reservationData = JSON.parse(localStorage.getItem('reservationData') || '[]')\n if (status === 'B' || status === 'R' || status === 'BLOCKED' || status === 'RE')\n return\n if (_find(reservationData, data => data.seatId === seatId)) {\n handleCancelSeatReservtion(eventId, tierId, seatId)\n } else if (reservationData.length >= 10) {\n setError('Limit exceeded')\n } else {\n handleSeatReservation(eventId, tierId, seatId)\n }\n }\n\n const handleTicketSelect = (ticketId: string, seatId: string) => {\n const currentSelectedTickets = { ...selectedTickets }\n currentSelectedTickets[seatId] = ticketId\n setSelectedTickets(currentSelectedTickets)\n }\n\n const handleGetTicketBtnClick = async () => {\n setIsAddingToCart(true)\n const ticketsDropdownsData = getTicketDropdownData(\n reservedSeats,\n ticketTypeTierRelationsRef.current\n )\n let selectedSeats = {}\n _forEach(ticketsDropdownsData, ticketData => {\n selectedSeats = {\n ...selectedSeats,\n [ticketData.seatId]: ticketData.ticketsData,\n }\n })\n const addToCartData = getAddToCartRequestData({\n eventId,\n reservations: _map(reservedSeats, seat => seat.seatId),\n selectedSeats,\n selectedTickets,\n guestCounts,\n })\n try {\n const response = await addToCartFunc({\n eventId,\n data: addToCartData,\n ticketQuantity: addToCartData?.attributes?.product_cart_quantity,\n })\n localStorage.removeItem('reservationData')\n onAddToCartSuccess(response)\n } catch (error) {\n if (axios.isAxiosError(error)) {\n const message = _get(error, 'response.data.message', '')\n setError(message)\n }\n } finally {\n setIsAddingToCart(false)\n }\n }\n\n useEffect(() => {\n if (Date.now() > Number(localStorage.getItem(`reservationStart-${eventId}`))) {\n setSelectedTickets({})\n setReservedSeats([])\n }\n\n const makeRequests = async () => {\n try {\n setIsLoadingStatuses(true)\n await fetchSeatMapData()\n await fetchSeatMapReservations()\n } catch (error) {\n setError('Something went wrong')\n } finally {\n setIsLoadingStatuses(false)\n }\n }\n\n makeRequests()\n\n if (country) {\n localStorage.setItem('eventCountry', country)\n }\n }, [country, eventId, fetchSeatMapData])\n\n useEffect(() => {\n const intervalId = setInterval(() => {\n fetchSeatMapReservations()\n }, 3000)\n\n return () => {\n clearInterval(intervalId)\n }\n }, [fetchSeatMapReservations])\n\n useEffect(() => {\n if (!isOnline) {\n setError(OFFLINE_MESSAGE)\n } else if (isOnline && error === OFFLINE_MESSAGE) {\n setError(null)\n }\n }, [error, isOnline])\n\n return (\n <>\n {error && (\n <Alert\n severity=\"error\"\n onClose={() => {\n setError(null)\n }}\n variant=\"filled\"\n style={{ width: '350px' }}\n >\n {error}\n </Alert>\n )}\n {showTimer && (\n <Countdown\n date={moment(\n Number(localStorage.getItem(`reservationStart-${eventId}`))\n ).valueOf()}\n renderer={(props: CountdownRenderProps) => (\n <div className=\"reservation-countdown\">\n <span className=\"reservation-message\">{timerMessage}</span>\n <span className=\"reservation-timer\">\n {showZero(props.minutes)}:{showZero(props.seconds)}\n </span>\n </div>\n )}\n onComplete={() => {\n endTimer()\n setSelectedTickets({})\n setReservedSeats([])\n if (onCountdownFinish) {\n onCountdownFinish()\n }\n }}\n />\n )}\n {!isLoadingSeatMapData && !isLoadingStatuses && <ReferralLogic eventId={eventId} />}\n <TicketsSection\n selectedTickets={selectedTickets}\n handleTicketSelect={handleTicketSelect}\n handleCancelReservation={(seatId: string, tireId: string) =>\n handleCancelSeatReservtion(eventId, tireId, seatId)\n }\n handleGetTicketClick={handleGetTicketBtnClick}\n isAddingToCart={isAddingToCart}\n reservedSeats={reservedSeats}\n ticketDeleteButtonContent={ticketDeleteButtonContent}\n ticketInfoContent={ticketInfoContent}\n ticketTypeTierRelations={ticketTypeTierRelationsRef.current}\n currencySymbol={symbol}\n tableMapEnabled={Boolean(tableMapEnabled)}\n guestCounts={guestCounts}\n setGuestCounts={setGuestCounts}\n />\n <SeatMapComponent\n seatMapProps={{\n seatData: seatMapData.seatMap,\n statuses: seatMapStatuses,\n tierPrices: seatMapData.tierPrices,\n seatMapType: seatMapData.seatMapType,\n ticketTypeTierRelations: ticketTypeTierRelationsRef.current,\n seatMapEvents: { onSeatClick },\n isReserving,\n predefinedSeats: seatMapData.predefinedSeats,\n isLoadingSeatMapData,\n }}\n mapContainerId={mapContainerId}\n />\n </>\n )\n}\n","import { useEffect } from 'react'\n\nexport const useOnline = (handler: (value: boolean) => void) => {\n useEffect(() => {\n const handleOffline = () => {\n handler(false)\n }\n const handleOnline = () => {\n handler(true)\n }\n\n window.addEventListener('offline', handleOffline)\n window.addEventListener('online', handleOnline)\n\n return () => {\n window.removeEventListener('offline', handleOffline)\n window.removeEventListener('online', handleOnline)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n}\n","import { AxiosError } from 'axios'\nimport _get from 'lodash/get'\nimport React, { useEffect, useState } from 'react'\n\nimport { declineInvitation, processTicket } from '../../api'\n\nexport interface ITicketResaleContainer {\n onProcessTicketSuccess: (res: any) => void;\n onProcessTicketError: (e: AxiosError) => void;\n onDeclineTicketPurchaseSuccess: (res: any) => void;\n onDeclineTicketPurchaseError: (e: AxiosError) => void;\n orderHash?: string;\n billingPath?: string;\n defaultRedirection?: boolean;\n}\n\nexport const TicketResaleContainer = ({\n onProcessTicketSuccess = () => {},\n onProcessTicketError = () => {},\n onDeclineTicketPurchaseSuccess = () => {},\n onDeclineTicketPurchaseError = () => {},\n orderHash,\n billingPath,\n defaultRedirection = true,\n}: ITicketResaleContainer) => {\n const isWindowDefined = typeof window !== 'undefined'\n const [error, setError] = useState('')\n const [successMessage, setSuccessMessage] = useState('')\n\n useEffect(() => {\n (async () => {\n if (isWindowDefined) {\n const params: URLSearchParams = new URL(`${window.location}`).searchParams\n const hash = params.get('invitation_hash') || orderHash || null\n const isDeclined = params.get('decline') || false\n window.localStorage.removeItem('checkoutAdditionalConfigs')\n\n if (hash) {\n // Process of declining ticket purchase invitation\n if (isDeclined) {\n try {\n const response = await declineInvitation(hash)\n onDeclineTicketPurchaseSuccess(response)\n setSuccessMessage(\n \"Thanks for letting us know! We'll offer this ticket to someone else!\"\n )\n } catch (error) {\n setError(error?.response?.data?.message)\n onDeclineTicketPurchaseError(error.response)\n }\n return\n }\n\n try {\n const response = await processTicket(hash)\n const event_id = _get(response.data.data.attributes, 'event_id')\n const eventHasAddons = _get(response.data.data.attributes, 'has_add_on')\n const invitationIncludesAddons = _get(response.data.data.attributes, 'include_add_on')\n window.localStorage.setItem('checkoutAdditionalConfigs', JSON.stringify({\n resale: true,\n resaleWithAddons: eventHasAddons && invitationIncludesAddons,\n }))\n\n onProcessTicketSuccess(response.data)\n if (defaultRedirection) {\n window.location.href = `${billingPath ?? '/billing/billing-info'}?event_id=${event_id}`\n }\n } catch (error) {\n setError(error?.response?.data?.message)\n onProcessTicketError(error.response)\n }\n } else {\n window.location.href = '/'\n }\n }\n })()\n }, [])\n\n return (\n <div className=\"ticket-resale-page\">\n <div className={`${successMessage ? 'success-block' : 'error-block'}`}>\n <h3>{successMessage ? successMessage : error}</h3>\n </div>\n </div>\n )\n}\n","import { useEffect, useState } from 'react'\n\nexport function useLocalStorageListener(\n key: string,\n callback: (value: string | null) => void\n): string | null {\n const isWindowDefined = typeof window !== 'undefined'\n const [value, setValue] = useState<string | null>(\n isWindowDefined ? localStorage.getItem(key) : ''\n )\n\n useEffect(() => {\n const intervalId = setInterval(() => {\n const newValue = localStorage.getItem(key)\n if (newValue !== value) {\n setValue(newValue)\n if (newValue) {\n const parsed = JSON.parse(newValue)\n if (parsed) {\n callback(parsed)\n }\n }\n }\n }, 100)\n\n return () => {\n clearInterval(intervalId)\n }\n }, [key, value, callback])\n\n return value\n}\n"],"names":["headers","Accept","Content-Type","isWindowDefined","window","authGuestToken","localStorage","getItem","publicRequest","axios","create","baseURL","withCredentials","interceptors","request","use","config","getCookieByName","setBaseUrl","baseUrl","defaults","setGuestToken","guestToken","common","generalDomain","CONFIGS","FEES_STYLE","getQueryVariable","variable","vars","location","search","substring","split","i","length","pair","decodeURIComponent","ErrorFocus","connect","componentDidUpdate","prevProps","formik","isSubmitting","isValidating","keys","Object","errors","errorElement","document","querySelector","focus","Component","getDomain","url","subdomain","publicSuffix","updatedUrl","replace","updatedPublicSuffix","startsWith","slice","join","indexOf","cname","name","ca","cookie","c","charAt","deleteCookieByName","hostname","endsWith","domain","undefined","downloadPDF","pdfUrl","xtfCookie","X-TF-ECOMMERCE","fetch","credentials","then","response","_context","blob","blobValue","fileNameHeader","get","fileName","Error","file","Blob","type","fileURL","URL","createObjectURL","link","createElement","href","setAttribute","body","appendChild","click","removeChild","error","createCheckoutDataBodyWithDefaultHolder","ticketsQuantity","logedInValues","includeDob","userCredentials","ticket_holders","first_name","_get","last_name","phone","email","push","attributes","confirm_email","holderAgeDate","Date","dob_day","getDate","dob_month","getMonth","dob_year","getFullYear","createMarkup","data","__html","replaceVarInString","message","varArray","re","RegExp","index","_","value","isBrowser","getFormInitialValues","fieldsSections","initialValues","userData","JSON","parse","_forEach","item","fields","fieldItem","setLoggedUserData","id","firstName","lastName","confirmEmail","city","country","countryId","street_address","streetAddress","state","stateId","zip","zipCode","logoutUser","onLogoutSuccess","onLogoutError","setIsLogged","logout","removeItem","event","CustomEvent","dispatchEvent","getFieldsKeys","customFields","_map","field","isJson","e","additionalCookiesHeaderValue","X_SOURCE_ORIGIN","BASE_URL","setItem","method","days","expires","date","setTime","getTime","toUTCString","setCustomCookie","_error$response","status","Promise","reject","optionsAdapter","options","option","label","fieldDataAdapter","required","description","restValues","adaptedField","className","multiline","radios","isMultiple","customFieldsDataAdapter","adaptedTicketFields","adaptedOrderFields","adaptedAddOnFields","ticketFields","orderFields","addOnFields","ticketField","orderField","addOnField","ticketsFields","authorize","post","CLIENT_ID","register","_context3","getProfileData","_context4","_context5","checkEmailExists","_context6","formData","FormData","append","_publicRequest$defaul","exists","console","getOrders","page","limit","eventSlug","slug","EVENT_SLUG","BRAND_SLUG","getOrderDetails","orderId","_context2","addToCart","Referer-Url","referrer","getCart","postOnCheckout","freeTicket","updateCheckout","getEvent","pk","referralValue","params","referralId","searchParams","referral_key","_split","referralIdlocal","invitationHash","Referrer-Id","getTickets","eventId","promoCode","promoterId","String","ticketsArr","tickets","adaptedResponse","getTimeSlotsByDate","remove_past_slots","getCountries","getStates","sendRSVPInfo","addToWaitingList","_context7","postReferralVisits","_context8","validatePhoneNumber","_context9","getPaymentData","hash","handlePaymentSuccess","orderHash","handleFreeSuccess","getConfirmationData","getConditions","adaptedData","nanoid","text","checked","returnData","resaleTicket","removeFromResale","processTicket","declineInvitation","getCustomerExistsData","accessHash","getDelegationTickets","issueTicket","setCustomHeader","guestHeaderResponseValue","guestHeaderExistingValue","guestHeader","createPaymentPlan","stripePaymentMethodId","stripe_payment_method_id","forgotPassword","getAddons","addons","getCheckoutPageConfigs","getCustomFields","updateOrderCustomFields","customFieldsData","put","order_id","data_capture","updateTicketHoldersCustomFields","ticketHash","ticket_hash","ticket_data_capture","confirmPreRegistration","getSeatMapData","reservedSeatsHash","reserved_seats_hash","getSeatMapStatuses","reserveSeat","tierId","seatId","ttl","removeSeatReserve","seatIds","_context10","getNetverifyUrl","_context11","checkVerificationStatus","_context12","updateVerificationStatus","_context13","patch","verification","verificationStatus","checkCustomerOrder","_context14","withCustomFields","Children","props","_props$ticketHoldersF","ticketHoldersFields","_props$skipCustomFiel","skipCustomFields","_props$onGetCustomFie","onGetCustomFieldsError","_identity","_props$onGetCustomFie2","onGetCustomFieldsSuccess","args","useState","lodaing","setLoading","setCustomFieldsData","customFieldsOrderKeys","setCustomFieldsOrderKeys","customFieldsTicketHolderKeys","setCustomFieldsTicketHolderKeys","customFieldsAddOnKeys","setCustomFieldsAddOnKeys","getFields","orderFieldsKeys","ticketHoldersFieldsKeys","addOnFieldsKeys","useEffect","initialData","_isEmpty","dataWithCustomFields","ticketHoldersWithCustomFields","orderWithCustomFields","groupClassname","groupItems","initialDataFields","splice","ticketHoldersFieldsArr","ticketHoldersCustomFieldsBlueprint","getDataWithCustomFields","addOnDataWithCustomFields","React","CircularProgress","size","appendScriptsToHeader","code","tempEl","innerHTML","scripts","getElementsByTagName","script","src","head","addGTagToHeader","tagId","links","_document","_document2","trim","scriptBody","dataLayer","gtag","_window","domains","usePixel","getScript","page_url","pageOptions","pageUrl","order_hash","brandGoogleTagKey","eventGoogleTagKey","eventGoogleTagManagerLinkerDomains","emailRegex","combineValidators","validators","error_message","requiredValidator","errorMessage","addEventListener","err","isFalsy","emailValidator","test","passwordValidator","password","currencyNormalizerCreator","currency","getCurrencySymbolByCurrency","createFixedFloatNormalizer","fixedValue","toFixed","style","position","top","left","transform","minWidth","backgroundColor","border","outline","padding","maxHeight","overflow","Modal","_ref$actions","actions","_ref$modalClassName","modalClassName","MuiModal","open","onClose","Box","children","action","Button","key","onClick","disabled","loading","variant","VerificationPendingModal","displayModal","showModal","setShowModal","Boolean","InfoIcon","xmlns","width","height","viewBox","fill","cx","cy","r","stroke","strokeWidth","x","y","showZero","intNumber","Number","_isNumber","TimerWidget","expires_at","buyLoading","_ref$onCountdownFinis","onCountdownFinish","container","showTimer","setShowTimer","handleCountdownFinish","timerComponent","timerRl","visibility","SVG","Countdown","now","renderer","minutes","seconds","completed","ReactDOM","createPortal","memo","addonsWithGroupsAdapter","addonsData","addOnsGroups","addOnGroupsWithVariants","addOnsWithoutVariants","forEach","addon","addOnGroupId","currentGroupId","exsistingGroupIndex","findIndex","addOnGroup","variants","group","find","concat","map","cartAdapter","cart","cartData","quantity","expiresAt","CheckboxField","_ref$form","form","isTouched","touched","errorText","hasError","customTheme","useTheme","FormControl","FormGroup","FormControlLabel","control","Checkbox","componentsProps","typography","checkbox","FormHelperText","rest","_rest$form","CheckboxMaterial","_rest$form2","CustomField","_ref2$type","_ref2$selectOptions","selectOptions","_ref2$form","submitCount","theme","_ref2$inputProps","inputProps","pInputProps","_ref2$InputProps","InputProps","inputRef","onChange","_ref2$multiline","_ref2$minRows","minRows","maxRows","isShrinked","setIsShrinked","showPassword","setShowPassword","_ref","useRef","isAutoFilled","current","_ref$current","matches","_ref$current2","isSelectField","isPasswordField","_includes","sx","input","finalInputProps","endAdornment","InputAdornment","IconButton","onMouseDown","preventDefault","edge","color","_customTheme$input","VisibilityOff","Visibility","_isFunction","_isObject","TextField","placeholder","select","fullWidth","helperText","onFocus","SelectProps","native","MenuProps","PaperProps","& .MuiMenuItem-root","paddingLeft","paddingRight","InputLabelProps","shrink","onBlur","MenuItem","PhoneNumberField","setFieldError","values","setFieldValue","setFieldTouched","setErrors","_ref$disableDropdown","disableDropdown","_ref$defaultCountry","defaultCountry","_ref$fill","setPhoneValidationIsLoading","isCountryCodeEditable","isSubmitAttempted","debounceCb","useCallback","_debounce","cb","newErrors","MuiPhoneNumber","dialCode","autoFormat","disableAreaCodes","countryCodeEditable","Loader","SelectField","_ref$options","_ref$onChange","_field$value","selectId","getSelectedItemLabel","selectedValue","selectedItem","InputLabel","Select","labelId","multiple","target","OutlinedInput","renderValue","selected","textAlign","ListItemText","primary","CopyMessageModal","showCopyModal","compactStyles","& > div","& > div > div, & > div > div > div, & .MuiCalendarPicker-root","& .MuiTypography-caption","margin","& .PrivatePickersSlideTransition-root","minHeight","DATE_SIZE","& .PrivatePickersSlideTransition-root [role=\"row\"]","& .MuiPickersDay-dayWithMargin","& .MuiPickersDay-root","& .MuiPickersArrowSwitcher-spacer","& [role=\"presentation\"] .PrivatePickersFadeTransitionGroup-root","marginRight","DatePickerField","isCompact","baseThemeOptions","_ref$useCompact","useCompact","themeOptions","_ref$dateFormat","dateFormat","_ref$placeholder","ThemeProvider","createTheme","assign","components","MuiPaper","defaultProps","LocalizationProvider","dateAdapter","AdapterMoment","DatePicker","PopperProps","placement","showDaysOutsideCurrentMonth","disableFuture","inputFormat","mask","renderInput","evt","NativeSelectField","_ref$type","_ref$selectOptions","htmlFor","RadioGroupField","_ref$radios","radioId","FormLabel","RadioGroup","radio","Radio","getInitialValues","propsInitialValues","userValues","results","_flatMapDeep","ticketHoldersCustomFields","_ticketHoldersFields","_ticketHoldersFields$","groupItem","_ticketHoldersFields$2","ticketHoldersCustomFieldsInitValues","selectedTicketsCount","customField","getValidateFunctions","element","states","validationFunctions","onValidate","confirmPassword","assingUniqueIds","itemValue","_isArray","some","uniqueId","getFieldLabel","configs","flagRequirePhone","collectMandatoryWalletAddress","isRequiredField","isValidElement","getFieldComponent","select_multi","AddonComponent","classNamePrefix","_ref$handleAddonChang","handleAddonChange","_ref$onCustomFieldCha","onCustomFieldChange","active","stock","_isNull","Field","component","fieldName","Comp","validate","v","_e$target","getNormalizedPrice","generateSelectOptions","minCount","maxCount","generateStockBasedOnLimitations","ticketQuantity","allowedStockCount","maxQuantity","limitPerTicket","flagLimitToTicketQuantity","stockBasedOnLimitPerTicket","filterStockBasedOnAvailability","generatedStock","availableStock","filteredStockCount","getAddonSelectOptions","choosedTicketCount","addonsWithOptions","groupsWithSelectedVariantsInfo","groupsWithVariants","simpleAddonStock","variantId","variantStock","stockBasedOnLimitation","choosedVariants","selectedCount","allowedVariantStockCount","variantOptions","addonOptions","getTicketRelatedAddons","ticketId","filter","prerequisiteTicketTypeIds","includes","getSortedAddons","sortDirection","addonsCopy","unsortedVariants","sortOrder","sortedVariants","_sortBy","sortedAddons","_reverse","AddonsContainter","_ref$enableBillingInf","enableBillingInfoAutoCreate","_ref$enableTimer","enableTimer","_ref$onGetAddonsPageI","onGetAddonsPageInfoSuccess","_ref$onGetAddonsPageI2","onGetAddonsPageInfoError","_ref$onPostCheckoutSu","onPostCheckoutSuccess","_ref$onPostCheckoutEr","onPostCheckoutError","_ref$onConfirmSelecti","onConfirmSelectionSuccess","_ref$onConfirmSelecti2","onConfirmSelectionError","_ref$onPendingVerific","onPendingVerification","samePage","_ref$descriptionTrigg","descriptionTrigger","_ref$onAddOnSelect","onAddOnSelect","setAddons","addonsOptions","setAddonsOptions","groupsWithSelectedVariants","setGroupsWithSelectedVariants","groupsWithInitialVariantsValues","setGroupsWithInitialVariantsValues","cartExpirationTime","setCartExpirationTime","pendingVerificationMessage","setPendingVerificationMessage","visibleDescription","setVisibleDescription","_cartAdapter","choosedTicketID","adaptedAddons","ticketRelatedAddons","sortedTicketAddons","_getAddonSelectOption","getAddonsPageInfo","onFieldChange","changeableGroup","currGroupId","currSelectedVariantId","currSelectedVariantCount","updatedGroupsWithSelectedVariants","groupId","changedGroupd","remainingGroupStock","recreatedVariantsOptions","variantCurrSelectedValue","prevState","recreateGroupVariantsSelectOptions","handleConfirm","skipAddonPage","pageConfigsData","skipBillingPage","skip_billing_page","checkoutBody","add_ons","checkoutResponse","_checkoutResponse$dat","_checkoutResponse$dat2","total","_checkoutResponse$dat3","_checkoutResponse$dat4","event_id","_error$response$data","_error$response$data$","hasUnverifiedOrder","_error$response2","_error$response2$data","stringify","handleClearAddons","useMemo","addOnsData","_addOnDataWithCustomF","addOnIsIncluded","isResale","Formik","onSubmit","selectedAddons","isConfirmDisabled","fromEntries","entries","Form","autoComplete","price","feeIncluded","cost","isAddonFree","addOnNormalizedCost","addonNormalizedPrice","imageUrl","alt","onMouseEnter","onMouseLeave","marginLeft","cursor","display","Tooltip","place","dangerouslySetInnerHTML","fieldGroup","SimpleAddonsContainer","_ref$handleConfirm","collectAddonFieldUpdates","allValues","out","k","handleCustomFieldChange","_groupId","existing","addonId","next","_addOnDataWithCustomF2","log","fieldUpdates","SnackbarAlert","_ref$autoHideDuration","autoHideDuration","Snackbar","isOpen","anchorOrigin","vertical","horizontal","classes","root","Alert","severity","icon","filled","PoweredBy","Schema","Yup","shape","ForgotPasswordModal","_ref$onLoginButtonCli","onLoginButtonClick","_ref$onForgotPassword","onForgotPasswordSuccess","_ref$onForgotPassword2","onForgotPasswordError","_ref$showPoweredByIma","showPoweredByImage","_ref$displaySuccessMe","displaySuccessMessage","successMessage","setSuccessMessage","showSuccess","onForgotPassword","success","isAxiosError","validationSchema","isValid","dirty","handleSubmit","SignUpForm","onSignUpSuccess","_ref$onGetProfileData","onGetProfileDataSuccess","_ref$onGetProfileData2","onGetProfileDataError","logo","setError","setIsSubmitting","countries","setCountries","setStates","phoneValidationIsLoading","mappedCountries","fetchCountries","enableReinitialize","passwordConfirmation","CLIENT_SECRET","profileResponse","profileDataObj","errorData","errorMessages","messages","l","toUpperCase","Array","isArray","whiteSpace","Grid","spacing","xs","sm","overflowY","md","mappedStates","fetchStatesForCountry","mobileStyle","LoginModal","onLogin","_ref$alreadyHasUser","alreadyHasUser","_ref$userExpired","userExpired","_ref$onSignup","onSignup","_ref$modalClassname","modalClassname","_ref$showForgotPasswo","showForgotPasswordButton","_ref$showSignUpButton","showSignUpButton","activeTab","setActiveTab","isMobile","useMediaQuery","useCustomSignup","@media screen and (orientation:landscape)","Tabs","_event","newValue","marginBottom","& .MuiTabs-indicator","Tab","fontFamily","fontWeight","fontSize","textTransform","&.Mui-selected","authRes","handlePaymentMiddleWare","reviewData","isFreeTickets","paymentPlanIsAvailable","showPaymentPlanSection","handlePayment","setPaymentIsLoading","orderData","onPaymentError","order_details","paymentSuccessResponse","_window$dataLayer","orderValue","orderCurrency","event_details","PaymentPlanSection","paymentPlanConfig","paymentPlanUseSavedCard","setPaymentPlanUseSavedCard","total_installments","price_per_installment","interval","has_admin_fee","admin_fee","requires_deposit","deposit","non_refundable_type","non_refundable_amount","saved_card","_paymentPlanConfig$sa","last_4_digits","StripeWrapper","onStripeReady","stripe","useStripe","elements","useElements","PaymentElement","initialPaymentPlanConfiguration","stripe_setup_intent_secret","initialOrderValues","product_name","ticketType","guest_count","pay_now","initialReviewValues","payment_method","stripe_client_secret","stripe_payment_plan_enabled","stripe_payment_plan_configuration","stripe_publishable_key","stripeConnectedAccount","billing_info","flagSeatMapAllowed","PaymentContainer","paymentFields","_ref2$formTitle","formTitle","checkoutData","_ref2$onErrorClose","onErrorClose","_ref2$onGetPaymentDat","onGetPaymentDataSuccess","_ref2$onGetPaymentDat2","onGetPaymentDataError","_ref2$onPaymentError","elementsOptions","paymentElementOptions","_ref2$onCountdownFini","_ref2$enableTimer","_ref2$orderInfoLabel","orderInfoLabel","_ref2$paymentInfoLabe","paymentInfoLabel","_ref2$displayPaymentB","displayPaymentButton","_ref2$hidePaymentForm","hidePaymentForm","_ref2$hideFieldsBlock","hideFieldsBlock","_ref2$isSinglePageChe","isSinglePageCheckout","stripePublishableKey","stripeAccountId","_ref2$onStripeReady","_ref2$enablePaymentPl","enablePaymentPlan","setReviewData","setOrderData","paymentIsLoading","paymentDataIsLoading","setPaymentDataIsLoading","conditions","setConditions","setCurrency","setShowPaymentPlanSection","setPaymentPlanIsAvailable","setPaymentPlanConfig","showFormTitle","showErrorText","fetchPaymentData","paymentDataResponse","_paymentDataResponse$","ticket","orderDataArray","_cart$","count","_cart$2","debt","tableTypes","subtotal","fees","conditionsInfo","fetchConditions","getPublishableKey","getStripePromise","stripeAccount","loadStripe","themeMui","hasTableTypes","paymentFieldsData","normalizer","parseFloat","isTable","paymentMethod","paymentPlanAvailable","_paymentPlanConfig$sa2","sessionData","session","_reviewData$order_det","Container","maxWidth","_field$className","_field$normalizer","flexDirection","tableTypeItem","gridTemplateColumns","gridColumnGap","groupName","showPaymentForm","Elements","paymentMethodId","_paymentPlanConfig$sa3","SignupSchema","min","oneOf","SignupModal","_ref$onLogin","_ref$onRegisterSucces","onRegisterSuccess","_ref$onRegisterError","onRegisterError","set","LogicRunner","setValues","setUserValues","onGetStatesSuccess","onGetStatesError","shouldFetchCountries","brandOptIn","prevCountry","prevBuyerData","hasLoadedUserData","res","stateExists","_mappedStates$find","_mappedStates$","fetchStates","buyerFirstName","buyerLastName","buyerEmail","buyerPhone","lastNameChanged","emailChanged","phoneChanged","userDataEncoded","parsedData","mappedValues","brand_opt_in","holderFirstName-0","holderLastName-0","holderEmail-0","holderPhone-0","extraDataJSON","extraData","getStoredUserData","EmailExistenceChecker","isLoggedIn","setEmailExists","checkEmail","timeoutId","setTimeout","clearTimeout","WithCustomFieldsBillingInfoContainer","_ref6$ticketHoldersFi","_ref6$initialValues","_ref6$buttonName","buttonName","_ref6$freeOrderButton","freeOrderButtonName","_ref6$handleSubmit","_ref6$theme","_ref6$onRegisterSucce","_ref6$onRegisterError","_ref6$onSubmitError","onSubmitError","_ref6$onGetCartSucces","onGetCartSuccess","_ref6$onGetCartError","onGetCartError","_ref6$onGetCountriesS","onGetCountriesSuccess","_ref6$onGetCountriesE","onGetCountriesError","_ref6$onGetStatesSucc","_ref6$onGetStatesErro","_ref6$onGetProfileDat","_ref6$onGetProfileDat2","_ref6$onLoginSuccess","onLoginSuccess","_ref6$onCheckoutUpdat","onCheckoutUpdateSuccess","_ref6$onCheckoutUpdat2","onCheckoutUpdateError","_ref6$isLoggedIn","pIsLoggedIn","_ref6$accountInfoTitl","accountInfoTitle","hideLogo","_ref6$onErrorClose","_ref6$hideErrorsAlert","hideErrorsAlertSection","_ref6$onSkipBillingPa","onSkipBillingPage","_ref6$skipPage","skipPage","_ref6$canSkipHolderNa","canSkipHolderNames","_ref6$onForgotPasswor","_ref6$onForgotPasswor2","_ref6$shouldFetchCoun","_ref6$onCountdownFini","_ref6$enableTimer","_ref6$showForgotPassw","_ref6$showSignUpButto","_ref6$brandOptIn","_ref6$showPoweredByIm","_ref6$isCountryCodeEd","_ref6$onPendingVerifi","_ref6$onGetCheckoutCo","onGetCheckoutConfigsSuccess","_ref6$onGetCheckoutCo2","onGetCheckoutConfigsError","_ref6$includeAddons","includeAddons","addonsProps","_ref6$isSinglePageChe","_ref6$paymentProps","paymentProps","paymentSectionAddon","setExtraData","isConfigLoading","setIsConfigLoading","setConfigs","elementsRef","stripeRef","_data$data","additionalConfigs","resale","resaleWithAddons","dataWithUniqueIds","setDataWithUniqueIds","setIsLoggedIn","cartInfoData","setCartInfo","showModalLogin","setShowModalLogin","setUserExpired","showModalSignup","setShowModalSignup","showModalForgotPassword","setShowModalForgotPassword","setTicketsQuantity","holderFirstName","holderLastName","holderAge","cardLoading","setCardLoading","isCountriesLoading","setIsCountriesLoading","emailExists","emailLogged","firstNameLogged","lastNameLogged","phoneLogged","showDOB","age_required","showTicketHolders","names_required","optedInFieldValue","ttfOptIn","hideTtfOptIn","expirationTime","phone_required","collect_mandatory_wallet_address","flagFreeTicket","free_ticket","hidePhoneField","hide_phone_field","hideWalletAddressField","collect_optional_wallet_address","collectMandatoryCompany","collect_mandatory_company","hideCompanyField","collect_optional_company","collectMandatoryJobTitle","collect_mandatory_job_title","hideJobTitleField","collect_optional_job_title","collectMandatoryInstagram","collect_mandatory_instagram","hideInstagramField","collect_optional_instagram","collectMandatoryBusinessCategory","collect_mandatory_business_category","eventHasAddons","has_add_on","hideBusinessCategoryField","collect_optional_business_category","setCheckoutData","checkoutUpdateData","setCheckoutUpdateData","prevData","addAddOnsInAttributes","selectedAddOns","addOnDataCapture","add_on_data_capture","singleCheckoutAddons","setSingleCheckoutAddOns","orderIsFree","hasUniqueId","isEqualData","_isEqual","getQuantity","qty","fetchCart","updateCheckoutWithAddOns","cartInfo","_cartInfo$cart","fetchUserData","profileSpecifiedData","userDataResponse","is_from_resale","checkoutUpdateResponse","cartPriceBreakdown","checkoutAttributes","fetchCheckoutUpdate","removeReferralKey","removeAdditionalConfigs","collectPaymentData","collectCheckoutBody","profileData","holders","individualHolder","_loop","holder","filteredRestValue","createCheckoutDataBody","_checkoutBody$attribu","holderIndex","holderDataCapture","customFieldKey","customFieldHolderName","val","match","fieldKey","storedAddOnDataCapture","parsed","mergedAttributes","urlParams","URLSearchParams","isPaymentReturn","clientSecret","storedContext","paymentContext","retrievePaymentIntent","paymentIntent","paymentResponse","updatedOrderData","formikHelpers","history","replaceState","title","pathname","handlePaymentReturn","usePaymentRedirect","processPayment","paymentData","submit","submitError","timestamp","confirmPayment","confirmParams","return_url","redirect","confirmError","useStripePayment","addOns","mergedAddOns","amount","checkoutDataObj","handleAddOnSelect","parseInt","currentAddOns","currentDataCapture","updatedAddOns","updatedDataCapture","initialCountry","_find","toLowerCase","_reviewData$payment_m","additional_payment_information","_checkoutUpdateData$a","basic_config","_checkoutUpdateData$a2","apiKey","_reviewData$payment_m2","stripe_connected_account","_checkoutUpdateData$a3","_checkoutUpdateData$a4","accountId","addOnsIncludedOnInvitation","_checkoutUpdateData$a5","elements_config","Backdrop","zIndex","ttf_opt_in","instagram","company","businessCategory","jobTitle","holdersCount","hasHolderPhoneError","userDataObj","_checkoutBody$attribu3","_e$response","setSubmitting","labelClassName","filteredGroupItems","el","filterBillingInfoFields","Fragment","renderComponentWithProps","handleBlur","format","_item","wallets","applePay","_checkoutUpdateData$a6","stripe_wallets","_checkoutUpdateData$a7","googlePay","_checkoutUpdateData$a8","_checkoutUpdateData$a9","getImage","image","require","SocialButton","facebook","FacebookShareButton","FacebookIcon","messenger","FacebookMessengerShareButton","FacebookMessengerIcon","twitter","TwitterShareButton","XIcon","linkedin","LinkedinShareButton","LinkedinIcon","pinterest","PinterestShareButton","PinterestIcon","vk","VKShareButton","VKIcon","ok","OKShareButton","OKIcon","telegram","TelegramShareButton","TelegramIcon","whatsapp","WhatsappShareButton","WhatsappIcon","reddit","RedditShareButton","RedditIcon","tumblr","TumblrShareButton","TumblrIcon","mailru","MailruShareButton","MailruIcon","EmailShareButton","EmailIcon","livejournal","LivejournalShareButton","LivejournalIcon","viber","ViberShareButton","ViberIcon","workplace","WorkplaceShareButton","WorkplaceIcon","line","LineShareButton","LineIcon","pocket","PocketShareButton","PocketIcon","instapaper","InstapaperShareButton","InstapaperIcon","weibo","WeiboShareButton","WeiboIcon","hatena","HatenaShareButton","HatenaIcon","spotify","SocialComponent","mainLabel","subLabel","platform","shareData","points","onAfterShare","alreadyApplied","oneTimeAction","_ref$btnClassName","btnClassName","_config","Icon","_config2","isActionDisabled","onKeyDown","round","isNaN","SocialButtons","showDefaultShareButtons","shareLink","appId","shareButtons","_ref2$titleText","titleText","_ref2$footerText","footerText","clientLabel","_ref2$onAfterShare","_ref2$showReferralsIn","showReferralsInfoText","quote","shareButton","eventActionId","getPreRegistrationInfluencers","getPreRegistrationShareOptions","submitShareAction","accessToken","phase","useCookieListener","handler","getCookie","intervalValue","setIntervalValue","cookieRef","handleCookieChange","setInterval","clearInterval","ConfirmModal","_ref$loading","_ref$hideCancelBtn","hideCancelBtn","_ref$onClose","_ref$onConfirm","onConfirm","isTimeExpired","startDate","timezone","moment","isAfter","tz","_ref$timezone","guess","_ref$title","_ref$message","_ref$showMessage","showMessage","_ref$disableLeadingZe","disableLeadingZero","_ref$callback","callback","duration","setDuration","timeExpired","setTimeExpired","timer","currentDate","diffTime","diff","dateArr","year","years","month","months","day","hour","hours","minute","second","timeLeft","unit","isDocumentDefined","SectionContainer","getFieldClassNames","existingClassNames","elem","getElementById","parentElement","_elem$parentElement","clientWidth","FieldsSection","formFields","_ref2$countries","_ref2$containerClass","containerClass","groupLabel","_item$groupLabelVars","groupLabelVars","_item$groupClassName","groupClassName","groupLabelClassName","elementId","childNodes","insertAdjacentHTML","insertHTML","fieldData","fieldIndex","_fieldData$className","_fieldData$options","Prewards","_props$classNamePrefi","_props$headerNode","headerNode","prize","CopyField","copyValue","_props$copyIconSrc","copyIconSrc","_props$copyTitle","copyTitle","_props$hasCopyIcon","hasCopyIcon","_props$onLinkCopied","onLinkCopied","_props$messageText","messageText","ref","defaultValue","readOnly","navigator","clipboard","writeText","ShareOptions","_props$headerText","headerText","updateShareActionData","shareActionData","shareUrl","socialUrl","point","shareOptionsAdapter","isShareLinkEnabled","_some","tokenShuffleMethod","reverse","lengthOfStr","part1","words","shuffledStr","shareActionToken","PreRegistrationComplete","pEventId","_ref$classNamePrefix","_ref$onLinkCopied","_ref$hasCopyIcon","_ref$pageHeader","pageHeader","_ref$onGetConfirmatio","onGetConfirmationDataError","_ref$onGetConfirmatio2","onGetConfirmationDataSuccess","_ref$pageMessage","pageMessage","_ref$onLoginSuccess","_ref$skipInitialValid","skipInitialValidation","localStorageHash","queryHash","setShowCopyModal","prizes","setPrizes","shareOptions","setShareOptions","setShareActionData","shareOptionsData","fetchConfirmationData","_isEmpaty","PreRegistration","pFormFields","additionalFieldAttribute","isPreregistrationStarted","_ref$onGetCountriesSu","_ref$onGetCountriesEr","_ref$onConfirmationSu","onConfirmationSuccess","_ref$onConfirmationEr","onConfirmationError","setAlreadyHasUser","show","confirmModalState","setConfirmModalState","setUserData","isPreRegistrationComplete","setIsPreRegistrationComplete","clientName","formFieldsLoggedIn","CLIENT_NAME","formFieldsNotLoggedIn","getFormFieldsNotLoggedIn","fieldSection","fieldSectionAttributes","updatedFields","updateFormFieldsAttributes","referrerId","updatedValues","dobDay","dobMonth","dobYear","shareHash","confirmationData","bodyFormData","profileRes","emailErrors","errorDataMessage","generateQuantity","n","quantityList","WaitingList","_ref$defaultMaxQuanti","defaultMaxQuantity","showSuccessMessage","setShowSuccessMessage","ticketTypesList","d","displayName","showTicketsField","ticketTypeId","selectedTicket","waitingListMaxQuantity","AccessCodeSection","setCode","updateTickets","isAccessCodeHasValue","onKeyPress","PromoCodeSection","codeIsApplied","showPromoInput","setShowPromoInput","setCodeIsApplied","codeIsInvalid","setCodeIsInvalid","promoText","showAlertIcons","isPromoCodeHasValue","appliedPromoCode","_window$localStorage","preProcessor","ReferralLogic","isAlreadyCounted","_asyncToGenerator","getTicketSelectOptions","multiplier","Math","TicketRow","ticketTier","prevTicketTier","selectedTickets","handleTicketSelect","isSeatMapAllowed","tableType","soldOutMessage","isSalesClosed","eventDatesInfo","salesStarted","presalesStarted","presalesEnded","salesEnded","presalesEnabled","defineIsSalesClosed","presales_enabled","maxGuests","minGuests","minQuantity","ticketsClosedMessage","canPurchaseTicket","displayTicket","isDirectPurchaseAllowed","onSaleContent","borderRadius","displayEmpty","aria-label","returnValue","sold_out","slotGroupId","soldOut","decodeHTML","html","textArea","TicketsSection","ticketsList","sortBySoldOut","ticketsHeaderComponent","tableTicketsHeaderComponent","hideTicketsHeader","hideTableTicketsHeader","showGroupNameBlock","currencySymbol","tableTickets","symbol","sortedTicketsList","showGroup","priceSymbol","handleDescriptionToggle","arr","ticketPriceWithoutFees","ticketPriceWithFees","basePrice","ticketOldPriceWithFees","oldBasePrice","ticketOldPriceWithoutFees","oldCost","ticketFinalPriceFormatted","isForward","x_face_value","ticketOldFinalPriceFormatted","ticketFeeAmount","ticketBreakdown","isSoldOut","ticketIsDiscounted","oldPrice","ticketIsFree","discountTicketPriceElem","ticketPriceElem","isNewGroupTicket","_arr","descriptionRich","_arr2","depositPercent","TimeSlotTicketRow","ticketKey","availableTimeSlots","selectedTimeSlots","handleTimeSlotSelect","currentSelectedTimeKey","currentTicketInstance","slot","timeKey","_availableTimeSlots$f","ticketInstance","currentSelectedQuantity","alignItems","justifyContent","gap","marginTop","selectedTimeKey","selectedOption","slotStartDate","TimeSlotsSection","availableDates","selectedDate","timeSlotGroups","setSelectedDate","getTimeSlots","setSelectedTimeSlots","handleDateChange","uniqueTickets","ticketMap","ticketsArray","t","prev","handleTicketSelectWithTimeSlot","shouldDisableDate","formattedDate","showToolbar","actionBar","disablePast","checkUserPreregistration","preregisteredUsers","userDataString","isPreregisteredUser","user","EventInfoItem","tableConfig","columns","header","ItemComponent","row","columnProps","eventName","Row","handleDetailsInfo","_ref$columns","hideDetailsButton","TableRow","& > *","borderBottom","column","TableCell","scope","onCellClick","RadioField","schema","yup","to","when","is","confirm","TicketResaleModal","_ref$onSubmit","holder_name","event_name","retain_amount_on_sale","ticket_type_is_active","CustomFieldsForm","_ref$fields","_ref$handleFormSubmit","handleFormSubmit","_ref$handleFormClose","handleFormClose","adaptedCustomField","resetForm","renderCustomFieldValue","getLabel","singleValue","isFieldUpdatable","settings","_field$settings","allowUpdate","TicketHolderCustomFields","holderCustomFields","_ref$handleTicketHold","handleTicketHoldersUpdate","showHolderCustomFieldsSection","setShowHolderCustomFieldsSection","allowedFields","notAllowedFields","allowedHolderCustomFields","notAllowedHolderCustomFields","holderEditableFieldsFormInitialValues","getHolderCustomFieldsInitialValues","EditSvg","notUpdatableCustomFieldsValues","fullUpdatableValues","reduce","acc","TicketsTable","_ref$icon","_ref$displayColumnNam","displayColumnNameInRow","_ref$canSellTicket","canSellTicket","_ref$ticketsTitle","ticketsTitle","_ref$ticketHoldersCus","_ref$handleSellTicket","handleSellTicket","_ref$handleRemoveFrom","handleRemoveFromResale","pdfError","setPdfError","pdfDownload","setPdfDownload","TableContainer","Paper","Table","TableHead","TableBody","columnIndex","ticketIsDownloading","pdf_link","is_on_sale","pdfDownloadError","is_sellable","getRow","colSpan","_ticket$add_ons","add_on","password_confirmation","LoginForm","_ref$onLoginError","onLoginError","onForgotPasswordButtonClick","_ref$onSignupButtonCl","onSignupButtonClick","_ref$registerUrl","registerUrl","rel","_ref2$states","_ref2$setPhoneValidat","_ref2$onFieldChange","disableField","collectStates","formDefaultFields","RegistrationForm","registrationType","customerEmail","_ref$onRegisterAccoun","onRegisterAccountSuccess","_ref$onRegisterAccoun2","onRegisterAccountError","_ref$onGetStatesSucce","_ref$onGetStatesError","setErrorMessage","showErrorModal","setshowErrorModal","updatedFormFields","fetchCountryId","handleRegisterAccount","VERIFICATION_STATUSES","PENDING","APPROVED","FAILED","WRONG_CUSTOMER","IssueTicketForm","_ref$handleSubmit","selectTicketTypeOptions","TicketsAssignedTable","tableTitle","issuePageData","_ref$noTicketsAssigne","noTicketsAssignedText","_issuePageData$ticket","_issuePageData$ticket2","TicketsAvailableTable","ticketTypes","optionValue","delegationMaxQuantity","delegationQuantityIssued","IssueComponent","_ref$headTitle","headTitle","_ref$onGetIssuePageDa","onGetIssuePageDataSuccess","_ref$onGetIssuePageDa2","onGetIssuePageDataError","showMaxQtyModal","setShowMaxQtyModal","showSuccessModal","setShowSuccessModal","setIssuePageData","_res$data","_res$data$data","fetchDelegationTickets","eventImage","addToCartFunc","result","pageConfigsDataResponse","_pageConfigsData$skip","hasAddOn","getOwnReservationsBasedOnStatuses","statuses","ownReservations","groupRowId","seatIndex","getTicketDropdownData","reservationData","tierReleations","ticketsDropdownsData","reservation","ticketsData","_values","ticket_type_tier_id","ticket_type_name","ticket_type_price","ticket_type_id","getAddToCartRequestData","_ref$reservations","reservations","_ref$selectedSeats","selectedSeats","_ref$selectedTickets","_ref$guestCounts","guestCounts","hasGuests","addToCartData","alternative_view_id","product_cart_quantity","product_options","product_id","ticket_types","productOptions","sitem","ticket_type_option","_ticketTypes$ticket$t","ticket_price","SeatMapComponent","seatMapProps","mapContainerId","seatData","_seatMapProps$seatMap","seatMapType","_seatMapProps$seatMap2","seatMapEvents","_seatMapProps$ticketT","ticketTypeTierRelations","tierPrices","isReserving","predefinedSeats","isLoadingSeatMapData","ticketTypeTireRelationsArray","mapComponent","SeatMapView","events","isSelectionOn","isBlockMap","isTableMap","ReactDom","render","reservedSeats","_props$theme","getTicketsBtnLabel","_props$contentStyle","contentStyle","_props$isButtonScroll","isButtonScrollable","handleGetTicketClick","handleCancelReservation","_props$ticketDeleteBu","ticketDeleteButtonContent","_props$ticketInfoCont","ticketInfoContent","_props$tableMapEnable","tableMapEnabled","setGuestCounts","isAddingToCart","selectedTicketsInfo","setSelectedTicketsInfo","bookButtonIsDisabled","_keys","handleShowtTicketInfo","ticketItem","dropdownData","selectedTicketData","startNum","ticket_type_min_number_of_guests","endNum","ticket_type_max_number_of_guests","numLength","showGuestCountDropdown","showDescription","guestPrice","guest_price","finalPrice","handleTicketChange","fee_included","ticket_type_deposit","arrow","tooltip","& .MuiTooltip-arrow","m","from","getButtonLabel","Influancers","influencer","prereg_id","SimpleCountdown","confirmationLabels","isReferralEnabled","_ref$messengerAppId","messengerAppId","_ref$shareButtons","_ref$showReferralsInf","_ref$showCopyInfoModa","showCopyInfoModal","_ref$showPricingNoteS","showPricingNoteSection","_ref$showOrderDetails","showOrderDetailsBtn","_ref$onOrderDetailsCl","onOrderDetailsClick","_ref$showProductImage","showProductImage","eventTitle","eventDate","eventLocation","setData","dataEncoded","confirmationDataResponse","personal_share_sales","salesItem","salesData","sales","unshift","product_price","_data$product_price","confirmationTitle","_confirmationLabels$c2","confirmationMain","_confirmationLabels$c3","confirmationHelper","_confirmationLabels$p","paymentPlanConfirmationTitle","_confirmationLabels$p2","paymentPlanConfirmationMain","_confirmationLabels$p3","paymentPlanConfirmationHelper","product_image","is_payment_plan","custom_confirmation_page_text","custom_confirmation_page_text_full_replacement","attach_tickets","disable_referral","personal_share_link","newData","pricing","registerFormFields","_ref$issuePageErrorTe","issuePageErrorText","_ref$onCustomerExists","onCustomerExistsError","isCustomerExsists","setIsCustomerExsists","issuePageError","setIssuePageError","setCustomerEmail","getCustomerData","onGetVerifyUrlSuccess","_props$onGetVerifyUrl2","onGetVerifyUrlError","_props$onGetVerificat","onGetVerificationStatusSuccess","_props$onGetVerificat2","onGetVerificationStatusError","_props$onVerification","onVerificationMessageModalClose","_props$onPassVerifica","onPassVerificationStepsSuccess","_props$onPassVerifica2","onPassVerificationStepsError","loadingStatus","setLoadingStatus","setVerificationStatus","netverifyUrl","setNetverifyUrl","provider","setProvider","setHasError","lastError","setLastError","displaModal","modalData","setModalData","isAccountVerifiedOrPending","callbackNetVerify","origin","getUrl","payload","transactionStatus","removeEventListener","urlResponse","intervalId","getVerificationStatus","verifyUrl","isApproved","statusResponse","getCustomerOrderStatus","makeRequests","iframe","_ref$onGetOrdersSucce","onGetOrdersSuccess","_ref$onGetOrdersError","onGetOrdersError","_ref$theme","_ref$selectEventsLabe","selectEventsLabel","_ref$hideDetailsButto","openLoginModal","_ref$customNoOrderCon","customNoOrderContent","setLimit","setFilter","isLogged","fetchData","noOrderContent","orders","_data$orders","Autocomplete","disablePortal","getOptionLabel","eventFilter","url_name","purchased_events","_data$orders2","MyTicketsRow","TablePagination","rowsPerPageOptions","total_count","rowsPerPage","onPageChange","newPage","onRowsPerPageChange","_ref3$paymentFieldsDa","_ref3$customMobileTex","customMobileText","_ref3$handleCountdown","isExpanded","setIsExpanded","totalField","totalValue","guestCount","defaultTableRenderer","defaultItemRenderer","_ref$onRemoveFromResa","onRemoveFromResaleSuccess","_ref$onRemoveFromResa2","onRemoveFromResaleError","_ref$onResaleTicketSu","onResaleTicketSuccess","_ref$onResaleTicketEr","onResaleTicketError","_ref$onUpdateOrderCus","onUpdateOrderCustomFieldsSuccess","_ref$onUpdateOrderCus2","onUpdateOrderCustomFieldsError","_ref$onUpdateTicketHo","onUpdateTicketHolderCustomFieldsSuccess","_ref$onUpdateTicketHo2","onUpdateTicketHolderCustomFieldsError","onReturnButtonClick","_ref$personalLinkIcon","personalLinkIcon","ticketsTableColumns","ordersPath","pOrderId","_ref$referralTitle","referralTitle","_ref$itemsTitle","itemsTitle","_ref$displayLoading","displayLoading","_ref$onDataLoaded","onDataLoaded","removeFromResaleLoading","setRemoveFromResaleLoading","resaleTicketLoading","setResaleTicketLoading","showResaleModal","setShowResaleModal","showRemoveResaleModal","setShowRemoveResaleModal","activeTicket","setActiveTicket","showOrderCustomFieldsSection","setShowOrderCustomFieldsSection","isLoading","setIsLoading","columnsProps","orderCustomFields","orderUpdatableCustomFields","orderNotUpdatableCustomFields","orderEditableFieldsFormInitialValues","orderSummery","handleOnSubmit","updatedData","_updatedData$tickets","onConfirmRemoveResale","_updatedData$tickets2","handleOrderCustomFieldsUpdate","updatedCustomFields","notUpdatedFields","sales_referred","items","_data$items","_data$items$ticket_ty","is_table","guests_count","deposit_paid","remaining","_data$items2","_data$items2$add_ons","_data$tickets$","_has","getTotal","sellTicketType","ticket_type_hash","_props$onGetPreregist","onGetPreregistrationDataSuccess","_props$onGetPreregist2","onGetPreregistrationDataError","influancersHeaderNode","prewardsHeaderNode","setInfluencers","topInfluancers","_slice","preregistrationData","influencers","fetchPreregistrationData","_ref$onClickOk","onClickOk","token","tokenProps","_ref$onResetPasswordS","onResetPasswordSuccess","_ref$onResetPasswordE","onResetPasswordError","showSection","modal","setModal","handleModalClose","requestData","_props$timerMessage","timerMessage","_props$onAddToCartSuc","onAddToCartSuccess","_props$onCountdownFin","seatMap","seatMapData","setSeatMapData","eventSeatsRef","ticketTypeTierRelationsRef","setSelectedTickets","seatMapStatuses","setSeatMapStatuses","setReservedSeats","setIsLoadingSeatMapData","isLoadingStatuses","setIsLoadingStatuses","setIsReserving","setIsAddingToCart","isOnline","setIsOnline","isGuestCountsSet","handleOffline","handleOnline","updateGuestCounts","seatTicketsArray","fetchSeatMapData","_seatMapDataResponse$","seatReservationTime","eventSeats","fetchSeatMapReservations","statusesResponse","tierIdOfReservation","seats","seatsCount","rowId","tier_id","startTimer","endTimer","handleSeatReservation","relations","_keys2","firstItem","handleCancelSeatReservtion","currentSelectedTickets","onSeatClick","seatInfo","_seatInfo$seat","seat","handleGetTicketBtnClick","ticketData","_addToCartData$attrib","valueOf","onComplete","tireId","onProcessTicketSuccess","_ref$onProcessTicketE","onProcessTicketError","_ref$onDeclineTicketP","onDeclineTicketPurchaseSuccess","_ref$onDeclineTicketP2","onDeclineTicketPurchaseError","billingPath","_ref$defaultRedirecti","defaultRedirection","isDeclined","invitationIncludesAddons","getTicketsLabel","_ref$contentStyle","_ref$onAddToCartError","onAddToCartError","_ref$onGetTicketsSucc","onGetTicketsSuccess","_ref$onGetTicketsErro","onGetTicketsError","_ref$onLogoutSuccess","_ref$onLogoutError","_ref$onGetTicketsPres","onGetTicketsPress","_ref$queryPromoCode","queryPromoCode","_ref$isPromotionsEnab","isPromotionsEnabled","_ref$isAccessCodeEnab","isAccessCodeEnabled","_ref$hideSessionButto","hideSessionButtons","_ref$hideWaitingList","hideWaitingList","_ref$isButtonScrollab","_ref$sortBySoldOut","_ref$disableCountdown","disableCountdownLeadingZero","_ref$isLoggedIn","ActionsSectionComponent","actionsSectionComponent","_ref$hideTicketsHeade","_ref$hideTableTickets","_ref$enableInfluencer","enableInfluencersSection","_ref$enableAddOns","enableAddOns","_ref$handleNotInvited","handleNotInvitedModalClose","_ref$handleInvalidLin","handleInvalidLinkModalClose","_ref$showGroupNameBlo","_ref$currencySymbol","_ref$onReserveButtonC","onReserveButtonClick","_ref$showAlertIcons","_ref$onPreRegistratio","onPreRegistrationSuccess","_ref$onPreRegistratio2","onPreRegistrationError","_ref$onPreRegistratio3","onPreRegistrationGetCountriesSuccess","_ref$onPreRegistratio4","onPreRegistrationGetCountriesError","showLoginModal","setShowLoginModal","setTickets","setEvent","showWaitingList","setShowWaitingList","codeIsLoading","setCodeIsLoading","handleBookIsLoading","setHandleBookIsLoading","showAccessCodeSection","setShowAccessCodeSection","showPromoCodeSection","setShowPromoCodeSection","isNotInvitedError","setIsNotInvitedError","isInvalidLinkError","setIsInvalidLinkError","setPreregisteredUsers","ticketsNotAvailableModalOpen","setTicketsNotAvailableModalOpen","isPreregistered","setIsPreregistered","ticketsContainerRef","isTimeSlotEvent","setAvailableDates","setTimeSlotGroups","setValue","useLocalStorageListener","getTicketsApi","fetchPreregisteredData","handleLogout","handleExternalLogin","groupedTickets","timeSlotsResponse","timeslots","dateKeyChunks","dateKey","ticketList","_timeSlotsResponse$da","ValidPromoCode","is_access_code","_getTicketsApi","isUpdatingCode","previewKey","eventResponse","timeslotSettings","_event$timeslotSettin2","_response$data","_fetchPreregisteredData","toString","allowMultipleTicketTypePurchases","newState","handleBook","timeSlotTickets","_flatten","slots","selectedTicketIds","ticketTypesData","totalProductCartQuantity","firstTicket","optionName","firstOptionName","firstTicketId","errorResponse","_errorResponse$data","_errorResponse$data$d","_errorResponse$data2","isTicketOnSale","eventHasTickets","scrollIntoView","behavior","block","inline","isTicketAvailable","wrappedActionsSectionComponent","cloneElement","externalUrl","redirectUrl","eventSaleIsNotStarted","salesStart","referralsEnabled","referrals","hideTopInfluencers","isTableMapEnabled","notAvailableTicketsMessage","_filter","ordinaryTickets","isPreRegistrationMode","preregEnabled","preregStarted","preregEnded","enableWaitingList","_influencer$lastName"],"mappings":"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"}
|