'use client'; import useGlobalStore from '@/config/use-global'; import { checkoutOrder, preCreateOrder, purchase } from '@/services/user/order'; import { getAvailablePaymentMethods } from '@/services/user/payment'; import { Badge } from '@shadcn/ui/badge'; import { Button } from '@shadcn/ui/button'; import { Card, CardContent } from '@shadcn/ui/card'; import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@shadcn/ui/dialog'; import { Input } from '@shadcn/ui/input'; import { Label } from '@shadcn/ui/label'; import { RadioGroup, RadioGroupItem } from '@shadcn/ui/radio-group'; import { Separator } from '@shadcn/ui/separator'; import { useQuery } from '@tanstack/react-query'; import { LoaderCircle } from 'lucide-react'; import { useTranslations } from 'next-intl'; import Image from 'next/legacy/image'; import { useRouter } from 'next/navigation'; import { useEffect, useState, useTransition } from 'react'; import { SubscribeBilling } from '../subscribe/billing'; import { SubscribeDetail } from '../subscribe/detail'; export default function Purchase({ subscribe, setSubscribe, }: { subscribe?: API.Subscribe; setSubscribe: (subscribe?: API.Subscribe) => void; }) { const t = useTranslations('order'); const { getUserInfo } = useGlobalStore(); const router = useRouter(); const [params, setParams] = useState({ quantity: 1, subscribe_id: subscribe?.id as number, payment: 'balance', coupon: '', }); const [loading, startTransition] = useTransition(); const { data: order } = useQuery({ queryKey: ['preCreateOrder', params], queryFn: async () => { const { data } = await preCreateOrder({ ...params, subscribe_id: subscribe?.id as number, }); return data.data; }, enabled: !!params?.subscribe_id, }); const { data: paymentMethods } = useQuery({ queryKey: ['getAvailablePaymentMethods'], queryFn: async () => { const { data } = await getAvailablePaymentMethods(); return data.data?.list || []; }, }); useEffect(() => { if (subscribe) { setParams((prev) => ({ ...prev, quantity: 1, subscribe_id: subscribe?.id, })); } }, [subscribe]); return ( { if (!open) setSubscribe(undefined); }} > {t('buySubscription')}
{t('purchaseDuration')}
{ setParams({ ...params, quantity: Number(value), }); }} className='flex flex-wrap gap-0.5 *:w-20 md:gap-2' >
{subscribe?.discount.map((item) => (
))}
{ setParams({ ...params, coupon: e.target.value.trim(), }); }} />
{t('paymentMethod')}
{ setParams({ ...params, payment: value, }); }} > {paymentMethods?.map((item) => { return (
); })}
); }