import { AxiosRequestConfig, AxiosResponse } from 'axios' import _forEach from 'lodash/forEach' import { getQueryVariable, isBrowser } from '../utils' import { publicRequest } from './publicRequest' export const getEvent = async ( id: string | number, pk?: string ): Promise => { let referralValue = '' let invitationHash if (isBrowser) { const params = new URL(`${window.location}`) const referralId = params.searchParams.get('ttf_r') || '' const referral_key = window.localStorage.getItem('referral_key') const [, referralIdlocal] = (referral_key || '').split('.') referralValue = referralId || (referralIdlocal ?? '') invitationHash = params.searchParams.get('invitation-hash') || null } const response: AxiosResponse = await publicRequest.get(`v1/event/${id}`, { params: { pk, invitationHash }, headers: { ...publicRequest.defaults.headers.common, 'Referer-Url': isBrowser ? document.referrer : '', 'Referrer-Id': isBrowser ? referralValue : '', }, }) return response.data } export const getTickets = async ( eventId: string | number, promoCode: string, pk?: string ): Promise => { const invitationHash = getQueryVariable('invitation-hash') const referralId = getQueryVariable('ttf_r') if (referralId) { window.localStorage.setItem('promoter_id', referralId) } const promoterId = window.localStorage.getItem('promoter_id') const params = { pk } as Record if (invitationHash) { params['invitation-hash'] = invitationHash } const headers = publicRequest.defaults.headers.common if (promoterId) { headers['Promotion-Event'] = String(eventId) headers['Referrer-Id'] = isBrowser ? promoterId : '' } if (promoCode) { headers['Promotion-Event'] = String(eventId) headers['Promotion-Code'] = promoCode window.localStorage.removeItem('promoter_id') } const response: AxiosResponse = await publicRequest.get(`v1/event/${eventId}/tickets/`, { params, headers, }) const { tickets } = response.data.data.attributes const ticketsArr: ITicketData[] = [] _forEach(tickets, item => { ticketsArr.push(item) }) const adaptedResponse: AxiosResponse = { ...response, data: { ...response.data, data: { ...response.data.data, attributes: { ...response.data.data.attributes, tickets: ticketsArr, }, }, }, } return adaptedResponse.data } export const getTimeSlotsByDate = async ( eventId: string | number, date: string, promoCode?: string, pk?: string ): Promise => { const invitationHash = getQueryVariable('invitation-hash') const referralId = getQueryVariable('ttf_r') if (referralId) { window.localStorage.setItem('promoter_id', referralId) } const promoterId = window.localStorage.getItem('promoter_id') const params = { pk } as Record if (invitationHash) { params['invitation-hash'] = invitationHash } const headers = publicRequest.defaults.headers.common if (promoterId) { headers['Promotion-Event'] = String(eventId) headers['Referrer-Id'] = isBrowser ? promoterId : '' } if (promoCode) { headers['Promotion-Event'] = String(eventId) headers['Promotion-Code'] = promoCode window.localStorage.removeItem('promoter_id') } const response: AxiosResponse = await publicRequest.get(`v1/event/${eventId}/timeslots`, { params: { date, remove_past_slots: true, ...params, }, headers, }) return response.data } export const getCountries = async (): Promise => { const response: AxiosResponse = await publicRequest.get('/countries/list') return response.data } export const getStates = async (countryId: string | number): Promise => { const response: AxiosResponse = await publicRequest.get(`/countries/${countryId}/states/`) return response.data } export const sendRSVPInfo = async ( eventId: number, data: { data: IRSVPRequestData } ): Promise => { const response: AxiosResponse = await publicRequest.post(`v1/event/${eventId}/send-rsvp-info`, data) return response.data } export const addToWaitingList = async ( id: number, data: IWaitingListRequestData ): Promise => { const response: AxiosResponse = await publicRequest.post(`v1/event/${id}/add_to_waiting_list`, { data, }) return response.data } export const postReferralVisits = async ( eventId: string, referralId: string ): Promise => { const response: AxiosResponse = await publicRequest.post(`v1/event/${eventId}/referrer/`, { referrer: `${referralId}`, }) return response.data } export const validatePhoneNumber = async (phone: string): Promise => { const response: AxiosResponse = await publicRequest.get(`/v1/account/validate_phone?phone=${phone}`) return response.data }