@php // Breadcrumbs come from the route name, e.g. orders.show -> Orders › $routeName = request()->route()?->getName() ?? ''; $prefix = explode('.', $routeName)[0] ?? ''; $sections = [ 'clients' => ['Clients', 'clients.index'], 'orders' => ['Orders', 'orders.index'], 'vendors' => ['Vendors', 'vendors.index'], 'vendor-bills' => ['Vendor bills', 'vendor-bills.index'], 'vendor-assignments' => ['Assignments', 'vendor-assignments.index'], 'my-work' => ['My work', 'my-work.index'], 'payments' => ['Payments', 'payments.index'], 'expenses' => ['Expenses', 'expenses.index'], 'expense-categories' => ['Expense categories', 'expense-categories.index'], 'reports' => ['Reports', null], 'ledger' => ['Ledger', null], 'users' => ['Users', 'users.index'], 'roles' => ['Roles', 'roles.index'], ]; $crumbs = []; if (isset($sections[$prefix])) { [$secLabel, $secRoute] = $sections[$prefix]; $isIndex = str_ends_with($routeName, '.index'); $crumbs[] = [$secLabel, $isIndex || ! $secRoute ? null : route($secRoute)]; if (! $isIndex || $prefix === 'ledger') { $crumbs[] = [trim(View::yieldContent('title')), null]; } } // Phone app bar: detail and form pages get a back arrow, top-level pages show the logo. $pageTitle = trim(View::yieldContent('title')) ?: 'Dashboard'; $isDetail = in_array(last(explode('.', $routeName)), ['show', 'create', 'edit', 'invoice'], true); $backUrl = ($crumbs[0][1] ?? null) ?: match (true) { str_starts_with($routeName, 'ledger.journal') => route('ledger.journal.index'), str_starts_with($routeName, 'ledger.accounts') => route('ledger.accounts.index'), default => route('dashboard'), }; $creates = quick_create_actions(); @endphp
{{-- desktop: collapse the sidebar --}} {{-- phone: back arrow on detail pages, logo elsewhere --}} @if ($isDetail) @else @endif
{{ $pageTitle }}
{{-- search: a box on desktop, a full-screen overlay on phones --}} @if ($creates) @endif