@enact/core
Version:
Enact is an open source JavaScript framework containing everything you need to create a fast, scalable mobile or web application.
69 lines (65 loc) • 2.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.chainRefs = chainRefs;
exports["default"] = void 0;
exports.useChainRefs = useChainRefs;
var _react = require("react");
var _warning = _interopRequireDefault(require("warning"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
/**
* Updates multiple reference callbacks or objects
*
* @module core/useChainRefs
* @exports useChainRefs
* @exports chainRefs
* @private
*/
// Safely handles functional and object refs (and ignores invalid refs)
function updateRef(ref, node) {
if (ref) {
if (typeof ref === 'function') {
ref(node);
} else if (Object.prototype.hasOwnProperty.call(ref, 'current')) {
ref.current = node;
} else {
// warn for a truthy ref that isn't a function or is an object without `current`
process.env.NODE_ENV !== "production" ? (0, _warning["default"])(ref, "Invalid ref \"".concat(ref, "\" passed to useChainRefs.")) : void 0;
}
}
}
/**
* Creates a reference callback that updates each of the provided references
*
* @memberof core/useChainRefs
* @param {Object|Function} ...handlers List of references to be updated.
* @returns {Function} A callback that updates each reference
* @public
*/
function chainRefs() {
for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {
refs[_key] = arguments[_key];
}
return function (node) {
refs.forEach(function (ref) {
return updateRef(ref, node);
});
};
}
/**
* Creates a memoized reference callback that updates each of the provided references
*
* @memberof core/useChainRefs
* @param {Object|Function} ...handlers List of references to be updated.
* @returns {Function} A memoized callback that updates each reference
* @public
*/
function useChainRefs() {
for (var _len2 = arguments.length, refs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
refs[_key2] = arguments[_key2];
}
// eslint-disable-next-line react-hooks/exhaustive-deps
return (0, _react.useCallback)(chainRefs.apply(void 0, refs), refs);
}
var _default = exports["default"] = useChainRefs;