'use client'; import { Display } from '@/components/display'; import { queryApplicationConfig } from '@/services/user/subscribe'; import { queryUserSubscribe } from '@/services/user/user'; import { Icon } from '@iconify/react'; import { getNextResetDate, isBrowser } from '@repo/ui/utils'; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@shadcn/ui/accordion'; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from '@shadcn/ui/alert-dialog'; import { Button } from '@shadcn/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@shadcn/ui/card'; import { differenceInDays } from '@shadcn/ui/lib/date-fns'; import { toast } from '@shadcn/ui/lib/sonner'; import { Separator } from '@shadcn/ui/separator'; import { Tabs, TabsList, TabsTrigger } from '@shadcn/ui/tabs'; import { useQuery } from '@tanstack/react-query'; import { useTranslations } from 'next-intl'; import Image from 'next/image'; import Link from 'next/link'; import { QRCodeCanvas } from 'qrcode.react'; import { useState } from 'react'; import useGlobalStore from '@/config/use-global'; import Renewal from '../order/renewal'; import ResetTraffic from '../order/reset-traffic'; import Subscribe from '../subscribe/page'; import Announcement from './announcemnet'; export default function Page() { const t = useTranslations('dashboard'); const { getUserSubscribe, getAppSubLink } = useGlobalStore(); const [protocol, setProtocol] = useState(''); const { data: userSubscribe = [] } = useQuery({ queryKey: ['queryUserSubscribe'], queryFn: async () => { const { data } = await queryUserSubscribe(); return data.data?.list || []; }, }); const { data: application } = useQuery({ queryKey: ['queryApplicationConfig'], queryFn: async () => { const { data } = await queryApplicationConfig(); return data.data as API.ApplicationResponse; }, }); const [platform, setPlatform] = useState('windows'); const handleCopy = async (text: string) => { try { await navigator.clipboard.writeText(text); toast.success(t('copySuccess')); } catch { toast.error(t('copyFailure')); } }; return (
{userSubscribe.length ? ( <>

{t('mySubscriptions')}

setPlatform(value as keyof API.ApplicationResponse)} className='w-full max-w-full md:w-auto' > {application && Object.keys(application)?.map((item) => ( {item} ))} {['all', 'ss', 'vmess', 'vless', 'trojan'].map((item) => ( {item} ))}
{userSubscribe.map((item) => ( {item.subscribe.name}
{t('prompt')} {t('confirmResetSubscription')} {t('cancel')} toast.success(t('resetSuccess'))}> {t('confirm')}
  • {t('used')}
  • {t('totalTraffic')}
  • {t('nextResetDays')} {differenceInDays(getNextResetDate(item.start_time), new Date()) || t('unknown')}
  • {t('expirationDays')} {differenceInDays(new Date(item.expire_time), new Date()) || t('unknown')}
{getUserSubscribe(item.mark, protocol)?.map((url, index) => (
{t('subscriptionUrl')} {index + 1} { e.stopPropagation(); handleCopy(url); }} > {t('copy')}
{application && application[platform]?.map((app) => (
{app.name} {app.icon && ( {app.name} )}
))}
{t('qrCode')} {t('scanToSubscribe')}
))}
))} ) : ( <>

{t('purchaseSubscription')}

)}
); }