esoftplay-event
Version:
event module on esoftplay framework
135 lines (114 loc) • 4.11 kB
text/typescript
// 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
}
}