1
- import { IconName } from '~/libs/enums/enums.js' ;
1
+ import { BurgerMenuItemsName , IconName } from '~/libs/enums/enums.js' ;
2
2
import { getValidClassNames } from '~/libs/helpers/helpers.js' ;
3
3
import {
4
+ useAppDispatch ,
4
5
useCallback ,
5
6
useEffect ,
6
7
useLocation ,
@@ -9,6 +10,7 @@ import {
9
10
useState ,
10
11
} from '~/libs/hooks/hooks.js' ;
11
12
import { type BurgerMenuItem } from '~/libs/types/types.js' ;
13
+ import { actions as authActions } from '~/slices/auth/auth.js' ;
12
14
13
15
import { Button , Icon } from '../components.js' ;
14
16
import styles from './styles.module.scss' ;
@@ -21,6 +23,7 @@ const BurgerMenu: React.FC<Properties> = ({ burgerItems }: Properties) => {
21
23
const [ isOpen , setIsOpen ] = useState ( false ) ;
22
24
const location = useLocation ( ) ;
23
25
const navigate = useNavigate ( ) ;
26
+ const dispatch = useAppDispatch ( ) ;
24
27
25
28
const menuReference = useRef < HTMLDivElement | null > ( null ) ;
26
29
@@ -29,10 +32,17 @@ const BurgerMenu: React.FC<Properties> = ({ burgerItems }: Properties) => {
29
32
} , [ isOpen ] ) ;
30
33
31
34
const handleNavigate = useCallback (
32
- ( navigateTo : string ) => ( ) => navigate ( navigateTo ) ,
35
+ ( navigateTo : string ) => ( ) => {
36
+ navigate ( navigateTo ) ;
37
+ } ,
33
38
[ navigate ] ,
34
39
) ;
35
40
41
+ const handleLogOutClick = useCallback (
42
+ ( ) => dispatch ( authActions . logOut ( ) ) ,
43
+ [ dispatch ] ,
44
+ ) ;
45
+
36
46
useEffect ( ( ) => {
37
47
setIsOpen ( false ) ;
38
48
} , [ location ] ) ;
@@ -67,22 +77,28 @@ const BurgerMenu: React.FC<Properties> = ({ burgerItems }: Properties) => {
67
77
{ isOpen && (
68
78
< div className = { styles . menu } >
69
79
< ul >
70
- { burgerItems . map ( ( item , index ) => (
71
- < li key = { index } >
72
- < Icon
73
- iconName = { item . icon }
74
- onClick = { handleNavigate ( item . navigateTo ) }
75
- className = { styles . menuIcon }
76
- />
77
- < Button
78
- frontIcon = { item . icon }
79
- isFullWidth
80
- label = { item . name }
81
- onClick = { handleNavigate ( item . navigateTo ) }
82
- className = { styles . btn }
83
- />
84
- </ li >
85
- ) ) }
80
+ { burgerItems . map ( ( item , index ) => {
81
+ const clickHandler =
82
+ item . name === BurgerMenuItemsName . LOG_OUT
83
+ ? handleLogOutClick
84
+ : handleNavigate ( item . navigateTo ) ;
85
+
86
+ return (
87
+ < li key = { index } >
88
+ < Button
89
+ frontIcon = { item . icon }
90
+ onClick = { clickHandler }
91
+ className = { styles . menuIcon }
92
+ />
93
+ < Button
94
+ frontIcon = { item . icon }
95
+ label = { item . name }
96
+ onClick = { clickHandler }
97
+ className = { styles . btn }
98
+ />
99
+ </ li >
100
+ ) ;
101
+ } ) }
86
102
</ ul >
87
103
</ div >
88
104
) }
0 commit comments