diff --git a/src/features/patients/PatientsListPage.vue b/src/features/patients/PatientsListPage.vue index 2a8ff52..297d065 100644 --- a/src/features/patients/PatientsListPage.vue +++ b/src/features/patients/PatientsListPage.vue @@ -34,6 +34,7 @@ import { useRoute, useRouter } from 'vue-router'; import ComponentCadastroRapido from '@/components/ComponentCadastroRapido.vue'; import PatientActionMenu from '@/components/patients/PatientActionMenu.vue'; +import { usePatientLifecycle } from '@/composables/usePatientLifecycle'; import PatientCadastroDialog from '@/components/ui/PatientCadastroDialog.vue'; import PatientCreatePopover from '@/components/ui/PatientCreatePopover.vue'; import PatientProntuario from '@/features/patients/prontuario/PatientProntuario.vue'; @@ -104,6 +105,36 @@ const conversationDrawerStore = useConversationDrawerStore(); const route = useRoute(); const toast = useToast(); const confirm = useConfirm(); +const { reactivatePatient } = usePatientLifecycle(); + +// Restaurar paciente arquivado — atalho visível direto na linha (em vez +// de exigir abrir o menu de "..."). Compartilha reactivatePatient com +// PatientActionMenu pra manter fonte única de verdade. +function restaurarPaciente(p) { + if (!p?.id) return; + confirm.require({ + message: `Restaurar "${p.nome_completo}" pra lista de pacientes ativos?`, + header: 'Restaurar paciente', + icon: 'pi pi-undo', + acceptLabel: 'Restaurar', + rejectLabel: 'Cancelar', + accept: async () => { + try { + const result = await reactivatePatient(p.id); + if (!result?.ok) throw result?.error || new Error('Falha ao restaurar.'); + toast.add({ severity: 'success', summary: 'Restaurado', detail: p.nome_completo, life: 2200 }); + await fetchAll(); + } catch (e) { + toast.add({ + severity: 'error', + summary: 'Falha ao restaurar', + detail: e?.message || 'Tente novamente.', + life: 4000 + }); + } + } + }); +} // ── Hero sticky ─────────────────────────────────────────── const headerEl = ref(null); @@ -1079,6 +1110,7 @@ function isRecent(row) {