From 51cbd0712522dac32f590af2ab3ab0e44afe79d6 Mon Sep 17 00:00:00 2001 From: VPS 4 Builder Date: Thu, 14 May 2026 07:11:58 +0200 Subject: [PATCH] fix(pacientes): alias dataNascimento in query; show full name; add CopyField component per data field Co-Authored-By: Claude Sonnet 4.6 --- frontend/views/PatientsView.tsx | 67 ++++++++++++++++++++------------- 1 file changed, 41 insertions(+), 26 deletions(-) diff --git a/frontend/views/PatientsView.tsx b/frontend/views/PatientsView.tsx index 91ee9aa..6ce9832 100644 --- a/frontend/views/PatientsView.tsx +++ b/frontend/views/PatientsView.tsx @@ -1,5 +1,5 @@ import React, { useState, useEffect, useCallback } from 'react'; -import { Search, Plus, DollarSign, X, Printer, CreditCard, Rocket, Loader2, FolderOpen, CalendarDays, RadioTower, Pencil, Wallet, PlusCircle, Banknote, History, FileText, Calendar } from 'lucide-react'; +import { Search, Plus, DollarSign, X, Printer, CreditCard, Rocket, Loader2, FolderOpen, CalendarDays, RadioTower, Pencil, Wallet, PlusCircle, Banknote, History, FileText, Calendar, Copy, CheckCircle2 } from 'lucide-react'; import { HybridBackend } from '../services/backend.ts'; import { Paciente, Dentista, Agendamento } from '../types.ts'; import { useHybridBackend } from '../hooks/useHybridBackend.ts'; @@ -375,6 +375,30 @@ const EditarPacienteModal: React.FC<{ patient: Paciente; onClose: () => void; on import { PageHeader } from '../components/PageHeader.tsx'; +const CopyField: React.FC<{ label: string; value?: string | null }> = ({ label, value }) => { + const [copied, setCopied] = useState(false); + const copy = () => { + if (!value) return; + navigator.clipboard.writeText(value).then(() => { + setCopied(true); + setTimeout(() => setCopied(false), 1500); + }); + }; + return ( +
+
+

{label}

+

{value || '—'}

+
+ {value && ( + + )} +
+ ); +}; + export const PatientsView: React.FC = () => { const [busca, setBusca] = useState(''); const debouncedBusca = useDebounce(busca, 500); @@ -471,41 +495,32 @@ export const PatientsView: React.FC = () => { {displayedPacientes && displayedPacientes.map(p => (
-
-
-

{p.nome}

+
+ {/* Nome completo + convênio */} +
+

{p.nome}

{p.convenio && ( - {p.convenio} + {p.convenio} )}
-
-
- -

{p.cpf}

-
-
- -

{p.telefone}

-
-
- -

{p.dataNascimento}

-
-
- -

{p.convenio}

-
+ {/* Dados copiáveis */} +
+ + + + + {p.email &&
}
-
-