Files
trackbugs/resources/views/layouts/navigation.blade.php
T

135 lines
8.5 KiB
PHP
Raw Normal View History

2026-03-19 19:25:51 +02:00
<nav x-data="{ open: false }" class="bg-white border-b border-gray-100">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="flex justify-between h-16">
<div class="flex">
<div class="shrink-0 flex items-center">
2026-03-19 19:40:49 +02:00
<a href="{{ route('dashboard') }}" class="text-lg font-bold text-gray-800">
ErrorTracker
2026-03-19 19:25:51 +02:00
</a>
</div>
<div class="hidden space-x-8 sm:-my-px sm:ms-10 sm:flex">
<x-nav-link :href="route('dashboard')" :active="request()->routeIs('dashboard')">
2026-03-19 19:40:49 +02:00
Dashboard
2026-03-19 19:25:51 +02:00
</x-nav-link>
2026-03-19 19:40:49 +02:00
<x-nav-link :href="route('projects.index')" :active="request()->routeIs('projects.*')">
Projects
</x-nav-link>
@if(isset($currentProject))
<x-nav-link :href="route('projects.issues.index', $currentProject)" :active="request()->routeIs('projects.issues.*')">
Issues
</x-nav-link>
2026-03-19 19:47:06 +02:00
<x-nav-link :href="route('projects.alerts.edit', $currentProject)" :active="request()->routeIs('projects.alerts.*')">
Alerts
</x-nav-link>
2026-03-21 16:13:38 +02:00
<x-nav-link :href="route('projects.members.index', $currentProject)" :active="request()->routeIs('projects.members.*')">
Team
</x-nav-link>
2026-03-19 19:40:49 +02:00
<x-nav-link :href="route('projects.settings', $currentProject)" :active="request()->routeIs('projects.settings')">
Settings
</x-nav-link>
@endif
2026-03-19 19:25:51 +02:00
</div>
</div>
2026-03-19 19:40:49 +02:00
<div class="hidden sm:flex sm:items-center sm:ms-6 sm:gap-4">
@php
$userProjects = Auth::user()->projects()->orderBy('name')->get();
@endphp
@if($userProjects->count() > 0)
<x-dropdown align="right" width="48">
<x-slot name="trigger">
<button class="inline-flex items-center gap-2 px-3 py-2 text-sm font-medium text-gray-600 bg-gray-50 rounded-md hover:bg-gray-100 transition">
<svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M2.25 12.75V12A2.25 2.25 0 0 1 4.5 9.75h15A2.25 2.25 0 0 1 21.75 12v.75m-8.69-6.44-2.12-2.12a1.5 1.5 0 0 0-1.061-.44H4.5A2.25 2.25 0 0 0 2.25 6v12a2.25 2.25 0 0 0 2.25 2.25h15A2.25 2.25 0 0 0 21.75 18V9a2.25 2.25 0 0 0-2.25-2.25h-5.379a1.5 1.5 0 0 1-1.06-.44Z" /></svg>
{{ isset($currentProject) ? $currentProject->name : 'Select Project' }}
<svg class="fill-current h-4 w-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd" /></svg>
</button>
</x-slot>
<x-slot name="content">
@foreach($userProjects as $p)
<x-dropdown-link :href="route('projects.issues.index', $p)">
{{ $p->name }}
</x-dropdown-link>
@endforeach
<hr class="my-1">
<x-dropdown-link :href="route('projects.create')">
+ New Project
</x-dropdown-link>
</x-slot>
</x-dropdown>
@endif
2026-03-19 19:47:06 +02:00
{{-- Notification Bell --}}
@php($unreadCount = Auth::user()->unreadNotifications()->count())
<a href="{{ route('notifications.index') }}" class="relative p-2 text-gray-400 hover:text-gray-600 transition" title="Notifications">
<svg class="w-5 h-5" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M14.857 17.082a23.848 23.848 0 0 0 5.454-1.31A8.967 8.967 0 0 1 18 9.75V9A6 6 0 0 0 6 9v.75a8.967 8.967 0 0 1-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 0 1-5.714 0m5.714 0a3 3 0 1 1-5.714 0" />
</svg>
@if($unreadCount > 0)
<span class="absolute -top-0.5 -right-0.5 inline-flex items-center justify-center px-1.5 py-0.5 text-[10px] font-bold leading-none text-white bg-red-500 rounded-full">
{{ $unreadCount > 99 ? '99+' : $unreadCount }}
</span>
@endif
</a>
2026-03-19 19:25:51 +02:00
<x-dropdown align="right" width="48">
<x-slot name="trigger">
<button class="inline-flex items-center px-3 py-2 border border-transparent text-sm leading-4 font-medium rounded-md text-gray-500 bg-white hover:text-gray-700 focus:outline-none transition ease-in-out duration-150">
<div>{{ Auth::user()->name }}</div>
<div class="ms-1">
2026-03-19 19:40:49 +02:00
<svg class="fill-current h-4 w-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd" /></svg>
2026-03-19 19:25:51 +02:00
</div>
</button>
</x-slot>
<x-slot name="content">
2026-03-19 19:40:49 +02:00
<x-dropdown-link :href="route('profile.edit')">Profile</x-dropdown-link>
2026-03-19 19:25:51 +02:00
<form method="POST" action="{{ route('logout') }}">
@csrf
2026-03-19 19:40:49 +02:00
<x-dropdown-link :href="route('logout')" onclick="event.preventDefault(); this.closest('form').submit();">
Log Out
2026-03-19 19:25:51 +02:00
</x-dropdown-link>
</form>
</x-slot>
</x-dropdown>
</div>
<div class="-me-2 flex items-center sm:hidden">
<button @click="open = ! open" class="inline-flex items-center justify-center p-2 rounded-md text-gray-400 hover:text-gray-500 hover:bg-gray-100 focus:outline-none focus:bg-gray-100 focus:text-gray-500 transition duration-150 ease-in-out">
<svg class="h-6 w-6" stroke="currentColor" fill="none" viewBox="0 0 24 24">
<path :class="{'hidden': open, 'inline-flex': ! open }" class="inline-flex" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
<path :class="{'hidden': ! open, 'inline-flex': open }" class="hidden" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
</svg>
</button>
</div>
</div>
</div>
<div :class="{'block': open, 'hidden': ! open}" class="hidden sm:hidden">
<div class="pt-2 pb-3 space-y-1">
<x-responsive-nav-link :href="route('dashboard')" :active="request()->routeIs('dashboard')">
2026-03-19 19:40:49 +02:00
Dashboard
</x-responsive-nav-link>
<x-responsive-nav-link :href="route('projects.index')" :active="request()->routeIs('projects.*')">
Projects
2026-03-19 19:25:51 +02:00
</x-responsive-nav-link>
</div>
<div class="pt-4 pb-1 border-t border-gray-200">
<div class="px-4">
<div class="font-medium text-base text-gray-800">{{ Auth::user()->name }}</div>
<div class="font-medium text-sm text-gray-500">{{ Auth::user()->email }}</div>
</div>
<div class="mt-3 space-y-1">
2026-03-19 19:40:49 +02:00
<x-responsive-nav-link :href="route('profile.edit')">Profile</x-responsive-nav-link>
2026-03-19 19:25:51 +02:00
<form method="POST" action="{{ route('logout') }}">
@csrf
2026-03-19 19:40:49 +02:00
<x-responsive-nav-link :href="route('logout')" onclick="event.preventDefault(); this.closest('form').submit();">
Log Out
2026-03-19 19:25:51 +02:00
</x-responsive-nav-link>
</form>
</div>
</div>
</div>
</nav>