@atlaskit/popup
Version:
A popup displays brief content in an overlay.
39 lines (38 loc) • 1.53 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useGetMemoizedMergedTriggerRef = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = require("react");
var _memoizeOne = _interopRequireDefault(require("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`
*/
var useGetMemoizedMergedTriggerRef = exports.useGetMemoizedMergedTriggerRef = function useGetMemoizedMergedTriggerRef() {
var _useState = (0, _react.useState)(function () {
return (0, _memoizeOne.default)(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 = (0, _slicedToArray2.default)(_useState, 1),
getMemoizedMergedTriggerRef = _useState2[0];
return getMemoizedMergedTriggerRef;
};