monday-ui-react-core
Version:
Official monday.com UI resources for application development in React.js
38 lines (32 loc) • 852 B
JavaScript
import { useMemo } from "react";
/*
* const Component = React.forwardRef((props, ref) => {
* const internalRef = React.useRef();
* const mergedRef = useMergeRefs({ refs: [ref, internalRef] });
* return <div {...props} ref={mergedRef} />;
* });
*/
export default function useMergeRefs({ refs = [] }) {
return useMemo(() => {
if (refs.every(ref => ref === null)) return null;
return node => {
refs.forEach(ref => {
if (ref) assignRef(ref, node);
});
};
}, [refs]);
}
function assignRef(ref, value) {
if (ref === null) return;
if (typeof ref === "function") {
ref(value);
return;
}
try {
// eslint-disable-next-line no-param-reassign
ref.current = value;
} catch (error) {
console.error(error);
throw new Error(`Cannot assign value '${value}' to ref '${ref}'`);
}
}