'use client'; import { Display } from '@/components/display'; import { ProTable } from '@/components/pro-table'; import { getUserSubscribeDevices, getUserSubscribeLogs, getUserSubscribeTrafficLogs, kickOfflineByUserDevice, } from '@/services/admin/user'; import { Badge } from '@workspace/ui/components/badge'; import { Button } from '@workspace/ui/components/button'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger, } from '@workspace/ui/components/dialog'; import { Switch } from '@workspace/ui/components/switch'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@workspace/ui/components/tabs'; import { ConfirmButton } from '@workspace/ui/custom-components/confirm-button'; import { formatDate } from '@workspace/ui/utils'; import { useTranslations } from 'next-intl'; import { ReactNode, useState } from 'react'; import { toast } from 'sonner'; export function SubscriptionDetail({ trigger, userId, subscriptionId, }: { trigger: ReactNode; userId: number; subscriptionId: number; }) { const t = useTranslations('user'); const [open, setOpen] = useState(false); return ( {trigger} {t('subscriptionDetails')}
{t('subscriptionLogs')} {t('trafficLogs')} {t('onlineDevices')} > columns={[ { accessorKey: 'ip', header: 'IP', }, { accessorKey: 'user_agent', header: t('userAgent'), }, { accessorKey: 'token', header: t('token'), }, { accessorKey: 'created_at', header: t('time'), cell: ({ row }) => formatDate(row.getValue('created_at')), }, ]} request={async (pagination) => { const { data } = await getUserSubscribeLogs({ user_id: userId, subscribe_id: subscriptionId, ...pagination, }); return { list: data.data?.list || [], total: data.data?.total || 0, }; }} /> > columns={[ { accessorKey: 'download', header: t('download'), cell: ({ row }) => , }, { accessorKey: 'upload', header: t('upload'), cell: ({ row }) => , }, { accessorKey: 'timestamp', header: t('time'), cell: ({ row }) => formatDate(row.getValue('timestamp')), }, ]} request={async (pagination) => { const { data } = await getUserSubscribeTrafficLogs({ user_id: userId, subscribe_id: subscriptionId, ...pagination, }); return { list: data.data?.list || [], total: data.data?.total || 0, }; }} /> > columns={[ { accessorKey: 'enabled', header: t('enable'), cell: ({ row }) => ( { console.log('Switch:', checked); }} /> ), }, { accessorKey: 'id', header: 'ID', }, { accessorKey: 'identifier', header: 'IMEI', }, { accessorKey: 'user_agent', header: t('userAgent'), }, { accessorKey: 'ip', header: 'IP', }, { accessorKey: 'online', header: t('loginStatus'), cell: ({ row }) => ( {row.getValue('online') ? t('online') : t('offline')} ), }, { accessorKey: 'updated_at', header: t('lastSeen'), cell: ({ row }) => formatDate(row.getValue('updated_at')), }, ]} request={async (pagination) => { const { data } = await getUserSubscribeDevices({ user_id: userId, subscribe_id: subscriptionId, ...pagination, }); return { list: data.data?.list || [], total: data.data?.total || 0, }; }} actions={{ render: (row) => { if (!row.identifier) return []; return [ {t('confirmOffline')}} title={t('confirmOffline')} description={t('kickOfflineConfirm', { ip: row.ip })} onConfirm={async () => { await kickOfflineByUserDevice({ id: row.id }); toast.success(t('kickOfflineSuccess')); }} cancelText={t('cancel')} confirmText={t('confirm')} />, ]; }, }} />
); }