"use client"; import { authClient } from "@repo/auth/client"; import { useUserPasskeysQuery } from "@saas/auth/lib/api"; import { SettingsItem } from "@saas/shared/components/SettingsItem"; import { useQueryClient } from "@tanstack/react-query"; import { Button } from "@ui/components/button"; import { Skeleton } from "@ui/components/skeleton"; import { KeyIcon, PlusIcon, TrashIcon } from "lucide-react"; import { useFormatter, useTranslations } from "next-intl"; import { toast } from "sonner"; export function PasskeysBlock() { const t = useTranslations(); const queryClient = useQueryClient(); const formatter = useFormatter(); const { data: passkeys, isPending } = useUserPasskeysQuery(); const addPasskey = async () => { await authClient.passkey.addPasskey({ fetchOptions: { onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["passkeys"] }); toast.success( t( "settings.account.security.passkeys.notifications.addPasskey.success.title", ), ); }, onError: () => { toast.error( t( "settings.account.security.passkeys.notifications.addPasskey.error.title", ), ); }, }, }); }; const deletePasskey = (id: string) => { toast.promise( async () => { await authClient.passkey.deletePasskey({ id, }); }, { loading: t( "settings.account.security.passkeys.notifications.deletePasskey.loading.title", ), success: t( "settings.account.security.passkeys.notifications.deletePasskey.success.title", ), error: t( "settings.account.security.passkeys.notifications.deletePasskey.error.title", ), }, ); }; return (
{isPending ? ( <>
) : ( passkeys?.map((passkey) => (
{passkey.deviceType} {passkey.name} {formatter.dateTime( new Date(passkey.createdAt), )}
)) )}
); }