Files
med-notes/.pnpm-store/v10/files/74/9a742aa351fdbe9c1f3cfc27147c83a062c375a6bce55f74e7409a77a3a7247c8ce0076a0b34d4c62058f8ad0d5dbbfd8a3b4ba11e4697f2d4969abc0c0b4c
2025-05-09 05:30:08 +02:00

36 lines
949 B
Plaintext

import type * as React from 'react';
/**
* A function that merges React refs into one.
* Supports both functions and ref objects created using createRef() and useRef().
*
* Usage:
* ```tsx
* <div ref={mergeRefs(ref1, ref2, ref3)} />
* ```
*
* @param {(React.Ref<T> | undefined)[]} inputRefs Array of refs
* @returns {React.Ref<T> | React.RefCallback<T>} Merged refs
*/
export default function mergeRefs<T>(
...inputRefs: (React.Ref<T> | undefined)[]
): React.Ref<T> | React.RefCallback<T> {
const filteredInputRefs = inputRefs.filter(Boolean);
if (filteredInputRefs.length <= 1) {
const firstRef = filteredInputRefs[0];
return firstRef || null;
}
return function mergedRefs(ref) {
filteredInputRefs.forEach((inputRef) => {
if (typeof inputRef === 'function') {
inputRef(ref);
} else if (inputRef) {
(inputRef as React.MutableRefObject<T | null>).current = ref;
}
});
};
}