@extends('layouts.admin') @section('title','Segments') @section('content') @php $columns = [ 'select' => '', 'name' => 'Segment', 'rules' => 'Rules', 'size' => 'Estimated', 'members' => 'Materialized', 'status' => 'Status', 'updated' => 'Last estimated', 'actions' => 'Actions', ]; $label = fn (string $v) => ucwords(str_replace(['_', '-'], ' ', $v)); $activeChips = collect([ 'status' => request('status'), 'size' => request('size'), 'sort' => request('sort') && request('sort') !== 'newest' ? request('sort') : null, ])->filter(); $evaluator = app(\App\Domain\Customers\Services\SegmentEvaluator::class); @endphp Customers Export CSV New segment @if(session('status'))
{{ session('status') }}
@endif
Segments {{ number_format($stats['total']) }} {{ number_format($stats['active']) }} active Active {{ number_format($stats['active']) }} In CRM workflows
Members {{ number_format($stats['members']) }} Materialized rows
Stale {{ number_format($stats['stale']) }} Not estimated in 7d Empty {{ number_format($stats['empty']) }} Zero matches
Largest {{ number_format($stats['largest']) }} Peak estimated size
@foreach([ ['label' => 'All', 'params' => []], ['label' => 'Active', 'params' => ['status' => 'active']], ['label' => 'Archived', 'params' => ['status' => 'archived']], ['label' => 'Stale', 'params' => ['status' => 'stale']], ['label' => 'Empty', 'params' => ['status' => 'empty']], ['label' => 'Large (50+)', 'params' => ['size' => 'large']], ] as $chip) @php $isActive = empty($chip['params']) ? (! request('status') && ! request('size')) : collect($chip['params'])->every(fn ($v, $k) => request($k) === $v); @endphp {{ $chip['label'] }} @endforeach
@if($activeChips->isNotEmpty())
Active @foreach($activeChips as $key => $value) {{ $label($key) }}: {{ $label((string) $value) }} @endforeach Clear all
@endif
@csrf
Clear
Segment Rules Estimated Materialized Status Last estimated @forelse($segments as $segment) @php $chips = $evaluator->describeRules($segment->query_def ?? [])->skip(1)->take(3); $status = $segment->status ?? 'active'; $tone = $status === 'archived' ? 'muted' : ($segment->isStale() ? 'warning' : 'success'); @endphp {{ $segment->name }} @if($segment->description)
{{ \Illuminate\Support\Str::limit($segment->description, 72) }}
@endif
@foreach($chips as $chip) {{ $chip }} @endforeach
{{ number_format($segment->estimated_count ?? 0) }} {{ number_format($segment->memberships_count) }} {{ $segment->isStale() && $status === 'active' ? 'Stale' : $label($status) }} {{ $segment->estimated_at?->diffForHumans() ?? 'Never' }}
Open Edit
@empty No segments yet. Create your first audience @endforelse {{ $segments->links() }}
@foreach($segments as $segment) @endforeach
@endsection