, correção para gerara prévia do romaneio
This commit is contained in:
44
app/views/admin/romaneios/_previa.html.erb
Normal file
44
app/views/admin/romaneios/_previa.html.erb
Normal file
@@ -0,0 +1,44 @@
|
||||
<%# ── 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>
|
||||
Reference in New Issue
Block a user