import { ChevronDown } from "lucide-react"; import { useEffect, useRef, useState } from "react"; import { useClickOutside } from "@formbricks/lib/utils/hooks/useClickOutside"; import { TLanguage } from "@formbricks/types/product"; import { Button } from "@formbricks/ui/Button"; import { Input } from "@formbricks/ui/Input"; import { TIso639Language, iso639Languages } from "../lib/isoLanguages"; interface LanguageSelectProps { language: TLanguage; onLanguageChange: (newLanguage: TLanguage) => void; disabled: boolean; } export const LanguageSelect = ({ language, onLanguageChange, disabled }: LanguageSelectProps) => { const [isOpen, setIsOpen] = useState(false); const [searchTerm, setSearchTerm] = useState(""); const [selectedOption, setSelectedOption] = useState( iso639Languages.find((isoLang) => isoLang.alpha2 === language.code) ); const items = iso639Languages; const languageSelectRef = useRef(null); const inputRef = useRef(null); const toggleDropdown = () => { setIsOpen(!isOpen); }; useClickOutside(languageSelectRef, () => setIsOpen(false)); const handleOptionSelect = (option: TIso639Language) => { setSelectedOption(option); onLanguageChange({ ...language, code: option?.alpha2 || "" }); setIsOpen(false); }; const filteredItems = items.filter((item) => item.english.toLowerCase().includes(searchTerm.toLowerCase())); // Focus the input when the dropdown is opened useEffect(() => { if (isOpen) { inputRef.current?.focus(); } }, [isOpen]); return (
setSearchTerm(e.target.value)} autoComplete="off" ref={inputRef} />
{filteredItems.map((item, index) => (
handleOptionSelect(item)} className="block cursor-pointer rounded-md px-4 py-2 text-gray-700 hover:bg-gray-100 active:bg-blue-100"> {item.english}
))}
); };