Reverb infra + Kanban live refresh

- laravel/reverb instalat + reverb:install (config/reverb.php, channels.php)
- routes/channels.php: tenant.{slug} private channel cu auth check
  user.company_id == tenant.id
- App\Events\WorkOrderUpdated implements ShouldBroadcast pe
  PrivateChannel('tenant.{slug}'); broadcastAs 'work-order.updated'
- WorkOrder::booted dispatch event la fiecare update (skip if broadcast=log)
- Filament panel BODY_END inject:
  - Pusher JS de la CDN (compatibil Reverb)
  - Echo client conectat la Reverb (config dinamic din env)
  - Subscribe pe tenant private channel; la 'work-order.updated' →
    Livewire.all().forEach($refresh)
- Kanban view: wire:poll.5s (live refresh fallback) +
  x-on:autocrm:wo-updated.window=$refresh (instant când WS e activ)

Pentru moment BROADCAST_CONNECTION=log în Coolify (Reverb nu e deployat).
Când deployezi Reverb container separat:
  Coolify → New App → Same repo → CMD override:
    php artisan reverb:start --host=0.0.0.0 --port=8080
  → FQDN: ws.service.mir.md:8080
  → Set BROADCAST_CONNECTION=reverb pe AutoCRM app
  → Real-time instant fără cod nou.
This commit is contained in:
2026-05-07 14:25:26 +00:00
parent 09fd0bada2
commit 7ce78c350c
10 changed files with 1299 additions and 5 deletions
@@ -33,7 +33,10 @@
.kb-empty { font-size: 11px; color: #9ca3af; text-align: center; padding: 16px 0; }
</style>
<div x-data="{ dragId: null }">
{{-- Live: poll fallback every 5s + instant refresh on WebSocket event --}}
<div x-data="{ dragId: null }"
wire:poll.5s
x-on:autocrm:wo-updated.window="$wire.$refresh()">
<div class="kb-board">
@foreach ($columns as $status => $col)
<div