From de4a25c2971849a0476c6706b4a328241e42c275 Mon Sep 17 00:00:00 2001 From: Alexey Pyltsyn Date: Sat, 1 Feb 2020 15:21:45 +0300 Subject: [PATCH] fix(v2): remove focus on search input when hovering over it (#2262) * fix(v2): remove focus on search input when hovering over it * Fix deps * Improve naming --- .../src/theme/SearchBar/index.js | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/packages/docusaurus-theme-search-algolia/src/theme/SearchBar/index.js b/packages/docusaurus-theme-search-algolia/src/theme/SearchBar/index.js index bba9aee8c51b..3c9bd3bf975e 100644 --- a/packages/docusaurus-theme-search-algolia/src/theme/SearchBar/index.js +++ b/packages/docusaurus-theme-search-algolia/src/theme/SearchBar/index.js @@ -22,7 +22,7 @@ const Search = props => { } = siteConfig; const history = useHistory(); - function initAlgolia() { + function initAlgolia(focus) { window.docsearch({ appId: algolia.appId, apiKey: algolia.apiKey, @@ -47,11 +47,12 @@ const Search = props => { }, }); - // Needed because the search input loses focus after calling window.docsearch() - searchBarRef.current.focus(); + if (focus) { + searchBarRef.current.focus(); + } } - const loadAlgolia = () => { + const loadAlgolia = (focus = true) => { if (algoliaLoaded) { return; } @@ -60,12 +61,12 @@ const Search = props => { ([{default: docsearch}]) => { setAlgoliaLoaded(true); window.docsearch = docsearch; - initAlgolia(); + initAlgolia(focus); }, ); }; - const toggleSearchIconClick = useCallback(() => { + const handleSearchIcon = useCallback(() => { loadAlgolia(); if (algoliaLoaded) { @@ -77,7 +78,13 @@ const Search = props => { const handleSearchInputBlur = useCallback(() => { props.handleSearchBarToggle(!props.isSearchBarExpanded); - }, [algoliaLoaded]); + }, [props.isSearchBarExpanded]); + + const handleSearchInput = useCallback(e => { + const needFocus = e.type !== 'mouseover'; + + loadAlgolia(needFocus); + }); return (
@@ -87,8 +94,8 @@ const Search = props => { className={classnames('search-icon', { 'search-icon-hidden': props.isSearchBarExpanded, })} - onClick={toggleSearchIconClick} - onKeyDown={toggleSearchIconClick} + onClick={handleSearchIcon} + onKeyDown={handleSearchIcon} tabIndex={0} /> { {'search-bar-expanded': props.isSearchBarExpanded}, {'search-bar': !props.isSearchBarExpanded}, )} - onMouseOver={loadAlgolia} - onFocus={loadAlgolia} + onMouseOver={handleSearchInput} + onFocus={handleSearchInput} onBlur={handleSearchInputBlur} ref={searchBarRef} />