import { useState, useEffect, useRef } from "react"; import { motion as m, AnimatePresence } from "framer-motion"; import { MagnifyingGlassIcon } from "@heroicons/react/24/outline"; import { useAniList } from "../lib/anilist/useAnilist"; import Image from "next/image"; import Link from "next/link"; import { useRouter } from "next/router"; const SearchBar = () => { const [isOpen, setIsOpen] = useState(false); const searchBoxRef = useRef(null); const router = useRouter(); const { aniAdvanceSearch } = useAniList(); const [data, setData] = useState(null); const [query, setQuery] = useState(""); const [lang, setLang] = useState("en"); useEffect(() => { if (isOpen) { searchBoxRef.current.querySelector("input").focus(); } const handleKeyDown = (e) => { if (e.ctrlKey && e.code === "Space") { setIsOpen((prev) => !prev); setData(null); setQuery(""); } }; document.addEventListener("keydown", handleKeyDown); const handleClick = (e) => { if (searchBoxRef.current && !searchBoxRef.current.contains(e.target)) { setIsOpen(false); } }; document.addEventListener("click", handleClick); return () => { document.removeEventListener("keydown", handleKeyDown); document.removeEventListener("click", handleClick); }; }, [isOpen]); async function search() { const data = await aniAdvanceSearch({ search: query, type: "ANIME", perPage: 10, }); setData(data); } useEffect(() => { if (query) { search(); } }, [query]); useEffect(() => { const lang = localStorage.getItem("lang") || "id"; if (lang === "en" || lang === null) { setLang("en"); } else if (lang === "id") { setLang("id"); } }, []); function handleSubmit(e) { e.preventDefault(); if (data?.media.length) { router.push(`${lang}/anime/${data?.media[0].id}`); } } return ( {isOpen && (
setQuery(e.target.value)} />
{data?.media.map((i) => ( search results

{i.title.userPreferred}

{i.status ?.toLowerCase() .replace(/^\w/, (c) => c.toUpperCase())}{" "} {i.status && i.season && <>·}{" "} {i.season ?.toLowerCase() .replace(/^\w/, (c) => c.toUpperCase())}{" "} {(i.status || i.season) && i.episodes && <>·}{" "} {i.episodes || 0} Episodes

{i.type ?.toLowerCase() .replace(/^\w/, (c) => c.toUpperCase())}

))}
{query && ( )}
)}
); }; export default SearchBar;