import { Combobox } from "@headlessui/react"; import React, { ElementType, Fragment, KeyboardEventHandler, ReactNode, Ref, forwardRef, useEffect, useRef, useState, } from "react"; type Props = { as?: ElementType | undefined; ref?: Ref | undefined; tabIndex?: number | undefined; className?: string | undefined; value?: string | string[] | null; onChange?: (value: any) => void; disabled?: boolean | undefined; onKeyDown?: KeyboardEventHandler | undefined; multiple?: boolean; renderByDefault?: boolean; button: ReactNode; children: ReactNode; }; const ComboDropDown = forwardRef((props: Props, ref) => { const { button, renderByDefault = true, children, ...rest } = props; const dropDownButtonRef = useRef(null); const [shouldRender, setShouldRender] = useState(renderByDefault); const onHover = () => { setShouldRender(true); }; useEffect(() => { const element = dropDownButtonRef.current as any; if (!element) return; element.addEventListener("mouseenter", onHover); return () => { element?.removeEventListener("mouseenter", onHover); }; }, [dropDownButtonRef, shouldRender]); if (!shouldRender) { return (
{button}
); } return ( // eslint-disable-next-line @typescript-eslint/prefer-ts-expect-error, @typescript-eslint/ban-ts-comment // @ts-expect-error {button} {children} ); }); const ComboOptions = Combobox.Options; const ComboOption = Combobox.Option; const ComboInput = Combobox.Input; ComboDropDown.displayName = "ComboDropDown"; export { ComboDropDown, ComboOptions, ComboOption, ComboInput };