40 lines
2.0 KiB
Twig
40 lines
2.0 KiB
Twig
{# Plain nav instead of myep's knp-menu builder: a handful of links does not justify the
|
|
indirection. Active state is a prefix match on the current route name, which mirrors what
|
|
myep's menu matcher does with its 'routes' extras. #}
|
|
{% set current_route = app.request.attributes.get('_route') %}
|
|
{% set items = [
|
|
{ route: 'app_dashboard', label: 'Übersicht', icon: 'lucide:layout-grid' },
|
|
{ route: 'app_booking', label: 'Meine Buchungen', icon: 'lucide:calendar-days' },
|
|
] %}
|
|
|
|
<div class="min-h-full flex grow flex-col gap-y-5 lg:border-r border-gray-200 bg-white md:pr-6">
|
|
<nav class="flex flex-1 flex-col">
|
|
<ul role="list" class="space-y-1">
|
|
{% for item in items %}
|
|
{% set is_active = current_route starts with item.route %}
|
|
<li>
|
|
<a href="{{ path(item.route) }}"
|
|
class="group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold {{ is_active ? 'bg-gray-100 text-gray-900' : 'text-gray-700 hover:bg-gray-50' }}">
|
|
{{ ux_icon(item.icon, { class: 'h-5 w-5 shrink-0 ' ~ (is_active ? 'text-gray-600' : 'text-gray-400') }) }}
|
|
<span class="flex-1">{{ item.label }}</span>
|
|
</a>
|
|
</li>
|
|
{% endfor %}
|
|
</ul>
|
|
|
|
{% if app.user %}
|
|
<div class="mt-auto pt-6 border-t border-gray-200">
|
|
<div class="px-2 pb-2 text-sm">
|
|
<div class="font-semibold">{{ app.user.name }}</div>
|
|
<div class="text-gray-500 truncate">{{ app.user.email }}</div>
|
|
</div>
|
|
<a href="{{ path('app_logout') }}"
|
|
class="group flex gap-x-3 rounded-md p-2 text-sm leading-6 font-semibold text-gray-700 hover:bg-gray-50">
|
|
{{ ux_icon('lucide:log-out', { class: 'h-5 w-5 shrink-0 text-gray-400' }) }}
|
|
<span class="flex-1">Abmelden</span>
|
|
</a>
|
|
</div>
|
|
{% endif %}
|
|
</nav>
|
|
</div>
|