yapi-next/vendors/client/components/AuthenticatedComponent.js
2023-06-25 19:08:56 +08:00

45 lines
1.0 KiB
JavaScript
Executable File

import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import { changeMenuItem } from '../reducer/modules/menu';
export function requireAuthentication(Component) {
return @connect(
state => {
return {
isAuthenticated: state.user.isLogin
};
},
{
changeMenuItem
}
)
class AuthenticatedComponent extends React.PureComponent {
constructor(props) {
super(props);
}
static propTypes = {
isAuthenticated: PropTypes.bool,
location: PropTypes.object,
dispatch: PropTypes.func,
history: PropTypes.object,
changeMenuItem: PropTypes.func
};
componentWillMount() {
this.checkAuth();
}
componentWillReceiveProps() {
this.checkAuth();
}
checkAuth() {
if (!this.props.isAuthenticated) {
this.props.history.push('/');
this.props.changeMenuItem('/');
}
}
render() {
return <div>{this.props.isAuthenticated ? <Component {...this.props} /> : null}</div>;
}
};
}