reflexy
Version:
Flexbox layout react components
18 lines (17 loc) • 796 B
JavaScript
import React from 'react';
import { defaultClassNameTransformer, defaultStyleTransformer } from './utils';
/** Apply props to cloned element */
export default function TweakableElementWrapper({ element, className, style, children, forwardProps = true, ...rest }) {
const cmp = React.Children.only(element);
const nextProps = {
...(forwardProps && rest),
...cmp.props,
className: defaultClassNameTransformer(className ?? '', cmp.props.className),
style: defaultStyleTransformer(style, cmp.props.style),
};
// For elements such as input which does not supports children
if (!cmp.props.children && !children) {
return React.cloneElement(cmp, nextProps);
}
return React.cloneElement(cmp, nextProps, children, cmp.props.children);
}