source: petify-frontend/src/components/TopNav.vue@ 92e7c7a

Last change on this file since 92e7c7a was 92e7c7a, checked in by veronika-ils <ilioskaveronika@…>, 9 hours ago

Petify fullstack project

  • Property mode set to 100644
File size: 4.2 KB
Line 
1<template>
2 <nav class="navbar navbar-expand-lg navbar-light bg-white border-bottom sticky-top nav-shadow">
3 <div class="container py-2">
4 <!-- Petify logo links to Listings and stays orange -->
5 <RouterLink class="navbar-brand fw-bold brand" to="/">
6 Petify
7 </RouterLink>
8
9 <button
10 class="navbar-toggler"
11 type="button"
12 aria-controls="petifyNavbar"
13 :aria-expanded="isOpen ? 'true' : 'false'"
14 aria-label="Toggle navigation"
15 @click="isOpen = !isOpen"
16 >
17 <span class="navbar-toggler-icon"></span>
18 </button>
19
20 <div
21 id="petifyNavbar"
22 class="navbar-collapse"
23 :class="isOpen ? 'collapse show' : 'collapse'"
24 >
25 <div class="d-flex align-items-center gap-2 ms-auto">
26 <div class="d-flex gap-2">
27 <template v-if="auth.isAuthenticated">
28 <RouterLink v-if="auth.user?.userType === 'CLINIC'" class="btn btn-outline-secondary" to="/clinics">
29 Clinic Dashboard
30 </RouterLink>
31 <template v-if="auth.user?.userType === 'ADMIN'">
32 <RouterLink class="btn btn-admin" to="/admin/clinics">
33 <i class="bi bi-hospital"></i> Clinics
34 </RouterLink>
35 <RouterLink class="btn btn-admin" to="/admin/clients">
36 <i class="bi bi-people"></i> Clients
37 </RouterLink>
38 <RouterLink class="btn btn-admin" to="/admin/listings">
39 <i class="bi bi-card-list"></i> Listings
40 </RouterLink>
41 </template>
42 <RouterLink class="btn btn-outline-secondary" to="/profile">
43 {{ auth.user?.firstName }}'s Profile
44 </RouterLink>
45 <button
46 class="btn btn-outline-secondary"
47 type="button"
48 @click="logout"
49 >
50 Log out
51 </button>
52 </template>
53 <template v-else>
54 <RouterLink class="btn btn-login" to="/login">
55 Log in
56 </RouterLink>
57 <RouterLink class="btn btn-signup" to="/signup">
58 Sign up
59 </RouterLink>
60 </template>
61 </div>
62 </div>
63 </div>
64 </div>
65 </nav>
66</template>
67
68<script setup lang="ts">
69import { ref, watch } from 'vue'
70import { useRoute, useRouter } from 'vue-router'
71import { useAuthStore } from '../stores/auth.ts'
72
73const route = useRoute()
74const router = useRouter()
75const auth = useAuthStore()
76
77const isOpen = ref(false)
78
79watch(
80 () => route.fullPath,
81 () => {
82 isOpen.value = false
83 },
84)
85
86function logout() {
87 auth.logout()
88 router.push('/')
89}
90</script>
91
92<style scoped>
93.nav-shadow {
94 box-shadow: 0 6px 20px rgba(17, 24, 39, 0.06);
95}
96
97/* Petify logo – orange and stable */
98.brand,
99.brand:hover,
100.brand:focus,
101.brand:active,
102.brand:visited {
103 color: #f97316;
104 text-decoration: none;
105 letter-spacing: 0.3px;
106}
107
108/* Login button */
109.btn-login {
110 border-radius: 12px;
111 padding: 0.45rem 1.1rem;
112 border: 1px solid #e5e7eb;
113 background-color: #ffffff;
114 color: #374151;
115 font-weight: 500;
116 transition: all 0.15s ease;
117}
118
119.btn-login:hover {
120 background-color: #f9fafb;
121 border-color: #d1d5db;
122 color: #111827;
123}
124
125/* Sign up button */
126.btn-signup {
127 border-radius: 12px;
128 padding: 0.45rem 1.2rem;
129 background: linear-gradient(135deg, #fb923c, #f97316);
130 border: none;
131 color: #ffffff;
132 font-weight: 600;
133 box-shadow: 0 6px 16px rgba(249, 115, 22, 0.35);
134 transition: all 0.15s ease;
135}
136
137.btn-signup:hover {
138 transform: translateY(-1px);
139 box-shadow: 0 10px 22px rgba(249, 115, 22, 0.45);
140}
141
142/* Admin button */
143.btn-admin {
144 border-radius: 12px;
145 padding: 0.45rem 1rem;
146 background: linear-gradient(135deg, #dc2626 0%, #b91c1c 100%);
147 border: none;
148 color: #ffffff;
149 font-weight: 600;
150 box-shadow: 0 6px 16px rgba(220, 38, 38, 0.35);
151 transition: all 0.15s ease;
152 display: flex;
153 align-items: center;
154 gap: 6px;
155}
156
157.btn-admin:hover {
158 transform: translateY(-1px);
159 box-shadow: 0 10px 22px rgba(220, 38, 38, 0.45);
160 color: #ffffff;
161 text-decoration: none;
162}
163
164.btn-admin i {
165 font-size: 0.9rem;
166}
167</style>
Note: See TracBrowser for help on using the repository browser.