@props(['targets' => [], 'names' => [], 'meta' => [], 'id' => 'targetTable', 'highlightEpic' => null]) @php // Inlined (no per-cell sub-components) so large tables (thousands of rows) // render without exhausting memory. Client-side app.js handles filter/sort/page. $statusLabels = [ 'done' => 'Done', 'in_progress' => 'In progress', 'blocked' => 'Blocked', 'overdue' => 'Overdue', 'not_started' => 'Not started', 'unknown' => 'Unknown', ]; $whoName = function (?string $email) use ($names) { if (! $email) return '—'; if (! str_contains($email, '@')) return $email; return $names[$email] ?? \Illuminate\Support\Str::title(str_replace('.', ' ', explode('@', $email)[0])); }; @endphp @forelse ($targets as $t) @php $m = ($t->jira_key && isset($meta[$t->jira_key])) ? $meta[$t->jira_key] : null; $typeSlug = str_replace(['-', ' '], '', strtolower($t->story_type ?: 'unspecified')); $sc = \App\Services\StatusService::statusColor($t->raw_status, $t->status); $sLabel = $t->raw_status ?: ($statusLabels[$t->status] ?? 'Unknown'); $epicHl = $highlightEpic && ($m['parent'] ?? null) === $highlightEpic; @endphp @empty @endforelse
Target storyTypeParentProjectOwner CreatorCreatedUpdatedPeriodStatus
{{ $t->title }}@if ($t->jira_key)
{{ $t->jira_key }}
@endif
{{ $t->story_type ?: 'Unspecified' }} @if ($m && ($m['parent'] ?? null)){{ $m['parent'] }}@else —@endif {{ $t->project }} {{ $whoName($t->effective_owner) }} {{ ($m['creator'] ?? null) ?: '—' }} {{ ($m && ($m['created'] ?? null)) ? $m['created']->format('Y-m-d') : '—' }} {{ ($m && ($m['updated'] ?? null)) ? $m['updated']->format('Y-m-d') : '—' }} {{ $t->quarter ?: '—' }}@if ($t->month) / {{ $t->month }}@endif {{ $sLabel }}
No stories match this filter.