import React, { useEffect, useRef, useState } from "react"; import Label from "../Label"; const SelectField = ({ label = "Select", options = [], placeholder = "Select Option", required = false, value, onChange, valueKey = "id", labelKey = "name", isLoading = false, }) => { const [position, setPosition] = useState("bottom"); const [open, setOpen] = useState(false); const dropdownRef = useRef(null); useEffect(() => { const handleClickOutside = (event) => { if (dropdownRef.current && !dropdownRef.current.contains(event.target)) { setOpen(false); } }; document.addEventListener("mousedown", handleClickOutside); return () => document.removeEventListener("mousedown", handleClickOutside); }, []); const selectedOption = options.find((opt) => opt[valueKey] === value); const displayText = selectedOption ? selectedOption[labelKey] : placeholder; const handleSelect = (option) => { onChange(option[valueKey]); setOpen(false); }; const toggleDropdown = () => { if (!open) { const rect = dropdownRef.current?.getBoundingClientRect(); const viewportHeight = window.innerHeight; const spaceBelow = viewportHeight - rect.bottom; const dropdownHeight = 200; if (spaceBelow < dropdownHeight) { setPosition("top"); // open upward } else { setPosition("bottom"); // open downward } } setOpen((prev) => !prev); }; return (