@props([
'client',
'showActions' => true,
'showProductColumns' => true,
'liveQuantities' => false,
'gridTemplateColumns' => null,
'gridMinWidth' => null,
'logoClass' => 'h-14 w-14',
])
@php
$products = $client->resolvedProducts();
$daysUntilRenewal = $client->renewal_date ? $client->daysUntilRenewal() : null;
$isOverdue = $daysUntilRenewal !== null && $daysUntilRenewal < 0;
$isDueToday = $daysUntilRenewal === 0;
$productCount = count($products);
$clientCol = 'minmax(10rem, 1.5fr)';
$renewalCol = 'minmax(12rem, 1.55fr)';
$productCol = 'minmax(6.5rem, 1fr)';
$actionCol = 'minmax(7.25rem, 8.75rem)';
if ($gridTemplateColumns !== null) {
$resolvedGridTemplateColumns = $gridTemplateColumns;
$resolvedGridMinWidth = $gridMinWidth;
} else {
$gridColumns = [$clientCol, $renewalCol];
if ($showProductColumns) {
if ($productCount > 0) {
foreach ($products as $_product) {
$gridColumns[] = $productCol;
$gridColumns[] = $productCol;
}
} else {
$gridColumns[] = 'minmax(8rem, 1fr)';
}
}
if ($showActions) {
$gridColumns[] = $actionCol;
}
$resolvedGridTemplateColumns = implode(' ', $gridColumns);
$resolvedGridMinWidth = max($showProductColumns ? 800 : 520, count($gridColumns) * 105);
}
@endphp
$gridTemplateColumns !== null,
])
style="grid-template-columns: {{ $resolvedGridTemplateColumns }};@if ($gridTemplateColumns === null || $gridMinWidth !== null) min-width: {{ $resolvedGridMinWidth }}px;@endif"
>
{{-- Client --}}
$gridTemplateColumns !== null,
'min-w-[10rem] px-4 py-5' => $gridTemplateColumns === null,
])>
@if ($client->logo_path)
 }})
@else
$logoClass === 'h-14 w-14', 'text-base' => $logoClass !== 'h-14 w-14'])>
{{ strtoupper(substr($client->name, 0, 1)) }}
@endif
$gridTemplateColumns !== null,
'mt-2 text-sm sm:text-base' => $gridTemplateColumns === null,
])>{{ $client->name }}
{{-- Renewal --}}
$gridTemplateColumns !== null,
'min-w-[12rem] px-3 py-5' => $gridTemplateColumns === null,
])>
! $client->renewal_date,
])>
Days until renewal
$isDueToday || $isOverdue,
])>
@if ($client->renewal_date)
@if ($daysUntilRenewal > 0)
{{ $daysUntilRenewal }} {{ $daysUntilRenewal === 1 ? 'day' : 'days' }}
@elseif ($daysUntilRenewal === 0)
Today
@else
{{ abs($daysUntilRenewal) }} {{ abs($daysUntilRenewal) === 1 ? 'day' : 'days' }} overdue
@endif
@else
Not set
@endif
@if ($showProductColumns)
@if ($productCount > 0)
@foreach ($products as $index => $product)
{{ $product['name'] ?? '—' }}
@endforeach
@else
No products
@endif
@endif
@if ($showActions)
$gridTemplateColumns !== null,
'flex flex-col items-stretch gap-2.5 px-4 py-4' => $gridTemplateColumns === null,
])>
@php
$compactActionBtn = 'inline-flex h-10 min-h-10 min-w-0 flex-1 basis-0 items-center justify-center rounded-full border-2 px-2 text-center text-sm font-semibold leading-none normal-case transition';
$tableActionBtn = 'w-full max-w-[8.75rem] rounded-full text-center font-bold uppercase leading-tight px-2.5 py-2 text-[10px]';
@endphp
$gridTemplateColumns !== null,
$compactActionBtn => $gridTemplateColumns !== null,
'btn-oah rounded-full px-4 py-2.5 text-xs' => $gridTemplateColumns === null,
$tableActionBtn => $gridTemplateColumns === null,
])>
Update
$gridTemplateColumns !== null,
$compactActionBtn => $gridTemplateColumns !== null,
'rounded-full border-2 border-oah-black px-4 py-2.5 text-xs' => $gridTemplateColumns === null,
$tableActionBtn => $gridTemplateColumns === null,
])>
Top up
@endif