@props([ 'column' => [], 'cell' => null, ]) @php $cell = is_array($cell) ? $cell : ['value' => $cell]; $type = $cell['type'] ?? $column['type'] ?? 'text'; $value = $cell['value'] ?? null; $label = $cell['label'] ?? $value; $variant = $cell['variant'] ?? $column['variant'] ?? 'default'; @endphp @switch($type) @case('link') @if (! empty($cell['url'])) {{ $label ?: '-' }} @else {{ $label ?: '-' }} @endif @break @case('tag') {{ $label ?: '-' }} @break @case('status') {{ $label ?: '-' }} @break @case('multiselect') @forelse ((array) $value as $item) @php $itemLabel = is_array($item) ? ($item['label'] ?? $item['value'] ?? '') : $item; $itemVariant = is_array($item) ? ($item['variant'] ?? 'default') : 'default'; @endphp {{ $itemLabel }} @empty - @endforelse @break @case('currency') @php $currency = $cell['currency'] ?? $column['currency'] ?? 'EUR'; $decimals = $cell['decimals'] ?? $column['decimals'] ?? 2; @endphp @if (is_numeric($value)) {{ number_format((float) $value, $decimals, '.', ',') }} {{ $currency }} @else - @endif @break @case('number') @php $decimals = $cell['decimals'] ?? $column['decimals'] ?? 0; $formatted = $cell['formatted'] ?? null; @endphp @if (is_numeric($value)) {{ filled($formatted) ? $formatted : number_format((float) $value, $decimals, '.', ',') }} @else - @endif @break @case('date') @if ($value) {{ $cell['formatted'] ?? \Illuminate\Support\Carbon::parse($value)->format($cell['format'] ?? 'd/m/Y') }} @else - @endif @break @case('checkbox') @break @case('sparkline') @php $values = collect((array) $value)->filter(fn ($item) => is_numeric($item))->values(); $min = $values->min() ?? 0; $max = $values->max() ?? 0; $range = max(1, $max - $min); $count = max(1, $values->count() - 1); $points = $values->map(function ($item, $index) use ($min, $range, $count) { $x = ($index / $count) * 96; $y = 26 - ((($item - $min) / $range) * 22); return round($x, 2).','.round($y, 2); })->implode(' '); @endphp @if ($values->isNotEmpty()) @else - @endif @break @default {{ filled($label) ? $label : '-' }} @endswitch