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}
))}
)}
>
);