@coreui/react-pro
Version:
UI Components Library for React.js
44 lines (41 loc) • 1.3 kB
JavaScript
import { useMemo } from 'react';
// code borrowed from https://github.com/reach/reach-ui
// problem described https://github.com/facebook/react/issues/13029
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function useForkedRef(...refs) {
return useMemo(() => {
if (refs.every((ref) => ref == null)) {
return null;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
return (node) => {
refs.forEach((ref) => {
assignRef(ref, node);
});
};
}, refs);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
function assignRef(ref,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
value) {
if (ref == null)
return;
if (isFunction(ref)) {
ref(value);
}
else {
try {
ref.current = value;
}
catch (_a) {
throw new Error(`Cannot assign value "${value}" to ref "${ref}"`);
}
}
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types
function isFunction(value) {
return !!(value && {}.toString.call(value) == '[object Function]');
}
export { assignRef, isFunction, useForkedRef };
//# sourceMappingURL=useForkedRef.js.map