Only create Slot elements once, support Class Components as defaultComponent

This commit is contained in:
Chi Vinh Le
2017-06-15 01:28:06 +07:00
parent c30d05fd6c
commit 035c00ee09
+7 -2
View File
@@ -4,10 +4,15 @@ import styles from './Slot.css';
import {connect} from 'react-redux';
import {getSlotElements} from 'coral-framework/helpers/plugins';
function Slot ({fill, inline = false, className, plugin_config: config, defaultComponent = () => {}, ...rest}) {
function Slot ({fill, inline = false, className, plugin_config: config, defaultComponent: DefaultComponent, ...rest}) {
let children = getSlotElements(fill, {...rest, config});
if (children.length === 0 && DefaultComponent) {
children = <DefaultComponent {...rest} />;
}
return (
<div className={cn({[styles.inline]: inline, [styles.debug]: config.debug}, className)}>
{getSlotElements(fill).length ? getSlotElements(fill, {...rest, config}) : defaultComponent({...rest})}
{children}
</div>
);
}