UNPKG

@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
"use strict"; 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;