import { usePaymentStore } from '#lib/stores/payment' import { usePromotion, useDepositData, useWithdrawError, useNadal, } from '#lib/composables' /** * Import types from Nadal. */ import type { PhoneCardProvider, BaseNadalResponse } from '#lib/types' import { computed } from 'vue' import type { CreateWithdrawPhoneCardRequest } from '#lib/types/withdraw' /** * Custom composable function for handling phone card withdrawal. * @returns An object containing the necessary functions and computed properties. * @namespace */ export function useWithdrawPhoneCard() { const { payment } = useNadal() const { isUsingPromotion } = usePromotion() const { openWithdrawErrorModal } = useWithdrawError() const store = usePaymentStore() const { fetchPhoneCardProviders } = useDepositData() /** * The computed property for phone card providers. */ const phoneCardProviders = computed((): PhoneCardProvider[] => { const networks = store.phoneCardProviders.map((item) => ({ ...item, value: item.providerId, label: item.providerName, })) return networks?.length ? networks : [] }) /** * Fetches the phone card providers data. */ const fetchData = async () => { await fetchPhoneCardProviders() } /** * Creates a phone card withdrawal transaction. * * @param payload - The payload containing the necessary information for the withdrawal. * @returns A promise that resolves to the response from the withdrawal transaction. */ const onCreateWithdrawPhoneCard = async ( payload: CreateWithdrawPhoneCardRequest, ): Promise => { if (isUsingPromotion.value) { openWithdrawErrorModal() return Promise.resolve(undefined) } return await payment.withdrawPhone< CreateWithdrawPhoneCardRequest, BaseNadalResponse >(payload) } return { fetchData, onCreateWithdrawPhoneCard, phoneCardProviders, } }