melissa/paciente-docs: wire-up preview actions + Editar abre dialog em modo edicao

DocumentPreviewDialog emitia @download/@edit/@share/@sign/@delete que
o MelissaPatientDocuments nao ouvia — os 5 botoes da sidebar do preview
caiam no vazio. Adicionado wire-up roteando pros mesmos handlers do
card (onDownload, onEdit, onShare, onSign, onDelete). Share/sign/delete
fecham o preview antes de abrir o proprio dialog pra UX limpa; download
mantem preview aberto (acao instantanea).

DocumentGenerateDialog ganha prop editing-doc-id. Quando setado:
- Busca template_id + dados_preenchidos via loadGeneratedFromDocId
- Pre-seleciona template, popula vars (sobrescreve auto-loaded vars
  com dados_preenchidos pra preservar customizacao anterior)
- Pula direto pra step 'edit'
- Save vira UPDATE in-place (preserva documents.id e audit trail)
- Header muda pra "Editar documento" + icone pi-pencil amber
- Botao final vira "Substituir documento"
- Doc sem registro generated (legado): toast info + flow normal de
  select template; ao salvar, cria o registro generated linkado.

MelissaPatientDocuments:
- onEdit substituido (era shortcut pra onPreview): abre generate dialog
  com editing-doc-id setado.
- Novo ref editingDoc dedicado (separado do selectedDoc que serve
  preview/share/sign/delete) pra evitar vazar "edit state" pro botao
  "Gerar" do header quando user so abre preview e fecha.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Leonardo
2026-05-22 13:42:39 -03:00
parent 342defecde
commit 89bf181742
2 changed files with 87 additions and 17 deletions
+25 -4
View File
@@ -57,6 +57,10 @@ const signatureDlg = ref(false);
const shareDlg = ref(false);
const selectedDoc = ref(null);
const previewUrl = ref('');
// Ref dedicado pro modo edicao do generate dialog. Separado do selectedDoc
// (que tambem alimenta preview/share/sign/delete) pra evitar vazar "edit
// state" pro "Gerar" do header quando o user so abre preview e fecha.
const editingDoc = ref(null);
// ── Tipo selecionado (filtro pela sidebar) ────────────────
// null = todos os tipos
@@ -123,9 +127,15 @@ async function onPreview(doc) {
function onDownload(doc) { download(doc); }
function onEdit(doc) {
selectedDoc.value = doc;
// Reusa preview dialog em modo "ver" — edit completo só via DocumentsListPage
onPreview(doc);
// Abre o DocumentGenerateDialog em modo edicao (editingDocId passado).
// Dialog busca template + dados_preenchidos do document_generated e
// pre-popula tudo, pulando direto pra step 'edit'. Save substitui o PDF
// in-place no Storage e atualiza documents (preserva id + audit trail).
// Docs uploaded direto (sem registro generated) caem no flow normal de
// "select template" com um toast info.
editingDoc.value = doc;
previewDlg.value = false; // fecha preview se estiver aberto
generateDlg.value = true;
}
function onDelete(doc) {
@@ -380,13 +390,24 @@ onBeforeUnmount(() => {
:doc="selectedDoc"
:preview-url="previewUrl"
@updated="fetchDocuments"
@download="onDownload"
@edit="onEdit"
@share="(d) => { previewDlg = false; onShare(d); }"
@sign="(d) => { previewDlg = false; onSign(d); }"
@delete="(d) => { previewDlg = false; onDelete(d); }"
/>
<!-- editing-doc-id vem do ref editingDoc dedicado so e setado
via onEdit (botao Editar). "Gerar" no header usa generateDlg=true
com editingDoc=null, abrindo limpo. Limpa editingDoc no
fechamento pra nao vazar pro proximo Gerar. -->
<DocumentGenerateDialog
v-if="patientId"
v-model:visible="generateDlg"
:visible="generateDlg"
:patient-id="patientId"
:patient-name="patientName"
:editing-doc-id="editingDoc?.id || null"
@generated="onGenerated"
@update:visible="(v) => { generateDlg = v; if (!v) editingDoc = null; }"
/>
<DocumentSignatureDialog
:visible="signatureDlg"