import { useRef, useState } from "react"; import { useClickOutside } from "#/hooks/useClickOutside.ts"; import { type IUserStudyChapter, useLichess } from "#/hooks/useLichess.ts"; interface IProps { setSelectedStudyId: (studyId: string) => void; setStudyChapters: (chapters: IUserStudyChapter[]) => void; } const SelectLichessStudy = ({ setSelectedStudyId }: IProps) => { const [isOpen, setIsOpen] = useState(false); const [search, setSearch] = useState(""); const { getLichessUserStudies, userStudies } = useLichess(); const dropdownRef = useRef(null); const filteredStudies = userStudies.filter((study) => study.name.toLowerCase().includes(search.toLowerCase()), ); const onClickHandler = async () => { setIsOpen(!isOpen); if (!userStudies.length) { await getLichessUserStudies(); } }; const handleStudyClick = async (studyId: string) => { setSelectedStudyId(studyId); setIsOpen(false); setSearch(""); }; useClickOutside({ isOpen, setIsOpen, setSearch, ref: dropdownRef }); return (
{isOpen ? (
search setSearch(e.target.value)} className="w-full h-12 pl-10 pr-4 rounded-lg border border-(--neutral-content) text-(--base-content) placeholder-(--neutral-content)/50 outline-hidden transition-all duration-200 focus:border-(--accent) focus:outline-3 focus:outline-offset-2 focus:outline-(--accent)/50" />

{filteredStudies.length > 0 ? (
    {filteredStudies.map((study) => (
  • ))}
) : (

No results found

)}
) : null}
); }; export default SelectLichessStudy;