'use client'; import useGlobalStore from '@/config/use-global'; import { checkoutOrder, preCreateOrder, renewal } 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, DialogTrigger } 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 Renewal({ mark, subscribe, }: { mark: string; subscribe: Omit & { discount: string | API.UserSubscribeDiscount[]; }; }) { const t = useTranslations('order'); const { getUserInfo } = useGlobalStore(); const [open, setOpen] = useState(false); const router = useRouter(); const [params, setParams] = useState({ quantity: 1, subscribe_id: subscribe.id, payment: 'balance', coupon: '', subscribe_mark: mark, }); const [loading, startTransition] = useTransition(); const { data: order } = useQuery({ queryKey: ['preCreateOrder', params], queryFn: async () => { const { data } = await preCreateOrder({ ...params, subscribe_id: subscribe.id, }); return data.data; }, enabled: !!subscribe.id, }); const { data: paymentMethods } = useQuery({ queryKey: ['getAvailablePaymentMethods'], queryFn: async () => { const { data } = await getAvailablePaymentMethods(); return data.data?.list || []; }, }); useEffect(() => { if (subscribe.id && mark) { setParams((prev) => ({ ...prev, quantity: 1, subscribe_id: subscribe.id, subscribe_mark: mark, })); } }, [subscribe.id, mark]); function getDiscount() { try { if (typeof subscribe.discount === 'string') { return JSON.parse(subscribe?.discount) as API.UserSubscribeDiscount[]; } return subscribe?.discount; } catch (error) { return []; } } return ( {t('renewSubscription')}
{t('purchaseDuration')}
{ setParams({ ...params, quantity: Number(value), }); }} className='flex flex-wrap gap-2' >
{getDiscount().map((item) => (
))}
{ setParams({ ...params, coupon: e.target.value.trim(), }); }} />
{t('paymentMethod')}
{ setParams({ ...params, payment: value, }); }} > {paymentMethods?.map((item) => { return (
); })}
); }