UNPKG

@react-md/form

Version:

This package is for creating all the different form input types.

49 lines (40 loc) 1.07 kB
import type { HTMLAttributes } from "react"; import { useCallback } from "react"; import { useToggle } from "@react-md/utils"; type FocusElement = | HTMLInputElement | HTMLTextAreaElement | HTMLLabelElement | HTMLSelectElement | HTMLDivElement; type BlurEventHandler = React.FocusEventHandler<FocusElement>; type FocusEventHandler = React.FocusEventHandler<FocusElement>; type Options = Pick<HTMLAttributes<FocusElement>, "onBlur" | "onFocus">; /** * @internal */ export function useFocusState({ onFocus, onBlur, }: Options): [boolean, FocusEventHandler, BlurEventHandler] { const [focused, setFocused, setBlurred] = useToggle(false); const handleFocus = useCallback<FocusEventHandler>( (event) => { if (onFocus) { onFocus(event); } setFocused(); }, [setFocused, onFocus] ); const handleBlur = useCallback<BlurEventHandler>( (event) => { if (onBlur) { onBlur(event); } setBlurred(); }, [setBlurred, onBlur] ); return [focused, handleFocus, handleBlur]; }