import { Box, IconButton, Input, InputGroup, InputLeftElement, Text, } from "@chakra-ui/react"; import React, { useCallback, useContext, useEffect, useRef, useState, } from "react"; import { BiSearch } from "react-icons/bi"; import { MdKeyboardVoice } from "react-icons/md"; import { NavLink, useLocation, useNavigate } from "react-router-dom"; import { debounce } from "lodash"; import YoutubeContext from "../../context/YoutubeContext"; const SearchBox = () => { const { generateAutocomplete, autocomplete } = useContext(YoutubeContext); const [searchText, setSearchText] = useState(""); const [showSuggestion, setShowSuggestion] = useState(false); const inputRef = useRef(); const generateAutocompleteFun = useCallback( debounce((query) => { generateAutocomplete(query); }, 500), [] ); useEffect(() => { const handleMouseDown = (event) => { if (event.target?.parentElement?.tagName === "A") return; if (inputRef.current && !inputRef.current.contains(event.target)) { setShowSuggestion(false); } }; const handleFocusIn = (event) => { if (inputRef.current === event.target) { setShowSuggestion(true); } else { // setShowSuggestion(false); } }; window.addEventListener("mousedown", handleMouseDown); window.addEventListener("focusin", handleFocusIn); }); // Access query parameters const location = useLocation(); const queryParams = new URLSearchParams(location.search); const query = queryParams.get("query"); useEffect(() => { setSearchText(query); setShowSuggestion(false); }, [query]); const navigate = useNavigate(); const searchFun = () => { navigate(`/?query=${searchText}`); }; return ( <> { setSearchText(e.target.value); generateAutocompleteFun(e.target.value); }} onKeyDown={(event) => { if (event.key === "Enter") { searchFun(); setShowSuggestion(false); } }} /> } onClick={searchFun} /> } /> ); }; export default SearchBox; const AutoSuggestion = ({ autocomplete }) => ( <> {autocomplete && autocomplete.length !== 0 && ( {autocomplete.map((text) => ( {text} ))} )} );