'use client'; import { Display } from '@/components/display'; import StripePayment from '@/components/payment/stripe'; import { SubscribeBilling } from '@/components/subscribe/billing'; import { SubscribeDetail } from '@/components/subscribe/detail'; import useGlobalStore from '@/config/use-global'; import { purchaseCheckout, queryPurchaseOrder } from '@/services/user/portal'; import { setAuthorization } from '@/utils/common'; import { useQuery } from '@tanstack/react-query'; import { Badge } from '@workspace/ui/components/badge'; import { Button } from '@workspace/ui/components/button'; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from '@workspace/ui/components/card'; import { Separator } from '@workspace/ui/components/separator'; import { Icon } from '@workspace/ui/custom-components/icon'; import { formatDate } from '@workspace/ui/utils'; import { useCountDown } from 'ahooks'; import { addMinutes, format } from 'date-fns'; import { useTranslations } from 'next-intl'; import Link from 'next/link'; import { QRCodeCanvas } from 'qrcode.react'; import { useEffect, useState } from 'react'; export default function Page() { const t = useTranslations('order'); const { getUserInfo } = useGlobalStore(); const [orderNo, setOrderNo] = useState(); const [enabled, setEnabled] = useState(false); const { data } = useQuery({ enabled: enabled, queryKey: ['queryPurchaseOrder', orderNo], queryFn: async () => { if (!orderNo) return; const params = localStorage.getItem(orderNo); const authParams = params ? JSON.parse(params) : {}; const { data } = await queryPurchaseOrder({ order_no: orderNo!, ...authParams }); if (data?.data?.status !== 1) { setEnabled(false); if (data?.data?.token) { setAuthorization(data?.data?.token); await new Promise((resolve) => setTimeout(resolve, 100)); await getUserInfo(); } } return data?.data; }, refetchInterval: 3000, }); const { data: payment } = useQuery({ enabled: !!orderNo && data?.status === 1, queryKey: ['purchaseCheckout', orderNo], queryFn: async () => { const { data } = await purchaseCheckout({ orderNo: orderNo!, returnUrl: window.location.href, }); if (data.data?.type === 'url' && data.data?.checkout_url) { window.open(data.data.checkout_url, '_blank'); } return data?.data; }, }); useEffect(() => { const searchParams = new URLSearchParams(location.search); if (searchParams.get('order_no')) { setOrderNo(searchParams.get('order_no')!); setEnabled(true); } }, []); const [countDown, formattedRes] = useCountDown({ targetDate: data && format(addMinutes(data?.created_at, 15), "yyyy-MM-dd'T'HH:mm:ss.SSSxxx"), }); const { hours, minutes, seconds } = formattedRes; const countdownDisplay = countDown > 0 ? ( <> {hours.toString().length === 1 ? `0${hours}` : hours} :{' '} {minutes.toString().length === 1 ? `0${minutes}` : minutes} :{' '} {seconds.toString().length === 1 ? `0${seconds}` : seconds} ) : ( <>{t('timeExpired')} ); return (
{t('orderNumber')} {data?.order_no} {t('createdAt')}: {formatDate(data?.created_at)}
{t('paymentMethod')}
{data?.payment.name || data?.payment.platform}
{data?.status && [1, 2].includes(data.status) && ( )} {data?.status === 3 && ( <>
{t('resetTraffic')}
  • {t('resetPrice')}
)} {data?.status === 4 && ( <>
{t('balanceRecharge')}
  • {t('rechargeAmount')}
)}
{data?.status && [2, 5].includes(data?.status) && (

{t('paymentSuccess')}

)} {data?.status === 1 && payment?.type === 'url' && (

{t('waitingForPayment')}

{countdownDisplay}

)} {data?.status === 1 && payment?.type === 'qr' && (

{t('scanToPay')}

{countdownDisplay}

)} {data?.status === 1 && payment?.type === 'stripe' && (

{t('waitingForPayment')}

{countdownDisplay}

{payment.stripe && } {/*
*/}
)} {data?.status && [3, 4].includes(data?.status) && (

{t('orderClosed')}

)}
); }