@gechiui/components
Version:
UI components for GeChiUI.
30 lines (24 loc) • 661 B
text/typescript
/**
* GeChiUI dependencies
*/
import { useRef, useEffect } from '@gechiui/element';
/**
* External dependencies
*/
// eslint-disable-next-line no-restricted-imports
import type { MutableRefObject, RefCallback } from 'react';
type Ref< T > = MutableRefObject< T | null > | RefCallback< T | null >;
export function useCombinedRef< T extends HTMLElement >( ...refs: Ref< T >[] ) {
const targetRef = useRef( null );
useEffect( () => {
refs.forEach( ( ref ) => {
if ( ! ref ) return;
if ( typeof ref === 'function' ) {
ref( targetRef.current );
} else {
ref.current = targetRef.current;
}
} );
}, [ refs ] );
return targetRef;
}