antd
Version:
An enterprise-class UI design language and React components implementation
32 lines (31 loc) • 1.33 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireDefault(require("react"));
var _findDOMNode = require("@rc-component/util/lib/Dom/findDOMNode");
var _ref = require("@rc-component/util/lib/ref");
var _reactNode = require("../../_util/reactNode");
/**
* Merge the child ref with an internal ref and expose the resolved DOM node.
*
* @returns A tuple containing the renderable child node and the DOM node resolved from its ref.
*/
const useChildDom = children => {
const [domNode, setDomNode] = _react.default.useState(null);
const childNode = /*#__PURE__*/_react.default.isValidElement(children) ? children : null;
const internalRef = _react.default.useCallback(node => {
const nextDom = (0, _findDOMNode.getDOM)(node);
setDomNode(prevDom => prevDom === nextDom ? prevDom : nextDom);
}, []);
const mergedRef = (0, _ref.useComposeRef)(childNode ? (0, _ref.getNodeRef)(childNode) : null, internalRef);
if (!childNode || !(0, _ref.supportRef)(childNode)) {
return [children, domNode];
}
return [(0, _reactNode.cloneElement)(childNode, {
ref: mergedRef
}), domNode];
};
var _default = exports.default = useChildDom;