11import Link from '@docusaurus/Link' ;
22import clsx from 'clsx' ;
3- import React , { useState , useEffect , useRef } from 'react' ;
3+ import React , { useState } from 'react' ;
44import AccountSwitcher from '../AccountSwitcher' ;
55import { IUserNavbarItemProps } from './item.types' ;
6- import { useLocation } from '@docusaurus/router' ;
76import styles from './UserNavbarItem.module.scss' ;
7+ import SearchButton from '../SearchButton' ;
88
99const UserNavbarDesktopItem = ( { authUrl, is_logged_in } : IUserNavbarItemProps ) => {
1010 const [ toggle_search , setToggleSearch ] = useState < boolean > ( false ) ;
11- const location = useLocation ( ) ;
12-
13- const closeSearchHotkey = ( event ) => {
14- const press_escape = event . key === 'Escape' ;
15- const press_cmd_and_k = event . metaKey && event . key === 'k' ;
16-
17- if ( press_escape ) setToggleSearch ( false ) ;
18- if ( press_cmd_and_k ) setToggleSearch ( false ) ;
19- } ;
20-
21- const openSearchHotkey = ( event ) => {
22- const press_cmd_and_k = event . metaKey && event . key === 'k' ;
23- if ( press_cmd_and_k ) setToggleSearch ( true ) ;
24- } ;
25-
26- const focusSearchInput = ( ) => {
27- // Using vanilla JS to get the element since it's a 3rd party library. I cannot access through React.
28- const search_input = document . querySelector ( '.navbar__search-input' ) ;
29- if ( search_input ) {
30- const focusInput = ( ) => ( search_input as HTMLElement ) . focus ( ) ;
31- focusInput ( ) ;
32- }
33- } ;
34-
35- useEffect ( ( ) => {
36- setToggleSearch ( false ) ;
37- } , [ location ] ) ;
38-
39- useEffect ( ( ) => {
40- if ( toggle_search ) {
41- focusSearchInput ( ) ;
42- window . addEventListener ( 'keydown' , closeSearchHotkey ) ;
43- return ( ) => window . removeEventListener ( 'keydown' , closeSearchHotkey ) ;
44- } else {
45- window . addEventListener ( 'keydown' , openSearchHotkey ) ;
46- return ( ) => window . removeEventListener ( 'keydown' , openSearchHotkey ) ;
47- }
48- } , [ toggle_search ] ) ;
4911
5012 const logInButtonClasses = clsx (
5113 'navbar__item navbar__link' ,
@@ -68,16 +30,7 @@ const UserNavbarDesktopItem = ({ authUrl, is_logged_in }: IUserNavbarItemProps)
6830 < Link to = { 'https://deriv.com/signup/' } className = { signUpButtonClasses } target = '_blank' >
6931 Sign up
7032 </ Link >
71- < button
72- onClick = { ( ) => setToggleSearch ( ( prev ) => ! prev ) }
73- className = { styles . searchButton }
74- data-testid = 'dt_search_button'
75- />
76- < div
77- className = 'search-overlay'
78- onClick = { ( ) => setToggleSearch ( false ) }
79- data-testid = 'dt_search_overlay'
80- />
33+ < SearchButton setToggleSearch = { setToggleSearch } toggle_search = { toggle_search } />
8134 </ nav >
8235 ) ;
8336} ;
0 commit comments