UNPKG

@zohodesk/components

Version:

In this Package, we Provide Some Basic Components to Build Web App

38 lines (33 loc) 1.19 kB
import React, { forwardRef, useCallback, Children, cloneElement } from 'react'; import PropTypes from 'prop-types'; function setRef(refFunc, value) { if (typeof refFunc === 'function') { refFunc(value); } else if (refFunc instanceof Object) { refFunc.current = value; } } const DOMRefWrapper = /*#__PURE__*/forwardRef((props, refFunc) => { const ele = Children.only(props.children); const { domRefKey = 'eleRef' } = props; // NOTE: need to check for forward Ref function, Because in Froward Ref case refKey is "ref" const refKey = typeof ele.type !== 'string' ? domRefKey : 'ref'; // const setAttribute = useCallback(node => { const eleRealRefFunc = ele.props[refKey]; const setAttribute = useCallback(ref => { setRef(refFunc, ref); setRef(eleRealRefFunc, ref); }, [refFunc, eleRealRefFunc]); // let refKey = typeof ele.type === 'string' ? 'ref' : 'eleRef'; let childProps = { [refKey]: setAttribute }; return /*#__PURE__*/cloneElement(ele, childProps); }); DOMRefWrapper.defaultProps = { domRefKey: 'eleRef' }; DOMRefWrapper.propTypes = { domRefKey: PropTypes.any, children: PropTypes.any }; export default DOMRefWrapper;