{{ trans('welcome.brand') }}
    @php $user = Auth::user(); $current = $currentRouteName ?? \Illuminate\Support\Facades\Route::currentRouteName(); // visibility check: empty "visible" array means visible to everyone $isVisible = function ($item) use ($user) { $visible = $item['visible'] ?? []; if (empty($visible)) { return true; } if (!$user) { return false; } return in_array($user->role, $visible); }; $requestPath = trim(request()->path(), '/'); // helper to match wildcard patterns like 'users/*' or '*/users/*' $matchesPattern = function ($patterns) use ($requestPath) { foreach ((array) $patterns as $pat) { $pat = trim($pat, '/'); // preg_quote will escape '*' as '\*', so replace that with '.*' to implement wildcard $quoted = preg_quote($pat, '/'); $p = str_replace('\\*', '.*', $quoted); if (preg_match('/^' . $p . '$/i', $requestPath)) { return true; } } return false; }; // helper to recursively check if any child at any level is active $hasActiveChild = function ($item) use (&$hasActiveChild, $current, $matchesPattern) { if (!empty($item['children'])) { foreach ($item['children'] as $child) { if (!empty($child['route']) && $child['route'] === $current) { return true; } if (!empty($child['match']) && $matchesPattern($child['match'])) { return true; } if ($hasActiveChild($child)) { return true; } } } return false; }; $isActive = function ($item) use ($current, $matchesPattern, $hasActiveChild) { // exact route name match if (!empty($item['route']) && $item['route'] === $current) { return true; } // match list can contain wildcard path patterns if (!empty($item['match'])) { if ($matchesPattern($item['match'])) { return true; } } // check if any child at any level is active return $hasActiveChild($item); }; @endphp @foreach ($sidebarItems as $item) @continue(!$isVisible($item)) @php $hasChildren = !empty($item['children']); $active = $isActive($item); $liClass = 'sidebar-item' . ($active && $hasChildren ? ' open' : ''); $linkClass = 'sidebar-link flex items-center p-3 rounded-lg relative cursor-pointer' . ($active ? ' active' : ''); // determine href safely - if item has children, don't use route (make it toggle only) $href = '#'; if ( !$hasChildren && !empty($item['route']) && \Illuminate\Support\Facades\Route::has($item['route']) ) { $href = route($item['route']); } @endphp
  • @if (!empty($item['icon'])) @endif
    {{ $item['name'] }} {{ $item['name'] }} @if ($hasChildren) @endif
    @if ($hasChildren) @php // recursive function to render nested children $renderChildren = function ($children, $level = 1) use ( &$renderChildren, $isVisible, $current, $matchesPattern, $hasActiveChild, ) { echo '
      '; foreach ($children as $child) { if (!$isVisible($child)) { continue; } $childActive = false; if (!empty($child['route']) && $child['route'] === $current) { $childActive = true; } if (!$childActive && !empty($child['match'])) { if (isset($matchesPattern) && $matchesPattern($child['match'])) { $childActive = true; } } // Check if this child has any active descendants if (!$childActive) { $childActive = $hasActiveChild($child); } // Only use route if the child has no children (is a leaf item) $childHref = '#'; if ( empty($child['children']) && !empty($child['route']) && \Illuminate\Support\Facades\Route::has($child['route']) ) { $childHref = route($child['route']); } $childHasChildren = !empty($child['children']); $childClass = 'sub-link level-' . $level . ($childActive ? ' active' : ''); $leftPadding = 32 + $level * 16; // increase padding for each level echo '
    • '; if ($childHasChildren) { $accordionClass = 'accordion-item level-' . $level . ($childActive ? ' open' : ''); echo '
      '; echo ''; echo '' . e($child['name']) . ''; echo ''; echo ''; $renderChildren($child['children'], $level + 1); echo '
      '; } else { echo ''; echo '' . e($child['name']) . ''; echo ''; } echo '
    • '; } echo '
    '; }; @endphp {!! $renderChildren($item['children']) !!} @endif
  • @endforeach
@php $user = Auth::user(); $initial = strtoupper(substr(trim($user->name ?? ''), 0, 1)); $photo = $user->profile_photo ?? null; $photoUrl = null; if ($photo) { // If stored value is a full URL use it, otherwise assume it's a storage path if (filter_var($photo, FILTER_VALIDATE_URL)) { $photoUrl = $photo; } else { $photoUrl = asset('storage/' . ltrim($photo, '/')); } } @endphp @if ($photoUrl) {{ $user->name }} @else Admin @endif

{{ $user->name }}

{{ $user->email }}

@csrf