'use client'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { sessionService } from '@/lib/services/session.service'; import { Button } from '@/components/ui/button'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'; import { toast } from 'sonner'; import { Loader2, Trash2, Monitor, Smartphone } from 'lucide-react'; import { format } from 'date-fns'; export default function SessionManagementPage() { const queryClient = useQueryClient(); const { data: sessions, isLoading, error, } = useQuery({ queryKey: ['sessions'], queryFn: sessionService.getActiveSessions, }); const revokeMutation = useMutation({ mutationFn: sessionService.revokeSession, onSuccess: () => { toast.success('Session revoked successfully'); queryClient.invalidateQueries({ queryKey: ['sessions'] }); }, onError: (error) => { toast.error('Failed to revoke session'); console.error(error); }, }); const handleRevoke = (id: number) => { if (confirm('Are you sure you want to revoke this session?')) { revokeMutation.mutate(id); } }; if (isLoading) { return (
); } if (error) { return
Failed to load sessions. Please try again.
; } return (

Active Sessions

Monitor and manage active user sessions across all devices.

User Device Info Last Active Actions {sessions?.map((session: any) => (
{session.user.username} {session.user.firstName} {session.user.lastName}
{session.deviceName || 'Unknown Device'}
{session.ipAddress || 'Unknown IP'}
{session.lastActive ? format(new Date(session.lastActive), 'PP pp') : '-'}
))} {(!sessions || sessions.length === 0) && ( No active sessions found. )}
); }