import React, { useState, useRef, useEffect, HtmlHTMLAttributes } from "react"; import "./Select.css"; import { getCN, clickDetective, randomId } from "../utils"; import { IconTopArrow } from "../../svg_icons/IconTopArrow"; import { IconBottomArrow } from "../../svg_icons/IconBottomArrow"; import ButtonTouch from "../ButtonTouch/ButtonTouch"; import FormField from "../../componentsDefault/FormField/FormField"; function Select({ options, placeholder = "Выбрать", renderOption, value, onChange, autoClose = true, maxHeight = 200, ...props }: { mode?: | `primary` | `positive` | `danger` | `warning` | `secondary` | `outline`; [x: string]: any; }) { const [props_id, setPropsId] = useState(randomId(props.id, `select`)); const [open, setOpen] = useState(false); const [is_mobile_hover, setMobileHover] = useState(false); const [is_hover, setHover] = useState(false); const onChangeCustom = (e: any, value: any) => { e.target.value = value; e.value = value; if (autoClose) setOpen(false); if (onChange) onChange(e); }; const onMouseHover = (e: any) => { if (!is_mobile_hover) { if (e.type == "mouseover") { setHover(true); if (props.onMouseOver) props.onMouseOver(); } else if (e.type == "mouseout") { setHover(false); if (props.onMouseOut) props.onMouseOut(); } } }; clickDetective(props_id, () => { setOpen(false); }); const onTouchStart = (e: any) => { setMobileHover(true); if (props.onTouchStart) props.onTouchStart(e); }; return ( setOpen(!open)} top={props.top} bottom={props.bottom} id={props_id} >
{!value ? placeholder : options.find((x: any) => x.value == value) && !renderOption ? options.find((x: any) => x.value == value).label : renderOption(options.find((x: any) => x.value == value))}
{!open ? ( ) : ( )}
{open && (
{options.map((b: any, index: number) => ( { onChangeCustom(e, b.value); }} > {!renderOption ? b.label : renderOption(b)} ))}
)}
); } /* */ export default Select;