1- import { useMemo , useRef , useState } from 'react'
1+ import { useMemo , useRef , useState , useCallback } from 'react'
22import Router , { useRouter } from 'next/router'
33import clsx from 'clsx'
44import Link from 'next/link'
@@ -8,6 +8,7 @@ import { useResizeObserver } from '../hooks/resize-observer'
88import Button from './button.js'
99import Cross from '../icons/cross'
1010import Hamburger from '../icons/hamburger'
11+ import countly from '../lib/countly'
1112
1213/**
1314 * Navbar Component
@@ -60,18 +61,30 @@ export default function Navbar({ bgColor = 'bg-nsorange', user }) {
6061 ] ,
6162 [ user , isSmallVariant , version ]
6263 )
64+ const onLinkClick = useCallback ( ( event ) => {
65+ countly . trackCustomLinkClick (
66+ countly . events . LINK_CLICK_NAVBAR ,
67+ event . currentTarget
68+ )
69+ } , [ ] )
6370
64- async function logout ( ) {
65- await getMagic ( ) . user . logout ( )
66- await queryClient . invalidateQueries ( 'magic-user' )
67- Router . push ( { pathname : '/' , query : version ? { version } : null } )
68- }
69-
70- const toggleMenu = ( ) => {
71+ const toggleMenu = useCallback ( ( ) => {
7172 isMenuOpen
7273 ? document . body . classList . remove ( 'overflow-hidden' )
7374 : document . body . classList . add ( 'overflow-hidden' )
7475 setMenuOpen ( ! isMenuOpen )
76+ } , [ isMenuOpen ] )
77+
78+ const onMobileLinkClick = useCallback ( ( event ) => {
79+ onLinkClick ( event )
80+
81+ toggleMenu ( )
82+ } , [ onLinkClick , toggleMenu ] )
83+
84+ async function logout ( ) {
85+ await getMagic ( ) . user . logout ( )
86+ await queryClient . invalidateQueries ( 'magic-user' )
87+ Router . push ( { pathname : '/' , query : version ? { version } : null } )
7588 }
7689
7790 return (
@@ -92,7 +105,7 @@ export default function Navbar({ bgColor = 'bg-nsorange', user }) {
92105 </ div >
93106 ) }
94107 < Link href = { { pathname : '/' , query : version ? { version } : null } } >
95- < a className = "no-underline v-mid" >
108+ < a className = "no-underline v-mid" onClick = { onLinkClick } >
96109 < img
97110 src = "/images/logo-nft.storage-sm.png"
98111 width = "160"
@@ -114,6 +127,7 @@ export default function Navbar({ bgColor = 'bg-nsorange', user }) {
114127 'f4 black no-underline underline-hover v-mid' ,
115128 item . spacing
116129 ) }
130+ onClick = { onLinkClick }
117131 >
118132 { item . name }
119133 </ a >
@@ -125,7 +139,15 @@ export default function Navbar({ bgColor = 'bg-nsorange', user }) {
125139 ) ) }
126140 < div className = "mb1" >
127141 { user ? (
128- < Button onClick = { logout } id = "logout" >
142+ < Button
143+ onClick = { logout }
144+ id = "logout"
145+ tracking = { {
146+ event : countly . events . LOGOUT_CLICK ,
147+ ui : countly . ui . NAVBAR ,
148+ action : 'Logout' ,
149+ } }
150+ >
129151 Logout
130152 </ Button >
131153 ) : (
@@ -135,6 +157,10 @@ export default function Navbar({ bgColor = 'bg-nsorange', user }) {
135157 query : version ? { version } : null ,
136158 } }
137159 id = "login"
160+ tracking = { {
161+ ui : countly . ui . NAVBAR ,
162+ action : 'Login' ,
163+ } }
138164 >
139165 Login
140166 </ Button >
@@ -177,15 +203,15 @@ export default function Navbar({ bgColor = 'bg-nsorange', user }) {
177203 item . spacing ,
178204 bgColor === 'bg-nsgreen' ? 'black' : 'white'
179205 ) }
180- onClick = { ( ) => toggleMenu ( ) }
206+ onClick = { onMobileLinkClick }
181207 >
182208 { item . name }
183209 </ a >
184210 </ Link >
185211 ) ) }
186212 </ div >
187213 < div className = "flex flex-column items-center mb4" >
188- < Button className = "flex justify-center" onClick = { ( ) => toggleMenu ( ) } >
214+ < Button className = "flex justify-center" onClick = { toggleMenu } >
189215 < Cross fill = "currentColor" />
190216 </ Button >
191217 </ div >
0 commit comments