Files
ladill-care/resources/views/care/specialty/ambulance/dispatch-card.blade.php
T
isaaccladandCursor ec9eab03a1
Deploy Ladill Care / deploy (push) Successful in 1m7s
Stack board card actions vertically in the footer.
Full-width primary and secondary buttons (Transport, Start, Open)
now sit one above the other instead of side-by-side, so narrow
dispatch and queue columns stay readable.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-20 14:26:37 +00:00

78 lines
3.9 KiB
PHP

{{--
Single EMS call card on the ambulance dispatch board.
Stacked layout: ticket badge, patient info, then an action footer
narrow columns never push buttons over the text.
--}}
@php
$appointment = $visit->appointment;
$patient = $visit->patient;
$openUrl = route('care.specialty.workspace', ['module' => 'ambulance', 'visit' => $visit]);
$ticketNumber = $appointment?->queue_ticket_number;
$reason = $appointment?->reason;
$nextStage = $column['next_stage'] ?? null;
$nextLabel = $column['next_label'] ?? null;
$isCompleted = ($column['key'] ?? '') === 'completed';
$showAdvance = $canAdvanceStage && $nextStage && $nextLabel;
@endphp
<article
role="link"
tabindex="0"
data-href="{{ $openUrl }}"
onclick="if (! event.target.closest('a, button, form, input, select, textarea, label')) { window.location.href = this.dataset.href }"
onkeydown="if ((event.key === 'Enter' || event.key === ' ') && ! event.target.closest('a, button, form, input, select, textarea, label')) { event.preventDefault(); window.location.href = this.dataset.href }"
@class([
'group relative flex cursor-pointer flex-col rounded-xl border bg-white transition hover:shadow-sm',
'border-amber-200' => ($column['key'] ?? '') === 'check_in',
'border-indigo-200' => ($column['key'] ?? '') === 'dispatch',
'border-sky-200' => ($column['key'] ?? '') === 'on_scene',
'border-violet-200' => ($column['key'] ?? '') === 'transport',
'border-emerald-200' => ($column['key'] ?? '') === 'handover',
'border-slate-100 opacity-80' => $isCompleted,
])
>
<div class="min-w-0 space-y-2 px-3 pb-2.5 pt-3">
<div class="flex items-center justify-between gap-2">
@if ($ticketNumber)
<span class="inline-flex rounded-md bg-slate-100 px-2 py-0.5 font-mono text-[11px] font-bold tracking-wide text-slate-700">{{ $ticketNumber }}</span>
@else
<span></span>
@endif
<span @class([
'h-2 w-2 shrink-0 rounded-full',
'bg-amber-400' => ($column['key'] ?? '') === 'check_in',
'bg-indigo-400' => ($column['key'] ?? '') === 'dispatch',
'bg-sky-400' => ($column['key'] ?? '') === 'on_scene',
'bg-violet-400' => ($column['key'] ?? '') === 'transport',
'bg-emerald-400' => ($column['key'] ?? '') === 'handover',
'bg-slate-300' => $isCompleted,
])></span>
</div>
<div class="min-w-0">
<p class="truncate text-sm font-semibold text-slate-900">{{ $patient?->fullName() ?? 'Patient' }}</p>
<p class="mt-0.5 truncate text-xs text-slate-500">
{{ $patient?->patient_number ?? '—' }}
@if ($reason)
<span class="text-slate-300"> · </span>{{ \Illuminate\Support\Str::limit($reason, 48) }}
@endif
</p>
@if ($appointment?->practitioner?->name)
<p class="mt-0.5 truncate text-xs text-slate-400">{{ $appointment->practitioner->name }}</p>
@endif
</div>
</div>
<div class="relative z-10 flex flex-col gap-1.5 border-t border-slate-900/5 px-3 py-2" @click.stop>
@if ($showAdvance)
<form method="POST" action="{{ route($specialtyStageRoute, $visit) }}">
@csrf
<input type="hidden" name="stage" value="{{ $nextStage }}">
<button type="submit" class="w-full whitespace-nowrap rounded-lg bg-slate-900 px-2.5 py-1.5 text-center text-xs font-semibold text-white hover:bg-slate-800">
{{ $nextLabel }}
</button>
</form>
@endif
<a href="{{ $openUrl }}" class="w-full rounded-lg border border-slate-200 px-2.5 py-1.5 text-center text-xs font-medium text-slate-600 hover:bg-slate-50">Open</a>
</div>
</article>