import { forwardRef, useContext } from 'react'; import { dropdownDefaultCSSData, DropdownProps } from './dropdownTypes'; import './Dropdown.scss'; import { ThemeContext } from '../ThemeProvider/ThemeProvider'; import classNames from 'classnames'; const Dropdown = forwardRef( ( { options, handleOptionChange, searchedKeyword = '', dropdownPosition = {}, zIndex, }, ref ) => { const filteredOptions = options ? options.filter((option) => option.label?.toLowerCase().includes(searchedKeyword.toLowerCase()) ) : []; const { verticalMargin, optionHeight, maxDropdownHeight } = dropdownDefaultCSSData; const dropdownHeight = Math.min( filteredOptions.length * optionHeight, maxDropdownHeight ); const isEnoughBottomSpaceAvailable = dropdownPosition.fromBottom >= dropdownHeight + verticalMargin; const topPosition = isEnoughBottomSpaceAvailable ? dropdownPosition.top : dropdownPosition.top - dropdownHeight - dropdownPosition.selectHeight - 2 * verticalMargin; const themeContext = useContext(ThemeContext); const currentTheme = themeContext?.currentTheme; return (
{filteredOptions.length === 0 ? (

No Option

) : ( filteredOptions.map((info) => (
handleOptionChange(info, !info.isChecked)} > {info.label}
)) )}
); } ); export default Dropdown;