Advertisement
Guest User

Untitled

a guest
Mar 18th, 2019
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.07 KB | None | 0 0
  1. import * as React from 'react';
  2. import { connect } from 'react-redux';
  3. import { Redirect } from 'react-router';
  4. import { getAuthenticatedUser } from '@/store/ducks/auth';
  5. import { User } from '@/store/ducks/users';
  6. import { State } from '@/store';
  7.  
  8. type StateProps = {
  9. user: User|null;
  10. isLoading: boolean;
  11. };
  12.  
  13. type Props<P = {}> = P & StateProps;
  14.  
  15. export const onlyGuest = <P extends object>(Component: React.ComponentType<P>) => {
  16. const mapStateToProps = (state: State): StateProps => ({
  17. isLoading: state.auth.loading,
  18. user: getAuthenticatedUser(state)
  19. });
  20.  
  21. class Guest extends React.PureComponent<Props<P>> {
  22. render(): JSX.Element {
  23. const { user, isLoading, ...props } = this.props;
  24.  
  25. if (!! user && ! isLoading) {
  26. return (
  27. <Redirect to='/inbox'/>
  28. );
  29. }
  30.  
  31. return (
  32. <Component {...props as P} />
  33. );
  34. }
  35. }
  36.  
  37. return connect<StateProps, {}, P, State>(mapStateToProps)(Guest);
  38. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement