@wordpress/components
Version:
UI components for WordPress.
34 lines (31 loc) • 762 B
JavaScript
/**
* WordPress dependencies
*/
import { useCallback, useState } from '@wordpress/element';
import {
createHigherOrderComponent,
__experimentalUseFocusOutside as useFocusOutside,
} from '@wordpress/compose';
export default createHigherOrderComponent(
( WrappedComponent ) => ( props ) => {
const [ handleFocusOutside, setHandleFocusOutside ] = useState();
const bindFocusOutsideHandler = useCallback(
( node ) =>
setHandleFocusOutside( () =>
node?.handleFocusOutside
? node.handleFocusOutside.bind( node )
: undefined
),
[]
);
return (
<div { ...useFocusOutside( handleFocusOutside ) }>
<WrappedComponent
ref={ bindFocusOutsideHandler }
{ ...props }
/>
</div>
);
},
'withFocusOutside'
);