'use client'; import { Display } from '@/components/display'; import Renewal from '@/components/subscribe/renewal'; import ResetTraffic from '@/components/subscribe/reset-traffic'; import Unsubscribe from '@/components/subscribe/unsubscribe'; import useGlobalStore from '@/config/use-global'; import { getStat } from '@/services/common/common'; import { queryApplicationConfig } from '@/services/user/subscribe'; import { queryUserSubscribe, resetUserSubscribeToken } from '@/services/user/user'; import { getPlatform } from '@/utils/common'; import { useQuery } from '@tanstack/react-query'; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from '@workspace/ui/components/accordion'; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from '@workspace/ui/components/alert-dialog'; import { Button } from '@workspace/ui/components/button'; import { Card, CardContent, CardHeader, CardTitle } from '@workspace/ui/components/card'; import { Separator } from '@workspace/ui/components/separator'; import { Tabs, TabsList, TabsTrigger } from '@workspace/ui/components/tabs'; import { Icon } from '@workspace/ui/custom-components/icon'; import { isBrowser } from '@workspace/ui/utils'; import { differenceInDays } from 'date-fns'; 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 CopyToClipboard from 'react-copy-to-clipboard'; import { toast } from 'sonner'; import Subscribe from '../subscribe/page'; const platforms: (keyof API.ApplicationPlatform)[] = [ 'windows', 'macos', 'linux', 'ios', 'android', 'harmony', ]; export default function Content() { const t = useTranslations('dashboard'); const { getUserSubscribe, getAppSubLink } = useGlobalStore(); const [protocol, setProtocol] = useState(''); const { data: userSubscribe = [], refetch } = useQuery({ queryKey: ['queryUserSubscribe'], queryFn: async () => { const { data } = await queryUserSubscribe(); return data.data?.list || []; }, }); const { data: applications } = useQuery({ queryKey: ['queryApplicationConfig'], queryFn: async () => { const { data } = await queryApplicationConfig(); return data.data?.applications || []; }, }); const [platform, setPlatform] = useState(getPlatform()); const { data } = useQuery({ queryKey: ['getStat'], queryFn: async () => { const { data } = await getStat({ skipErrorHandler: true, }); return data.data; }, refetchOnWindowFocus: false, }); return ( <> {userSubscribe.length ? ( <>

{t('mySubscriptions')}

setPlatform(value as keyof API.ApplicationPlatform)} className='w-full max-w-full md:w-auto' > {platforms.map((item) => ( ))} {data?.protocol && data?.protocol.length > 1 && ( {['all', ...(data?.protocol || [])].map((item) => ( {item} ))} )}
{userSubscribe.map((item) => ( {item.subscribe.name}
{t('prompt')} {t('confirmResetSubscription')} {t('cancel')} { await resetUserSubscribeToken({ user_subscribe_id: item.id, }); await refetch(); toast.success(t('resetSuccess')); }} > {t('confirm')}
  • {t('used')}
  • {t('totalTraffic')}
  • {t('nextResetDays')} {item.reset_time ? differenceInDays(new Date(item.reset_time), new Date()) : t('unknown')}
  • {t('expirationDays')} {item.expire_time ? differenceInDays(new Date(item.expire_time), new Date()) || t('unknown') : t('noLimit')}
{getUserSubscribe(item.token, protocol)?.map((url, index) => (
{t('subscriptionUrl')} {index + 1} { if (result) { toast.success(t('copySuccess')); } }} > e.stopPropagation()} > {t('copy')}
{applications ?.filter((application) => { const platformApps = application.platform?.[platform]; return platformApps && platformApps.length > 0; }) .map((application) => { const platformApps = application.platform?.[platform]; const app = platformApps?.find((item) => item.is_default) || platformApps?.[0]; if (!app) return null; const handleCopy = (text: string, result: boolean) => { if (result) { const href = getAppSubLink(application.subscribe_type, url); const showSuccessMessage = () => { toast.success( <>

{t('copySuccess')}


{t('manualImportMessage')}

, ); }; if (isBrowser() && href) { window.location.href = href; const checkRedirect = setTimeout(() => { if (window.location.href !== href) { showSuccessMessage(); } clearTimeout(checkRedirect); }, 1000); return; } showSuccessMessage(); } }; return (
{application.name} {application.icon && ( {application.name} )}
); })}
{t('qrCode')} {t('scanToSubscribe')}
))}
))} ) : ( <>

{t('purchaseSubscription')}

)} ); }