33 lines
848 B
JavaScript
33 lines
848 B
JavaScript
'use strict';
|
|
|
|
let React = require('react');
|
|
|
|
function cloneReferencedElement(element, config, ...children) {
|
|
let cloneRef = config.ref;
|
|
let originalRef = element.ref;
|
|
if (originalRef == null || cloneRef == null) {
|
|
return React.cloneElement(element, config, ...children);
|
|
}
|
|
|
|
if (typeof originalRef !== 'function') {
|
|
if (__DEV__) {
|
|
console.warn(
|
|
'Cloning an element with a ref that will be overwritten because it ' +
|
|
'is not a function. Use a composable callback-style ref instead. ' +
|
|
'Ignoring ref: ' + originalRef,
|
|
);
|
|
}
|
|
return React.cloneElement(element, config, ...children);
|
|
}
|
|
|
|
return React.cloneElement(element, {
|
|
...config,
|
|
ref(component) {
|
|
cloneRef(component);
|
|
originalRef(component);
|
|
},
|
|
}, ...children);
|
|
}
|
|
|
|
module.exports = cloneReferencedElement;
|