UNPKG

esoftplay-event

Version:

event module on esoftplay framework

135 lines (114 loc) 4.11 kB
// useLibs // noPage import { EventConfigProperty } from "esoftplay/cache/event/config/import" import { LibCurl } from "esoftplay/cache/lib/curl/import" import { LibNavigation } from "esoftplay/cache/lib/navigation/import" import { LibToastProperty } from "esoftplay/cache/lib/toast/import" import esp from "esoftplay/esp" import useGlobalState from "esoftplay/global" export interface EventCheckout { doPayment: (eventData: any, ticketSelected: any, qty: number, subscribed: any) => void, curlPriceConfig: (url: string, price_id: string) => Promise<any> } export const loading = useGlobalState<boolean>(false) export default function m(): EventCheckout { async function proceedToPayment(eventData: any, ticketSelected: any, qty: number, subscribed: any) { if (!ticketSelected) { LibToastProperty.show(esp.lang("event/artist_detail", "select_tiket_first")) return } const event_id = eventData?.event_id || eventData?.id let dataPost: any = { event_id: event_id, event_title: eventData?.event_title || eventData?.title, charge_payment: eventData?.charge_payment, charge_payment_type: eventData?.charge_payment_type, selected_ticket: ticketSelected, qty: qty, } if (ticketSelected?.config?.seat_autopick == 1 && qty > 1) { dataPost.adjacent_seats = 1 } let finalDataPost = { ...dataPost } if (ticketSelected?.use_seat == 1) { if (ticketSelected?.config?.seat_autopick != 1) { const seat = await LibNavigation.navigateForResult('event/seat_map_new', { url: 'event_seat', dataTicket: finalDataPost, }) finalDataPost = { ...finalDataPost, seat_label: seat?.seat_label } } } finalDataPost = await handleAdditionIfNeeded(event_id, ticketSelected, finalDataPost, qty) const args = await buildPaymentArgs(eventData, ticketSelected, finalDataPost, qty, subscribed) LibNavigation.navigate('payment/ticket', args) } function curlPriceConfig(url: string, price_id: string): Promise<any> { return new Promise((resolve) => { if (!url) { resolve({}) return } new LibCurl( url, null, (res) => { resolve(res?.[price_id] || {}) }, (err) => { LibToastProperty.show(err?.message) resolve({}) } ) }) } async function buildPaymentArgs(data: any, selectedTicket: any, dataPost: any, qty: number, subscribed: any) { const eventConfig = EventConfigProperty.state().get() loading.set(true) const conf = await curlPriceConfig(data?.url_price_config, selectedTicket?.price_id) loading.set(false) return { order_type: eventConfig?.order_type?.ticket, tax: conf?.tax ?? selectedTicket?.tax ?? data?.tax ?? 0, dataBookingEvent: { ...dataPost, qty }, subscribed, fee_platform: conf?.fee_platform_amount != null ? { fee_platform_amount: conf.fee_platform_amount || 0, fee_platform_type: conf.fee_platform_type || "NONE", } : { fee_platform_amount: data?.fee_platform_amount || 0, fee_platform_type: data?.fee_platform_type || "NONE", }, fee_custom: { fee_custom_label: conf?.fee_custom_label || "Custom Fee", fee_custom_amount: conf?.fee_custom_amount, fee_custom_type: conf?.fee_custom_type, } } } async function handleAdditionIfNeeded(event_id: string, selectedTicket: any, dataPost: any, qty: number) { if (selectedTicket?.has_addition != 1) return dataPost const additions = await LibNavigation.navigateForResult( 'event/additional', { type_ticket: selectedTicket?.type, ondate: selectedTicket?.list?.ondate, event_id: event_id, qty, data: dataPost, price_id: selectedTicket?.price_id }, 221 ) return additions ? { ...dataPost, addition: additions } : dataPost } return { doPayment: proceedToPayment, curlPriceConfig } }