JimmyLv
7/13/2017 - 5:33 AM

HOC AuthedComonent

HOC AuthedComonent

import React, { Component } from 'react';
import userStorage from '../shared/storage/user';
import history from '../history';

const connectAuthCheck = doCheckFn => (Comp) => {
  class AuthedComonent extends Component {
    state = {
      authed: false,
    };

    componentWillMount() {
      Promise.resolve(doCheckFn(this.props))
        .then(
          () => this.setState({ authed: true }),
          (e) => { console.error('Auth failed:', e); },
        );
    }

    render() {
      return this.state.authed ? <Comp {...this.props} /> : <div>hidden</div>;
    }
  }

  return AuthedComonent;
};

const connectCheckLogin = connectAuthCheck(() =>
  userStorage.getUser()
    .catch((e) => {
      history.push('/sign-in');
      throw e;
    }));

export default connectCheckLogin;