<% ctx = { status: params[:status], canal: params[:canal] }.compact_blank %> <% # Pílula de filtro: uma só definição para os dois grupos (situação e canal), # senão o estilo do "ativo" fatalmente diverge entre eles com o tempo. pilula = lambda do |ativo| base = 'px-4 py-2 rounded-xl text-sm border transition-colors' ativo ? "#{base} bg-[#f97316] text-white border-[#f97316] font-semibold" : "#{base} bg-[#0a0a0a] text-gray-400 border-white/10 hover:border-white/20 hover:text-white" end %>

<%= icone :historico, espaco: false %> Envios

O que saiu, para quem e se chegou. Uma falha de envio nunca trava o fechamento — então é aqui que ela aparece.

<%= render 'shared/flash' %> <%# Filtros %>
Situação <% [['', 'Todos'], ['enviado', 'Enviados'], ['falhou', 'Falhados'], ['pendente', 'Pendentes']].each do |valor, rotulo| %> <%= link_to rotulo, admin_envios_path(ctx.merge(status: valor.presence).compact), data: { turbo: false }, class: pilula.call(params[:status].to_s == valor) %> <% end %>
Canal <% [['', 'Todos'], ['whatsapp', 'WhatsApp'], ['email', 'E-mail']].each do |valor, rotulo| %> <%= link_to rotulo, admin_envios_path(ctx.merge(canal: valor.presence).compact), data: { turbo: false }, class: pilula.call(params[:canal].to_s == valor) %> <% end %>
<% if @total_falhas.positive? %> <%= icone :erro, cor: nil, tamanho: 'w-3.5 h-3.5', espaco: false %> <%= @total_falhas %> falha(s) neste filtro <% end %>
<%# Tabela %>
<% @envios.each do |envio| %> <% end %> <% if @envios.empty? %> <% end %>
Quando Evento Destinatário Canal Situação Mensagem
<%= envio.created_at.strftime('%d/%m/%Y') %> <%= envio.created_at.strftime('%H:%M') %> <%= envio.evento_notificacao&.nome || '—' %> <%= envio.contato&.nome || envio.user&.nome || '—' %> <%= envio.destino %> <% wpp = envio.canal == 'whatsapp' %> <%= icone(wpp ? :telefone : :email, cor: nil, tamanho: 'w-3.5 h-3.5', espaco: false) %> <%= wpp ? 'WhatsApp' : 'E-mail' %> <% cfg = case envio.status when 'enviado' then { cor: 'bg-green-600 text-white', icone: :sucesso, label: 'Enviado' } when 'falhou' then { cor: 'bg-red-600 text-white', icone: :erro, label: 'Falhou' } else { cor: 'bg-yellow-500 text-black', icone: :relogio, label: envio.status.to_s.capitalize } end %> <%= badge_com_icone(cfg) %> <% if envio.falhou? && envio.erro.present? %> <%= envio.erro.truncate(160) %> <% end %> <%= envio.corpo.to_s.truncate(90) %>
<%= icone :vazio, tamanho: 'w-10 h-10', cor: 'text-gray-600', espaco: false %>

Nenhum envio registrado ainda.

<% if @envios.any? && @pagy.pages > 1 %> <% pag = ->(p) { admin_envios_path(ctx.merge(page: p)) } %> <% end %>