"use client"; import { useQuery } from "@tanstack/react-query"; import { Link, useSearch } from "@tanstack/react-router"; 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/composed/icon"; import { purchaseCheckout, queryPurchaseOrder, } from "@workspace/ui/services/user/portal"; import { formatDate } from "@workspace/ui/utils/formatting"; import { useCountDown } from "ahooks"; import { addMinutes, format } from "date-fns"; import { QRCodeCanvas } from "qrcode.react"; import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { Display } from "@/components/display"; import { SubscribeBilling } from "@/sections/subscribe/billing"; import { SubscribeDetail } from "@/sections/subscribe/detail"; import StripePayment from "@/sections/user/payment/stripe"; import { useGlobalStore } from "@/stores/global"; import { setAuthorization } from "@/utils/common"; export default function Order() { const { t } = useTranslation("order"); const { getUserInfo } = useGlobalStore(); const [orderNo, setOrderNo] = useState(); const [enabled, setEnabled] = useState(false); const search = useSearch({ from: "/(main)/purchasing/order/" }); const { data } = useQuery({ 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(() => { if (search.order_no) { setOrderNo(search.order_no); setEnabled(true); } }, [search]); 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", "Time Expired") ); return (
{t("orderNumber", "Order Number")} {data?.order_no} {t("createdAt", "Created At")}: {formatDate(data?.created_at)}
{t("paymentMethod", "Payment Method")}
{data?.payment.name || data?.payment.platform}
{data?.status && [1, 2].includes(data.status) && ( )} {data?.status === 3 && ( <>
{t("resetTraffic", "Reset Traffic")}
  • {t("resetPrice", "Reset Price")}
)} {data?.status === 4 && ( <>
{t("balanceRecharge", "Balance Recharge")}
  • {t("rechargeAmount", "Recharge Amount")}
)}
{data?.status && [2, 5].includes(data?.status) && (

{t("paymentSuccess", "Payment Successful")}

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

{t("waitingForPayment", "Waiting for Payment")}

{countdownDisplay}

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

{t("scanToPay", "Scan to Pay")}

{countdownDisplay}

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

{t("waitingForPayment", "Waiting for Payment")}

{countdownDisplay}

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

{t("orderClosed", "Order Closed")}

)}
); }