{{-- Modo Institucional — telão sem sessão ativa (rota /publico/painel). Só é incluído de dentro de resultado-ao-vivo.blade.php, no bloco `estadoBase() === 'sem_sessao'` — que só existe quando $sessao é null (primeiro `if` de ResultadoAoVivo::estadoBase()), então este arquivo NUNCA aparece durante uma sessão ativa, sem precisar de nenhuma verificação própria aqui. `$dados` vem de ResultadoAoVivo::dadosInstitucionais() — já calculado (e cacheado por 2 minutos) pelo componente; este partial só exibe. Rotação de slide 100% client-side (Alpine local, `slideAtual`) — MESMO padrão já comprovado pelo relógio do cabeçalho (`x-data` + `setInterval` sobrevivendo ao wire:poll.2s do componente pai): nenhuma requisição nova, nenhum reset de estado a cada poll. --}}
{{-- ============ SLIDE 1 — Identidade / Próxima Sessão / QR ============ --}}
Próxima Sessão
@if($dados['proximaSessao']) @php($p = $dados['proximaSessao'])
{{ $p['numero'] }}ª {{ ucfirst($p['tipo']) }}
{{ \Illuminate\Support\Carbon::parse($p['data'])->format('d/m/Y') }}
{{ ['preparacao' => 'Em preparação', 'ativa' => 'Ativa', 'encerrada' => 'Encerrada'][$p['situacao']] ?? ucfirst($p['situacao']) }} @if($p['materiasPautaPublica'] > 0) {{ $p['materiasPautaPublica'] }} {{ \Illuminate\Support\Str::plural('matéria', $p['materiasPautaPublica']) }} na pauta @endif
@else
Nenhuma sessão agendada no momento.
@endif
{{-- A geração em si mora em `window.renderizarQrPortal()`, definida uma única vez em components/publico-layout.blade.php — nunca duplicada aqui. Este canvas só se identifica (id/data-qr-url, ambos exclusivos desta função) e faz um x-init MÍNIMO chamando a função depois de $nextTick — cobre o caso de o canvas ser recriado do zero pelo Livewire (sessão ativa encerra e o institucional volta). A função central também é re-chamada sozinha via Livewire.hook('morph.added'/'morph.updated', ...) — rede de segurança que redesenha o QR depois de QUALQUER atualização do componente, mesmo que algo inesperado limpe o canvas entre um poll e outro; é idempotente (limpa e redesenha sobre o MESMO canvas, nunca cria um segundo elemento), então chamá-la repetidas vezes é seguro e barato. --}}
Acesse o Portal Legislativo
{{ preg_replace('#^https?://#', '', rtrim(route('publico.home'), '/')) }}
{{-- ============ SLIDE 2 — Últimas matérias aprovadas ============ --}}
Últimas Matérias Aprovadas
{{-- $dados['ultimasMaterias'] é array simples (não mais Collection de Models) desde a correção do HTTP 500 de cache — !empty() no lugar de ->isNotEmpty(). --}} @if(! empty($dados['ultimasMaterias']))
@foreach($dados['ultimasMaterias'] as $m)
{{ $m['tipo'] }} nº {{ $m['numero'] }}/{{ $m['ano'] }}
{{ \Illuminate\Support\Str::limit($m['titulo'], 90) }}
{{ $m['autorNome'] ?? '—' }}
Aprovada
@endforeach
@else
Nenhuma matéria aprovada publicada até o momento.
@endif
{{-- ============ SLIDE 3 — Mesa Diretora + acessos ============ --}}
Mesa Diretora
{{-- $dados['mesaDiretora'] é array simples (não mais Collection de Models Mandato/User) desde a correção do HTTP 500 de cache — !empty() no lugar de ->isNotEmpty(); 'fotoUrl' já vem resolvida (Storage::url) do componente, nunca recalculada aqui. --}} @if(! empty($dados['mesaDiretora']))
@foreach($dados['mesaDiretora'] as $membro)
@if($membro['fotoUrl']) @else
@endif
{{ $membro['nome'] ?? '—' }}
{{ $membro['cargo'] }}
@endforeach
@else
Composição da Mesa Diretora não disponível.
@endif
Sessões • Vereadores • Estatísticas