Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save thekevinscott/dcb6f0fca14ae1277880fddfeec9e1ba to your computer and use it in GitHub Desktop.
Save thekevinscott/dcb6f0fca14ae1277880fddfeec9e1ba to your computer and use it in GitHub Desktop.
const patchedConnect = (...args) => component => {
const componentName = component.name;
const mapStateToProps = ({ router }) => {
const {
scene,
} = router;
return {
activeComponent: (scene || {}).title,
};
};
const WrappedComponent = getWrappedComponent(component, args);
class WrapperComponent extends Component {
constructor(props) {
super(props);
this.state = {
handledMounted: false,
};
this.refHandler = this.refHandler.bind(this);
this.componentWillAppear = this.componentWillAppear.bind(this);
}
componentWillMount() {
this.componentWillAppear();
}
componentWillAppear() {
if (this.instance) {
if (!this.instance.componentWillAppear) {
console.warn('You called connectFocus with a component that failed to implement componentWillAppear', this.instance);
} else {
this.instance.componentWillAppear();
}
}
}
isComponentActive() {
return this.props.activeComponent === componentName;
}
willComponentBecomeActive(nextProps) {
return this.props.activeComponent !== nextProps.activeComponent && nextProps.activeComponent === componentName;
}
componentWillReceiveProps(nextProps) {
if (this.willComponentBecomeActive(nextProps)) {
this.componentWillAppear();
}
}
refHandler(c) {
if (!this.instance) {
this.instance = c.getWrappedInstance();
if (!this.state.handleMounted) {
this.setState({
handleMounted: false,
});
this.componentWillAppear();
}
}
}
render() {
return (
<WrappedComponent
{...this.props}
ref={this.refHandler}
/>
);
}
}
return connect(
mapStateToProps
)(WrapperComponent);
};
export default patchedConnect;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment