137 lines
7.9 KiB
HTML
137 lines
7.9 KiB
HTML
<nav class="bg-white border-gray-200 dark:bg-gray-900 print:hidden">
|
|
<div class="flex flex-wrap items-center justify-between mx-auto p-4">
|
|
<a routerLink="/home" class="flex items-center space-x-3 rtl:space-x-reverse">
|
|
<img src="assets/images/header-logo.png" class="h-8" alt="Flowbite Logo" />
|
|
</a>
|
|
<div class="flex items-center md:order-2 space-x-3 rtl:space-x-reverse">
|
|
<!-- Filter button -->
|
|
@if(isFilterUrl()){
|
|
<button
|
|
type="button"
|
|
#triggerButton
|
|
(click)="openModal()"
|
|
id="filterDropdownButton"
|
|
class="max-sm:hidden px-4 py-2 text-sm font-medium text-gray-900 bg-white border border-gray-200 rounded-lg hover:bg-gray-100 hover:text-blue-700 dark:bg-gray-800 dark:text-gray-400 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700"
|
|
>
|
|
<i class="fas fa-filter mr-2"></i>Filter ({{ getNumberOfFiltersSet() }})
|
|
</button>
|
|
<!-- Sort button -->
|
|
<div class="relative">
|
|
<button
|
|
type="button"
|
|
id="sortDropdownButton"
|
|
class="max-sm:hidden px-4 py-2 text-sm font-medium bg-white border border-gray-200 rounded-lg hover:bg-gray-100 hover:text-blue-700 dark:bg-gray-800 dark:text-gray-400 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700"
|
|
(click)="toggleSortDropdown()"
|
|
[ngClass]="{ 'text-blue-500': selectOptions.getSortByOption(criteria?.sortBy) !== 'Sort', 'text-gray-900': selectOptions.getSortByOption(criteria?.sortBy) === 'Sort' }"
|
|
>
|
|
<i class="fas fa-sort mr-2"></i>{{ selectOptions.getSortByOption(criteria?.sortBy) }}
|
|
</button>
|
|
|
|
<!-- Sort options dropdown -->
|
|
<div *ngIf="sortDropdownVisible" class="absolute right-0 z-50 w-48 md:mt-2 max-md:mt-20 max-md:mr-[-2.5rem] bg-white border border-gray-200 rounded-lg drop-shadow-custom-bg dark:bg-gray-800 dark:border-gray-600">
|
|
<ul class="py-1 text-sm text-gray-700 dark:text-gray-200">
|
|
@for(item of sortByOptions; track item){
|
|
<li (click)="sortBy(item.value)" class="block px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-700 cursor-pointer">{{ item.selectName ? item.selectName : item.name }}</li>
|
|
}
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
}
|
|
<!-- Menu Button ohne Flowbite -->
|
|
<div class="relative">
|
|
<button type="button" class="relative inline-flex justify-center items-center w-8 h-8 rounded-full bg-gray-400 focus:ring-4 focus:ring-gray-300 dark:focus:ring-gray-600" id="user-menu-button" aria-expanded="false" (click)="toggleUserMenu()">
|
|
<span class="sr-only">Open user menu</span>
|
|
@if(isProfessional || (authService.isAdmin() | async) && user?.hasProfile){
|
|
<img class="w-8 h-8 rounded-full object-cover" src="{{ profileUrl }}" alt="user photo" />
|
|
} @else {
|
|
<div class="flex justify-center items-center w-full h-full">
|
|
<div class="w-4 h-3 flex flex-col justify-between">
|
|
<span class="block h-0.5 w-full bg-stone-50"></span>
|
|
<span class="block h-0.5 w-full bg-stone-50"></span>
|
|
<span class="block h-0.5 w-full bg-stone-50"></span>
|
|
</div>
|
|
</div>
|
|
}
|
|
</button>
|
|
|
|
<!-- Dropdown menu für eingeloggte Benutzer -->
|
|
@if(user){
|
|
<div
|
|
class="drop-shadow-custom-bg z-10 size-max absolute right-0 top-full mt-1 text-base list-none bg-white divide-y divide-gray-100 rounded-lg shadow dark:bg-gray-700 dark:divide-gray-600"
|
|
id="user-menu-dropdown"
|
|
[ngClass]="{ hidden: !userMenuVisible }"
|
|
>
|
|
<div class="px-4 py-3">
|
|
<span class="block text-sm text-gray-900 dark:text-white">Welcome, {{ user.firstname }} </span>
|
|
<span class="block text-sm text-gray-500 truncate dark:text-gray-400">{{ user.email }}</span>
|
|
</div>
|
|
<ul class="py-2" aria-labelledby="user-menu-button">
|
|
<li>
|
|
<a routerLink="/account" (click)="userMenuVisible = false" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 dark:hover:bg-gray-600 dark:text-gray-200 dark:hover:text-white">Account</a>
|
|
</li>
|
|
@if(isProfessional || (authService.isAdmin() | async) && user?.hasProfile){
|
|
<li>
|
|
<a routerLink="/createBusinessListing" (click)="userMenuVisible = false" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 dark:hover:bg-gray-600 dark:text-gray-200 dark:hover:text-white">Create Listing</a>
|
|
</li>
|
|
}
|
|
<li>
|
|
<a routerLink="/myListings" (click)="userMenuVisible = false" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 dark:hover:bg-gray-600 dark:text-gray-200 dark:hover:text-white">My Listings</a>
|
|
</li>
|
|
<li>
|
|
<a routerLink="/myFavorites" (click)="userMenuVisible = false" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 dark:hover:bg-gray-600 dark:text-gray-200 dark:hover:text-white">My Favorites</a>
|
|
</li>
|
|
<li>
|
|
<a routerLink="/logout" (click)="userMenuVisible = false" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 dark:hover:bg-gray-600 dark:text-gray-200 dark:hover:text-white">Logout</a>
|
|
</li>
|
|
</ul>
|
|
@if(authService.isAdmin() | async){
|
|
<ul class="py-2">
|
|
<li>
|
|
<a routerLink="admin/users" (click)="userMenuVisible = false" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 dark:hover:bg-gray-600 dark:text-gray-200 dark:hover:text-white">Users (Admin)</a>
|
|
</li>
|
|
</ul>
|
|
}
|
|
</div>
|
|
} @else {
|
|
<!-- Dropdown menu für nicht eingeloggte Benutzer -->
|
|
<div
|
|
class="drop-shadow-custom-bg z-10 size-max absolute right-0 top-full mt-1 text-base list-none bg-white divide-y divide-gray-100 rounded-lg shadow dark:bg-gray-700 dark:divide-gray-600"
|
|
id="user-menu-dropdown"
|
|
[ngClass]="{ hidden: !userMenuVisible }"
|
|
>
|
|
<ul class="py-2" aria-labelledby="user-menu-button">
|
|
<li>
|
|
<a routerLink="/login" [queryParams]="{ mode: 'login' }" (click)="userMenuVisible = false" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 dark:hover:bg-gray-600 dark:text-gray-200 dark:hover:text-white">Log In</a>
|
|
</li>
|
|
<li>
|
|
<a routerLink="/login" [queryParams]="{ mode: 'register' }" (click)="userMenuVisible = false" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 dark:hover:bg-gray-600 dark:text-gray-200 dark:hover:text-white">Sign Up</a>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- Mobile filter button -->
|
|
<div class="md:hidden flex justify-center pb-4">
|
|
<button
|
|
(click)="openModal()"
|
|
type="button"
|
|
id="filterDropdownMobileButton"
|
|
class="w-full mx-4 px-4 py-2 text-sm font-medium text-gray-900 bg-white border border-gray-200 rounded-lg hover:bg-gray-100 hover:text-blue-700 focus:ring-2 focus:ring-blue-700 focus:text-blue-700 dark:bg-gray-800 dark:text-gray-400 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700"
|
|
>
|
|
<i class="fas fa-filter mr-2"></i>Filter ({{ getNumberOfFiltersSet() }})
|
|
</button>
|
|
<!-- Sorting -->
|
|
<button
|
|
(click)="toggleSortDropdown()"
|
|
type="button"
|
|
id="sortDropdownMobileButton"
|
|
class="mx-4 w-1/2 px-4 py-2 text-sm font-medium bg-white border border-gray-200 rounded-lg hover:bg-gray-100 hover:text-blue-700 focus:ring-2 focus:ring-blue-700 focus:text-blue-700 dark:bg-gray-800 dark:text-gray-400 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700"
|
|
[ngClass]="{ 'text-blue-500': selectOptions.getSortByOption(criteria?.sortBy) !== 'Sort', 'text-gray-900': selectOptions.getSortByOption(criteria?.sortBy) === 'Sort' }"
|
|
>
|
|
<i class="fas fa-sort mr-2"></i>{{ selectOptions.getSortByOption(criteria?.sortBy) }}
|
|
</button>
|
|
</div>
|
|
</nav>
|