All files / src/pages profile.tsx

0% Statements 0/13
0% Branches 0/4
0% Functions 0/3
0% Lines 0/13

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46                                                                                           
import React, { ComponentProps, FC } from 'react';
import { Router, RouteComponentProps } from "@reach/router";
import { Layout, UserData, UserOrders, UserAddresses, UserOrder } from '../components';
import { useUserContext } from '../contexts';
import { navigate } from 'gatsby';
 
interface CustomRouteProps extends RouteComponentProps {
  component: FC,
  rest?: ComponentProps<any>
}
 
const PrivateRoute: FC<CustomRouteProps> = ({ component: Component, ...rest }) => {
  const { isAuth } = useUserContext();
 
  if (!isAuth) {
    navigate("/profile");
    return null;
  }
 
  return <Component {...rest} />;
};
 
const DefaultRoute: FC<CustomRouteProps> = ({ component: Component, location, ...rest }) => {
  if (location?.pathname !== '/profile') {
    navigate("/profile");
    return null;
  }
 
  return <Component {...rest} />;
};
 
const Profile = () => {
  return (
    <Layout>
      <Router basepath="/profile">
        <PrivateRoute path="/addresses" component={UserAddresses} />
        <PrivateRoute path="/orders" component={UserOrders} />
        <PrivateRoute path="/order/:number" component={UserOrder} />
        <UserData path="/" />
        <DefaultRoute path="/*" component={UserData} />
      </Router>
    </Layout>
  );
}
 
export default Profile;