class WrapperComponent extends Component {
  constructor(props) {
    super(props);
    this.state = {
      handledMounted: false,
    };
    this.refHandler = this.refHandler.bind(this);
    this.componentWillAppear = this.componentWillAppear.bind(this);
  }

  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();
      }
    }
  }

  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}
      />
    );
  }
}