Files
Reem-Notas/app/views/admin/romaneios/_previa.html.erb

45 lines
2.5 KiB
Plaintext

<%# ── Prévia do PDF ───────────────────────────────────────────────────────
<details> NATIVO, e não um modal controlado por Stimulus. Isto é o
conserto de um problema que voltou três vezes: a prévia era o ÚNICO jeito
de conferir a folha antes de imprimir e morria junto com o JavaScript.
Quando os assets do servidor ficaram 404 (precompile que não rodou no
deploy), o botão "Ver prévia do PDF" não fazia nada e o operador ficava
sem saída — a tela abria normal, sem erro visível. Com <details> o
abrir/fechar é do navegador: funciona com o JS quebrado, sem JS, e no
celular.
`loading="lazy"`: o iframe só busca o PDF quando o bloco é aberto. É o que
preserva a economia que o modal trazia (gerar PDF a cada carregamento da
tela era o problema original) sem precisar de JS para preencher o `src`.
<iframe> e não <embed>/<object>: o CSP está em enforcing com
`object_src :none`, e sem `frame_src` ele cai em `default_src :self` — o
iframe de mesma origem passa, os outros dois não.
O `data-romaneio-target="preview"` continua aqui de propósito: com o JS
no ar, `atualizarPreview()` recarrega a folha depois de cada edição. Sem
ele, basta fechar e abrir. %>
<details class="bg-[#111] border border-white/5 rounded-2xl overflow-hidden"
data-romaneio-target="overlay"
data-action="toggle->romaneio#aoAbrirPreview">
<summary class="cursor-pointer list-none px-4 py-3 min-h-[48px] flex items-center gap-2
text-white hover:bg-white/5">
<%= icone :visualizar, cor: nil, espaco: false %>
Prévia do PDF — <span data-romaneio-target="tituloPreview"><%= @veiculo %></span>
<span class="ml-auto text-xs text-gray-500">clique para abrir / fechar</span>
</summary>
<div class="px-4 pb-4 space-y-2">
<div class="flex justify-end">
<%= link_to 'Abrir em outra aba',
pdf_admin_romaneio_path(@romaneio, veiculo: @veiculo),
target: '_blank', rel: 'noopener',
class: 'text-sm text-gray-300 hover:text-white px-3 py-2 rounded-lg hover:bg-white/10' %>
</div>
<iframe data-romaneio-target="preview" loading="lazy"
src="<%= pdf_admin_romaneio_path(@romaneio, veiculo: @veiculo) %>"
class="w-full h-[80vh] rounded-xl border border-white/10 bg-white"
title="Pré-visualização do romaneio"></iframe>
</div>
</details>