{{-- ShiftBridge Table Component Usage: No data available {{ $rows->links() }} Props: - headers: array (required) - [['key' => 'name', 'label' => 'Name', 'sortable' => true, 'width' => '200px']] - rows: array/Collection (required) - data rows - selectable: boolean (enable row selection) - selected: array - selected row IDs - striped: boolean (striped rows) - hover: boolean (hover effect) - compact: boolean (compact/dense layout) - loading: boolean (show loading overlay) - empty: string (empty state message) - id: string (table ID) --}} @props([ 'headers' => [], 'rows' => [], 'selectable' => false, 'selected' => [], 'striped' => false, 'hover' => true, 'compact' => false, 'loading' => false, 'empty' => 'No data available', 'id' => null, ]) @php // Generate table ID $tableId = $id ?? 'table-' . uniqid(); // Normalize headers $normalizedHeaders = []; foreach ($headers as $key => $header) { if (is_string($header)) { $normalizedHeaders[] = [ 'key' => $key, 'label' => $header, 'sortable' => false, 'width' => null, 'align' => 'left', ]; } else { $normalizedHeaders[] = [ 'key' => $header['key'] ?? $key, 'label' => $header['label'] ?? '', 'sortable' => $header['sortable'] ?? false, 'width' => $header['width'] ?? null, 'align' => $header['align'] ?? 'left', ]; } } // Row classes $rowClasses = ''; if ($striped) { $rowClasses .= '[&_tr:nth-child(even)]:bg-slate-50/50 '; } if ($hover) { $rowClasses .= '[&_tr:hover]:bg-[var(--sb-primary)]/5 '; } // Cell padding $cellPadding = $compact ? 'px-3 py-2' : 'px-4 py-3'; // Alignment classes $alignClasses = [ 'left' => 'text-left', 'center' => 'text-center', 'right' => 'text-right', ]; @endphp
{{-- Loading Overlay --}} @if($loading)
Loading...
@endif
{{-- Header --}} {{-- Select All Checkbox --}} @if($selectable) @endif @foreach($normalizedHeaders as $header) @endforeach {{-- Body --}} @forelse($rows as $rowIndex => $row) @php $rowId = is_object($row) ? ($row->id ?? $rowIndex) : ($row['id'] ?? $rowIndex); $isSelected = in_array($rowId, $selected); @endphp {{-- Row Checkbox --}} @if($selectable) @endif @foreach($normalizedHeaders as $header) @endforeach @empty @endforelse
@if($header['sortable']) @else {{ $header['label'] }} @endif
@if(isset(${'cell' . $header['key']})) {{ ${'cell' . $header['key']}($row) }} @else @php $value = is_object($row) ? ($row->{$header['key']} ?? '') : ($row[$header['key']] ?? ''); @endphp {{ $value }} @endif
{{ $emptySlot ?? $empty }}
{{-- Pagination Slot --}} @if(isset($pagination))
{{ $pagination }}
@endif
{{-- Selection Script --}} @if($selectable) @endif