import React from 'react'; import context from 'context'; export default function connect(streamProvider) { return function (Component) { return class Connected extends React.Component { state = {hasError: false, streamProps: {}}; componentWillMount() { let stream = streamProvider(context.streams, this.props); this.detacher = stream.attach(data => { this.setState({ hasError: false, streamProps: this.state.streamProps === data ? {...data} : data, }); }); } componentWillUnmount() { this.detacher(); } render() { if (this.state.hasError) { return null; } return ; } componentDidCatch() { this.setState({hasError: true}); } }; } }