diff --git a/src/core/plugins/view/root-injects.js b/src/core/plugins/view/root-injects.js index 1d996102..b916bee3 100644 --- a/src/core/plugins/view/root-injects.js +++ b/src/core/plugins/view/root-injects.js @@ -20,8 +20,11 @@ const RootWrapper = (reduxStore, ComponentToWrap) => class extends Component { } const makeContainer = (getSystem, component, reduxStore) => { + const mapStateToProps = component.prototype.constructor.mapStateToProps || function(state) { + return {state} + } let wrappedWithSystem = SystemWrapper(getSystem, component, reduxStore) - let connected = connect(state => ({state}))(wrappedWithSystem) + let connected = connect( mapStateToProps )(wrappedWithSystem) if(reduxStore) return RootWrapper(reduxStore, connected) return connected diff --git a/test/core/system/system.js b/test/core/system/system.js index ada3a93b..67447276 100644 --- a/test/core/system/system.js +++ b/test/core/system/system.js @@ -1,7 +1,11 @@ /* eslint-env mocha */ +import React, { PureComponent } from "react" import expect from "expect" import System from "core/system" import { fromJS } from "immutable" +import { render } from "enzyme" +import ViewPlugin from "core/plugins/view/index.js" +import { connect, Provider } from "react-redux" describe("bound system", function(){ @@ -444,4 +448,66 @@ describe("bound system", function(){ }) + describe("getComponent", function() { + it("returns a component from the system", function() { + const system = new System({ + plugins: [ + ViewPlugin, + { + components: { + test: ({ name }) =>
{name} component
+ } + } + ] + }) + + // When + var Component = system.getSystem().getComponent("test") + const renderedComponent = render() + expect(renderedComponent.text()).toEqual("Test component") + }) + + it("allows container components to provide their own `mapStateToProps` function", function() { + // Given + class ContainerComponent extends PureComponent { + static mapStateToProps(nextState, props) { + return { + "abc": "This came from mapStateToProps" + } + } + + static defaultProps = { + "abc" : "" + } + + render() { + return ( +
{ this.props.abc }
+ ) + } + } + const system = new System({ + plugins: [ + ViewPlugin, + { + components: { + ContainerComponent + } + } + ] + }) + + // When + var Component = system.getSystem().getComponent("ContainerComponent", true) + const renderedComponent = render( + + + + ) + + // Then + expect(renderedComponent.text()).toEqual("This came from mapStateToProps") + }) + }) + })