@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