"use client"; import { RiDeleteBin5Line } from "@remixicon/react"; import { useRouter } from "next/navigation"; import { useState, useTransition } from "react"; import { toast } from "sonner"; import { deletePagadorShareAction, regeneratePagadorShareCodeAction, } from "@/app/(dashboard)/pagadores/actions"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; type PagadorShare = { id: string; userId: string; name: string; email: string; createdAt: string; }; interface PagadorSharingCardProps { pagadorId: string; shareCode: string; shares: PagadorShare[]; } export function PagadorSharingCard({ pagadorId, shareCode, shares, }: PagadorSharingCardProps) { const router = useRouter(); const [currentCode, setCurrentCode] = useState(shareCode); const [regeneratePending, startRegenerate] = useTransition(); const [removePendingId, setRemovePendingId] = useState(null); const handleCopyCode = async () => { try { await navigator.clipboard.writeText(currentCode); toast.success("Código copiado para a área de transferência."); } catch { toast.error("Não foi possível copiar o código."); } }; const handleRegenerate = () => { startRegenerate(async () => { const result = await regeneratePagadorShareCodeAction({ pagadorId }); if (!result.success) { toast.error(result.error); return; } setCurrentCode(result.code); toast.success("Novo código gerado com sucesso."); router.refresh(); }); }; const handleRemove = (shareId: string) => { setRemovePendingId(shareId); startRegenerate(async () => { const result = await deletePagadorShareAction({ shareId }); if (!result.success) { toast.error(result.error); setRemovePendingId(null); return; } toast.success(result.message); setRemovePendingId(null); router.refresh(); }); }; return ( Compartilhamentos

Compartilhe o código abaixo com outra pessoa. Ela poderá adicioná-lo na página de pagadores usando a opção Adicionar por código para ter acesso somente leitura.

Código de compartilhamento
{currentCode}

Gerar um novo código não remove acessos existentes, apenas impede que novos convites usem o código anterior.

{shares.length === 0 ? (

Nenhum usuário com acesso de leitura.

) : (
    {shares.map((share) => (
  • {share.name} {share.email} ID: ****{share.userId.slice(-4)}
  • ))}
)}
); }