File tree Expand file tree Collapse file tree 4 files changed +105
-8
lines changed Expand file tree Collapse file tree 4 files changed +105
-8
lines changed Original file line number Diff line number Diff line change @@ -3,20 +3,34 @@ import URLS from "../../helpers/URLS";
3
3
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" ;
4
4
import { faUserCircle } from "@fortawesome/free-solid-svg-icons/faUserCircle" ;
5
5
import pocketbase from "../../libraries/Pocketbase" ;
6
- import React from "preact/compat" ;
7
6
import NavBarLink from "./NavBarLink" ;
7
+ import NavBarDropdownLink , {
8
+ NavBarDropdownItem ,
9
+ NavBarDropdownItemContainer ,
10
+ NavBarDropdownLinkText
11
+ } from "./NavBarDropdownLink" ;
8
12
9
13
export default function NavAuthLinks ( ) {
10
14
const authValid = useAuthValid ( ) ;
11
15
12
16
if ( authValid ) {
13
- return < >
14
- < NavBarLink href = { URLS . DASHBOARD } >
17
+ return < NavBarDropdownLink >
18
+ < NavBarDropdownLinkText >
15
19
< FontAwesomeIcon
16
20
icon = { faUserCircle } /> { pocketbase . authStore ?. model ?. username }
17
- </ NavBarLink >
18
- < NavBarLink href = { URLS . LOGOUT } > Logout</ NavBarLink >
19
- </ > ;
21
+ </ NavBarDropdownLinkText >
22
+ < NavBarDropdownItemContainer >
23
+ < NavBarDropdownItem >
24
+ < NavBarLink href = { URLS . DASHBOARD } > Dashboard</ NavBarLink >
25
+ </ NavBarDropdownItem >
26
+ < NavBarDropdownItem >
27
+ < NavBarLink href = { URLS . USER_SETTINGS } > Account</ NavBarLink >
28
+ </ NavBarDropdownItem >
29
+ < NavBarDropdownItem >
30
+ < NavBarLink href = { URLS . LOGOUT } > Logout</ NavBarLink >
31
+ </ NavBarDropdownItem >
32
+ </ NavBarDropdownItemContainer >
33
+ </ NavBarDropdownLink > ;
20
34
}
21
35
22
36
return < >
Original file line number Diff line number Diff line change
1
+ import { ComponentChildren } from "preact" ;
2
+ import { PropsWithChildren , useState } from "preact/compat" ;
3
+ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" ;
4
+ import { faCaretDown } from "@fortawesome/free-solid-svg-icons/faCaretDown" ;
5
+
6
+ export default function NavBarDropdownLink ( props : { children : ComponentChildren } ) {
7
+ const [ isOpen , setIsOpen ] = useState ( false ) ;
8
+
9
+ return < button onClick = { ( ) => setIsOpen ( ! isOpen ) }
10
+ className = { `navbar-link navbar-link-dropdown navbar-link__animated ${ isOpen ? 'navbar-link-dropdown__active' : '' } ` } >
11
+ { props . children }
12
+ </ button >
13
+ }
14
+
15
+ export function NavBarDropdownLinkText ( props : PropsWithChildren ) {
16
+ return < span className = "navbar-link__text" > { props . children } < FontAwesomeIcon icon = { faCaretDown } />
17
+ </ span >
18
+ }
19
+
20
+ export function NavBarDropdownItemContainer ( props : PropsWithChildren ) {
21
+ return < span className = { "navbar-link-dropdown-items" } > { props . children } </ span >
22
+ }
23
+
24
+ export function NavBarDropdownItem ( props : PropsWithChildren ) {
25
+ return < span className = { "navbar-link-dropdown-items-item" } > { props . children } </ span >
26
+ }
Original file line number Diff line number Diff line change @@ -8,6 +8,7 @@ const URLS: { [key: string]: string } = {
8
8
FORGOT_PASSWORD : "/auth/forgot-password" ,
9
9
RESET_PASSWORD : "/auth/reset-password/:token" ,
10
10
CHANGE_PASSWORD : "/auth/change-password" ,
11
+ USER_SETTINGS : "/dashboard/user" ,
11
12
}
12
13
13
14
export default URLS ;
Original file line number Diff line number Diff line change @@ -253,6 +253,62 @@ nav.navbar {
253
253
}
254
254
}
255
255
256
+ .navbar-link.navbar-link-dropdown {
257
+ background : none ;
258
+ border : none ;
259
+ position : relative ;
260
+ overflow : visible ;
261
+
262
+ .navbar-link__text {
263
+ margin-top : auto ;
264
+ margin-bottom : auto ;
265
+ }
266
+
267
+ & :hover , & {
268
+ >.navbar-link__text , >.navbar-link__text :hover {
269
+ margin-top : auto ;
270
+ margin-bottom : auto ;
271
+ }
272
+ }
273
+
274
+ .navbar-link-dropdown-items {
275
+ position : absolute ;
276
+ top : calc (100% - 10px );
277
+ padding-top : 10px ;
278
+ width : 100% ;
279
+ height : auto ;
280
+ display : none ;
281
+
282
+ background-color : $celadon-blue ;
283
+
284
+ border-bottom-left-radius : 5px ;
285
+ border-bottom-right-radius : 5px ;
286
+ }
287
+
288
+ & .navbar-link-dropdown__active , & :hover {
289
+ .navbar-link-dropdown-items {
290
+ display : block ;
291
+ }
292
+
293
+ .navbar-link {
294
+ height : calc ($nav-height - 20px );
295
+
296
+ border-top : 1px solid white ;
297
+
298
+ .navbar-link__text {
299
+ margin-top : 32px ;
300
+ margin-bottom : 0 ;
301
+ }
302
+
303
+ & :hover {
304
+ .navbar-link__text {
305
+ margin-top : 8px ;
306
+ }
307
+ }
308
+ }
309
+ }
310
+ }
311
+
256
312
.navbar-link {
257
313
height : 100% ;
258
314
padding : 7px 10px ;
@@ -303,11 +359,11 @@ nav.navbar {
303
359
}
304
360
305
361
& :hover {
306
- .navbar-link__text {
362
+ > .navbar-link__text {
307
363
margin-top : 0 ;
308
364
}
309
365
310
- .navbar-link__decoration {
366
+ > .navbar-link__decoration {
311
367
margin-top : 0 ;
312
368
opacity : 1 ;
313
369
}
You can’t perform that action at this time.
0 commit comments