@braineet/ui
Version:
Braineet design system
30 lines • 1.28 kB
JavaScript
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
import { useRef, useLayoutEffect, useEffect } from 'react';
import { useComboboxState } from 'ariakit/combobox';
var useEnhancedEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;
export var useCombobox = function useCombobox(options) {
var wrapperRef = useRef();
var combobox = useComboboxState(_extends({
gutter: 4,
sameWidth: true,
getAnchorRect: function getAnchorRect() {
var _wrapperRef$current;
if (!wrapperRef.current) return null;
return ((_wrapperRef$current = wrapperRef.current) == null ? void 0 : _wrapperRef$current.getBoundingClientRect()) || null;
}
}, options));
useEnhancedEffect(function () {
if (wrapperRef.current) {
var observer = new ResizeObserver(function () {
combobox.render();
});
observer.observe(wrapperRef.current);
return function () {
observer.unobserve(wrapperRef.current);
};
}
}, []);
return _extends({}, combobox, {
wrapperRef: wrapperRef
});
};