Align Care header with other Ladill apps.
Deploy Ladill Care / deploy (push) Successful in 1m0s

Add Afia and notifications to the top bar, remove the duplicate desktop page
title, wire notification and AI routes, and fix mobile nav notification links.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
isaacclad
2026-06-29 12:53:34 +00:00
co-authored by Cursor
parent 5411b10694
commit eaf6da5cdb
12 changed files with 378 additions and 15 deletions
@@ -44,9 +44,9 @@
'homeActive' => request()->routeIs('care.dashboard'),
'searchUrl' => route('care.patients.index'),
'searchActive' => request()->routeIs('care.patients.*'),
'notificationsUrl' => route('care.dashboard'),
'notificationsActive' => false,
'unreadUrl' => route('care.dashboard'),
'notificationsUrl' => route('notifications.index'),
'notificationsActive' => request()->routeIs('notifications.*'),
'unreadUrl' => route('notifications.unread'),
'profileActive' => false,
'profileName' => $navUser?->name ?? '',
'profileSubtitle' => $navUser?->email ?? '',
@@ -55,6 +55,7 @@
'initials' => $navInitials !== '' ? $navInitials : 'U',
])
@endauth
@include('partials.afia')
@include('partials.wallet-topup-modal', ['openOnLoad' => (bool) session('topup_required')])
</body>
</html>
+7 -7
View File
@@ -1,15 +1,15 @@
@php
$afiaGreeting = "Hi, I'm Afia 👋 Ask me about visitor check-in, kiosks, hosts, badges, devices, or setting up your reception desk";
$afiaGreeting = "Hi, I'm Afia 👋 Ask me about patients, appointments, the queue, consultations, lab requests, prescriptions, or billing";
$afiaSuggestions = [
'How do I set up a visitor kiosk?',
'How do I check a visitor in?',
'Where do I add reception desks?',
'How do hosts approve visits?',
'How do I register a new patient?',
'How does the patient queue work?',
'How do I start a consultation?',
'How do I request lab investigations?',
];
@endphp
{{-- Afia Ladill AI assistant slide-over. Opened via $dispatch('afia-open'). --}}
<div x-data="afia({
chatUrl: '{{ route('frontdesk.ai.chat') }}',
chatUrl: '{{ route('care.ai.chat') }}',
csrf: '{{ csrf_token() }}',
greeting: @js($afiaGreeting),
suggestions: @js($afiaSuggestions),
@@ -48,7 +48,7 @@
</span>
<div class="leading-tight">
<p class="text-sm font-semibold text-slate-900">Afia</p>
<p class="text-[11px] text-slate-400">Frontdesk assistant</p>
<p class="text-[11px] text-slate-400">Care assistant</p>
</div>
</div>
<div class="flex items-center gap-1">
@@ -1,5 +1,5 @@
@php
$title = $mobileTopbarTitle ?? 'Ladill';
$title = $heading ?? $mobileTopbarTitle ?? 'Ladill Care';
@endphp
<div class="min-w-0 flex-1 lg:hidden">
<h1 class="truncate text-base font-semibold text-slate-900">{{ $title }}</h1>
@@ -13,6 +13,10 @@
$showUserHeader = $showUser ?? true;
@endphp
@includeIf('partials.afia-button', ['compact' => true])
@includeIf('partials.notification-dropdown')
@include('partials.launcher')
@includeIf('partials.topbar-widgets-mid')
+3 -4
View File
@@ -9,9 +9,7 @@
<svg class="h-6 w-6" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"/></svg>
</button>
@include('partials.mobile-topbar-title')
<h1 class="hidden text-sm font-semibold text-slate-700 lg:block">{{ $heading ?? 'Ladill Care' }}</h1>
@include('partials.mobile-topbar-title', ['heading' => $heading ?? null])
@if (auth()->check() && app(\App\Services\Care\CarePermissions::class)->can(
app(\App\Services\Care\OrganizationResolver::class)->memberFor(auth()->user()), 'patients.view'))
@@ -22,7 +20,8 @@
<svg class="pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-slate-400" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z"/></svg>
<input x-ref="search" type="search" name="q" value="{{ request('q') }}"
placeholder="Search patients…"
class="w-full rounded-xl border border-slate-200 bg-slate-50 py-2 pl-9 pr-10 text-sm text-slate-700 placeholder-slate-400 transition focus:border-sky-300 focus:bg-white focus:ring-2 focus:ring-sky-100 focus:outline-none">
class="w-full rounded-xl border border-slate-200 bg-slate-50 py-2 pl-9 pr-10 text-sm text-slate-700 placeholder-slate-400 transition focus:border-indigo-300 focus:bg-white focus:ring-2 focus:ring-indigo-100 focus:outline-none">
<kbd class="pointer-events-none absolute right-3 top-1/2 hidden -translate-y-1/2 rounded-md border border-slate-200 bg-white px-1.5 py-0.5 text-[10px] font-medium text-slate-400 sm:inline-block">/</kbd>
</form>
@endif
</div>