"use client"; import { authClient } from "@repo/auth/client"; import { useSession } from "@saas/auth/hooks/use-session"; import { SettingsItem } from "@saas/shared/components/SettingsItem"; import { useRouter } from "@shared/hooks/router"; import { useQuery, useQueryClient } from "@tanstack/react-query"; import { Button } from "@ui/components/button"; import { Skeleton } from "@ui/components/skeleton"; import { ComputerIcon, XIcon } from "lucide-react"; import { useTranslations } from "next-intl"; import { toast } from "sonner"; export function ActiveSessionsBlock() { const t = useTranslations(); const router = useRouter(); const queryClient = useQueryClient(); const { session: currentSession } = useSession(); const { data: sessions, isPending } = useQuery({ queryKey: ["active-sessions"], queryFn: async () => { const { data, error } = await authClient.listSessions(); if (error) { throw error; } return data; }, }); const revokeSession = (token: string) => { authClient.revokeSession( { token, }, { onSuccess: () => { toast.success( t( "settings.account.security.activeSessions.notifications.revokeSession.success", ), ); queryClient.invalidateQueries({ queryKey: ["active-sessions"], }); router.refresh(); }, }, ); }; return (
{isPending ? ( <>
) : ( sessions?.map((session) => (
{session.id === currentSession?.id ? t( "settings.account.security.activeSessions.currentSession", ) : session.ipAddress} {session.userAgent}
)) )}
); }