import _get from 'lodash/get' import { addToCart, getCheckoutPageConfigs, postOnCheckout } from '../../api' import { createCheckoutDataBodyWithDefaultHolder, isBrowser } from '../../utils' interface IAddToCartFuncProps { eventId: string | number; data: any; ticketQuantity: number; enableBillingInfoAutoCreate?: boolean; } export const addToCartFunc = async ({ eventId, data, ticketQuantity, enableBillingInfoAutoCreate = true, }: IAddToCartFuncProps) => { const result = await addToCart(eventId, data) const pageConfigsDataResponse = await getCheckoutPageConfigs() if (result.status === 200 && pageConfigsDataResponse.status === 200) { const pageConfigsData = _get(pageConfigsDataResponse, 'data.attributes') || {} const { skip_billing_page: skipBillingPage = false, has_add_on: hasAddOn = false, free_ticket: freeTicket = false, } = pageConfigsData let hash: string | number | undefined = '' let total: string | number | undefined = '' isBrowser && window.localStorage.removeItem('add_ons') if (skipBillingPage && !hasAddOn) { // Get user data for checkout data const userData = isBrowser && window.localStorage.getItem('user_data') ? JSON.parse(window.localStorage.getItem('user_data') || '') : {} const checkoutBody = createCheckoutDataBodyWithDefaultHolder( ticketQuantity, userData ) const checkoutResponse = enableBillingInfoAutoCreate ? await postOnCheckout(checkoutBody, freeTicket) : null hash = checkoutResponse?.data?.attributes?.hash || '' total = checkoutResponse?.data?.attributes?.total || '' } return { skip_billing_page: skipBillingPage, event_id: String(eventId), hash, total, hasAddOn, } } return null }