import React from 'react';
import PropTypes from 'prop-types';
import { connect } from 'react-redux';

import { getRouterAll } from 'Common/router/selector';
import { enterRoute } from 'Common/router/action';
import Store from 'Src/store.js';

const RouterWrapper = (Component, reducerName, store) => {
    const WrappedWithState = connect(state => getRouterAll(state))(Component);
    return class WrapRouter extends React.PureComponent {
        static propTypes = {
            location: PropTypes.object,
            match: PropTypes.object,
            history: PropTypes.object,
        };

        constructor(props) {
            super(props);
            this.state = {
                isEntered: false,
            };
        }

        enterAction = () => {
            const { location, match, history } = this.props;
            store.dispatch(enterRoute(location, match, history, reducerName));
        };

        
        componentDidMount() {
            this.enterAction();
            this.setState({
                isEntered: true,
            });
        }

        render() {
            const { isEntered } = this.state;
            return isEntered ? <WrappedWithState /> : null;
        }
    };

};

const RouterRender = (reducerName, Component, reducer, props = {}) => {
    if (Component) {
        Store.injectReducer(reducerName, reducer);
        const Router = RouterWrapper(Component, reducerName, Store.store)
        return <Router {...props} />;
    }
    return <div>{`模块${reducerName}没找到`}</div>;
};
export default RouterRender;
