32 lines
		
	
	
		
			619 B
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			32 lines
		
	
	
		
			619 B
		
	
	
	
		
			TypeScript
		
	
	
| export interface RefObject extends Function {
 | |
|   current?: any;
 | |
| }
 | |
| 
 | |
| function createRef(): any {
 | |
|   const func: RefObject = (node: any) => {
 | |
|     func.current = node;
 | |
|   };
 | |
|   return func;
 | |
| }
 | |
| 
 | |
| export function fillRef<T>(ref, node: T) {
 | |
|   if (typeof ref === 'function') {
 | |
|     ref(node);
 | |
|   } else if (typeof ref === 'object' && ref && 'current' in ref) {
 | |
|     (ref as any).current = node;
 | |
|   }
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Merge refs into one ref function to support ref passing.
 | |
|  */
 | |
| export function composeRef<T>(...refs: any[]) {
 | |
|   return (node: T) => {
 | |
|     refs.forEach(ref => {
 | |
|       fillRef(ref, node);
 | |
|     });
 | |
|   };
 | |
| }
 | |
| 
 | |
| export default createRef;
 |