"use client"; import React from "react"; import { paperMixin } from "../styles"; import { Collapse } from "./Collapse"; import { cls } from "../util"; import { useOutsideAlerter } from "../hooks"; export type AutocompleteProps = { children: React.ReactNode; open: boolean; setOpen: (open: boolean) => void; className?: string; } export const useAutoComplete = ({ ref }: { ref: React.MutableRefObject; }) => { const [autoCompleteOpen, setAutoCompleteOpen] = React.useState(false); const [inputFocused, setInputFocused] = React.useState(false); // if ref is not focused, close autocomplete React.useEffect(() => { if (ref.current) { ref.current.onfocus = () => { setAutoCompleteOpen(true); setInputFocused(true); } ref.current.onblur = () => { setInputFocused(false); } } }, [ref]); return { inputFocused, autoCompleteOpen, setAutoCompleteOpen }; } export function Autocomplete({ children, open, setOpen, className }: AutocompleteProps) { const autocompleteRef = React.useRef(null); useOutsideAlerter(autocompleteRef, () => setOpen(false)); return
{children}
; } export type AutocompleteItemProps = { children: React.ReactNode, onClick?: () => void, className?: string }; export const AutocompleteItem = React.memo(function AutocompleteItem({ children, onClick, className }: AutocompleteItemProps) { return (
{children}
) });