@razorpay/blade
Version:
The Design System that powers Razorpay
58 lines (54 loc) • 1.57 kB
JavaScript
import { useMemo } from 'react';
import './logger/index.js';
import { throwBladeError } from './logger/logger.js';
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/explicit-function-return-type */
function assignRef(ref, value) {
if (ref == null) return;
if (typeof ref === 'function') {
ref(value);
return;
}
try {
ref.current = value;
} catch (error) {
throwBladeError({
moduleName: 'useMergeRefs',
message: "Cannot assign value '".concat(value, "' to ref '").concat(ref, "'")
});
}
}
function mergeRefs() {
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) {
assignRef(ref, node);
});
};
}
/**
* Merged two or more refs into a single ref callback.
*
* Usage:
* ```ts
* const internalRef = React.useRef()
* const ref = useMergeRefs(incomingRef, internalRef);
* ```
*
*
* Taken from ChakraUI:
* https://github.com/chakra-ui/chakra-ui/blob/f3c4a492e5636d2745b438d10794fa4e7999b6de/packages/hooks/use-merge-refs/src/index.ts#L31
*/
function useMergeRefs() {
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 useMemo(function () {
return mergeRefs.apply(void 0, refs);
}, refs);
}
export { mergeRefs, useMergeRefs };
//# sourceMappingURL=useMergeRefs.js.map