@atlaskit/popup
Version:
A popup displays brief content in an overlay.
33 lines (32 loc) • 1.19 kB
JavaScript
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
import { useState } from 'react';
import memoizeOne from 'memoize-one';
/*
* Get a memoized functional ref for use within a Popup's Trigger.
* This is still very volatile to change as `prop.isOpen` will regularly change, but it's better than nothing.
* This is memoized within a component as to not be shared across all Popup instances.
*
* This is complex because the inputs are split across three different scopes:
* - `props.isOpen`
* - `useState.setTriggerRef`
* - `renderProps.ref`
*/
export var useGetMemoizedMergedTriggerRef = function useGetMemoizedMergedTriggerRef() {
var _useState = useState(function () {
return memoizeOne(function (ref, setTriggerRef, isOpen) {
return function (node) {
if (node && isOpen) {
if (typeof ref === 'function') {
ref(node);
} else if (ref) {
ref.current = node;
}
setTriggerRef(node);
}
};
});
}),
_useState2 = _slicedToArray(_useState, 1),
getMemoizedMergedTriggerRef = _useState2[0];
return getMemoizedMergedTriggerRef;
};