@php /** @var \Illuminate\Support\Collection $broadcasts */ $statusBadge = [ 'completed' => 'bg-ink-900 text-paper-0', 'completed_with_errors' => 'bg-accent-amber/15 text-ink-800 border border-accent-amber/30', 'processing' => 'bg-wa-green/15 text-wa-deep border border-wa-green/30', 'scheduled' => 'bg-accent-amber/15 text-ink-800 border border-accent-amber/30', 'failed' => 'bg-accent-coral/15 text-accent-coral border border-accent-coral/30', ]; // Provider chip palette — same hues as /devices + /team-inbox so the // operator can recognise the engine at a glance across the app. $providerBadge = [ 'baileys' => ['Unofficial API', 'bg-ink-900/5 text-ink-700 border border-ink-200'], 'waba' => ['WABA', 'bg-wa-mint/40 text-wa-deep border border-wa-deep/20'], 'twilio' => ['Twilio', 'bg-[#F22F46]/10 text-[#A12534] border border-[#F22F46]/25'], ]; // Resolve template names in one batch so the rows don't N+1 against // wa_templates. Pre-fetch by the ids on this page. $tplIds = collect($broadcasts->items() ?? $broadcasts) ->pluck('template_id') ->filter() ->unique() ->all(); $tplNames = $tplIds ? \App\Models\WaTemplate::whereIn('id', $tplIds)->pluck('template_name', 'id')->all() : []; @endphp @forelse ($broadcasts as $b) @php $counts = $b->status_counts; $cls = $statusBadge[$b->status] ?? 'bg-paper-50 text-ink-700 border border-paper-200'; $prov = strtolower((string) ($b->provider ?? '')); [$provLabel, $provCls] = $providerBadge[$prov] ?? ['—', 'bg-paper-50 text-ink-500 border border-paper-200']; $tplName = $b->template_id ? $tplNames[$b->template_id] ?? 'Template #' . $b->template_id : null; @endphp
{{ $b->name }}
{{ $provLabel }}
Broadcast #BR-{{ str_pad((string) $b->id, 4, '0', STR_PAD_LEFT) }}
{{ $tplName ?? '—' }} {{ number_format($b->total_recipients) }} {{ number_format($counts['sent']) }} {{ number_format($counts['delivered']) }} {{ number_format($counts['read']) }} {{ number_format($counts['failed']) }} {{ number_format($counts['clicked'] ?? 0) }} {{ ucwords(str_replace('_', ' ', $b->status)) }} @if ($b->scheduled_at) {{ $b->scheduled_at->isToday() ? 'Today, ' . $b->scheduled_at->format('H:i') : $b->scheduled_at->format('M d, H:i') }} @else — @endif
{{-- View deep analytics: per-recipient timeline, funnel, template preview, device used. --}} @if (in_array($b->status, ['scheduled', 'failed'], true)) @endif
@empty @include('user.partials.empty-state', [ 'message' => 'No broadcasts match the current filters. Try clearing filters or create your first broadcast.', 'resetHref' => url('/broadcasts'), 'actionHref' => route('user.broadcasts.create'), 'actionLabel' => 'Create broadcast', ]) @endforelse