import _get from 'lodash/get' type Type1 = string | number | null | undefined interface ICheckoutBody { attributes: { [key: string]: | Type1 | Record | Array; }; data_capture?: { [key: string]: any; }; } interface IticketHolder { first_name?: string; last_name?: string; phone?: string; email?: string; } interface IUserCredentialsValues { emailLogged?: string; firstNameLogged?: string; lastNameLogged?: string; phoneLogged?: string; } export const createCheckoutDataBodyWithDefaultHolder = ( ticketsQuantity: number, logedInValues: Record, includeDob = false, userCredentials: IUserCredentialsValues = {} ): ICheckoutBody => { const ticket_holders: IticketHolder[] = [] const first_name = _get(logedInValues, 'firstName') || _get(logedInValues, 'first_name') || _get(userCredentials, 'firstNameLogged') || '' const last_name = _get(logedInValues, 'lastName') || _get(logedInValues, 'last_name') || _get(userCredentials, 'lastNameLogged') || '' const phone = _get(logedInValues, 'phone') || _get(userCredentials, 'phoneLogged') || '' const email = _get(logedInValues, 'email') || _get(userCredentials, 'emailLogged') || '' for (let i = 0; i <= ticketsQuantity - 1; i++) { const individualHolder = i ? { first_name: '', last_name: '', phone: '', email: '' } : { first_name, last_name, phone, email } ticket_holders.push(individualHolder) } const body: ICheckoutBody = { attributes: { ...logedInValues, email, confirm_email: email, first_name, last_name, ticket_holders, }, } if (includeDob) { const holderAgeDate = new Date(_get(logedInValues, 'holderAge', '')) body.attributes.dob_day = holderAgeDate.getDate() body.attributes.dob_month = holderAgeDate.getMonth() + 1 body.attributes.dob_year = holderAgeDate.getFullYear() } return body }