'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 { getClient, getStat } from '@/services/common/common'; 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 { cn } from '@workspace/ui/lib/utils'; import { differenceInDays, formatDate, isBrowser } from '@workspace/ui/utils'; import { useTranslations } from 'next-intl'; import Image from 'next/image'; import Link from 'next/link'; import { QRCodeCanvas } from 'qrcode.react'; import React, { useState } from 'react'; import CopyToClipboard from 'react-copy-to-clipboard'; import { toast } from 'sonner'; import Subscribe from '../subscribe/page'; const platforms: (keyof API.DownloadLink)[] = [ 'windows', 'mac', 'linux', 'ios', 'android', 'harmony', ]; export default function Content() { const t = useTranslations('dashboard'); const { getUserSubscribe, getAppSubLink } = useGlobalStore(); const [protocol, setProtocol] = useState(''); const { data: userSubscribe = [], refetch, isLoading, } = useQuery({ queryKey: ['queryUserSubscribe'], queryFn: async () => { const { data } = await queryUserSubscribe(); return data.data?.list || []; }, }); const { data: applications } = useQuery({ queryKey: ['getClient'], queryFn: async () => { const { data } = await getClient(); return data.data?.list || []; }, }); const availablePlatforms = React.useMemo(() => { if (!applications || applications.length === 0) return platforms; const platformsSet = new Set(); applications.forEach((app) => { if (app.download_link) { platforms.forEach((platform) => { if (app.download_link?.[platform]) { platformsSet.add(platform); } }); } }); return platforms.filter((platform) => platformsSet.has(platform)); }, [applications]); const [platform, setPlatform] = useState(() => { const detectedPlatform = getPlatform() === 'macos' ? 'mac' : (getPlatform() as keyof API.DownloadLink); return detectedPlatform; }); React.useEffect(() => { if (availablePlatforms.length > 0 && !availablePlatforms.includes(platform)) { const firstAvailablePlatform = availablePlatforms[0]; if (firstAvailablePlatform) { setPlatform(firstAvailablePlatform); } } }, [availablePlatforms, platform]); const { data } = useQuery({ queryKey: ['getStat'], queryFn: async () => { const { data } = await getStat({ skipErrorHandler: true, }); return data.data; }, refetchOnWindowFocus: false, }); const statusWatermarks = { 2: t('finished'), 3: t('expired'), 4: t('deducted'), }; return ( <> {userSubscribe.length ? ( <>

{t('mySubscriptions')}

{availablePlatforms.length > 0 && ( setPlatform(value as keyof API.DownloadLink)} className='w-full max-w-full md:w-auto' > {availablePlatforms.map((item) => ( ))} )} {data?.protocol && data?.protocol.length > 1 && ( {['all', ...(data?.protocol || [])].map((item) => ( {item} ))} )}
{userSubscribe.map((item) => { return ( ); })} ) : ( <>

{t('purchaseSubscription')}

)} ); }