When a user with a token navigates to /:subdomain/login or /:subdomain/otp, they are redirected to /${subdomain}. The redirect uses replace to avoid adding a history entry.
This commit is contained in:
22
src/components/publicRoute/PublicRoute.tsx
Normal file
22
src/components/publicRoute/PublicRoute.tsx
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import { Loader } from "components/Loader/Loader";
|
||||||
|
import { Navigate, useParams } from "react-router-dom";
|
||||||
|
import { useAppSelector } from "redux/hooks";
|
||||||
|
|
||||||
|
export const PublicRoute = ({
|
||||||
|
children,
|
||||||
|
}: {
|
||||||
|
children: JSX.Element;
|
||||||
|
}) => {
|
||||||
|
const { token, loading } = useAppSelector((state) => state.auth);
|
||||||
|
const { subdomain } = useParams();
|
||||||
|
|
||||||
|
if (loading) {
|
||||||
|
return <Loader />;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (token) {
|
||||||
|
return <Navigate to={`/${subdomain}`} replace />;
|
||||||
|
}
|
||||||
|
|
||||||
|
return children;
|
||||||
|
};
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
import { Grid } from "antd";
|
import { Grid } from "antd";
|
||||||
import { Loader } from "components/Loader/Loader";
|
import { Loader } from "components/Loader/Loader";
|
||||||
import { PrivateRoute } from "components/privateRoute/PrivateRoute";
|
import { PrivateRoute } from "components/privateRoute/PrivateRoute";
|
||||||
|
import { PublicRoute } from "components/publicRoute/PublicRoute";
|
||||||
import { AppLayout } from "layouts";
|
import { AppLayout } from "layouts";
|
||||||
import HeaderMenuDrawer from "layouts/app/HeaderMenuDrawer";
|
import HeaderMenuDrawer from "layouts/app/HeaderMenuDrawer";
|
||||||
import AddressPage from "pages/address/page";
|
import AddressPage from "pages/address/page";
|
||||||
@@ -132,13 +133,29 @@ export const router = createHashRouter([
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "login",
|
path: "login",
|
||||||
element: <PageWrapper children={<LoginPage />} />,
|
element: (
|
||||||
|
<PageWrapper
|
||||||
|
children={
|
||||||
|
<PublicRoute>
|
||||||
|
<LoginPage />
|
||||||
|
</PublicRoute>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
),
|
||||||
errorElement: <ErrorPage />,
|
errorElement: <ErrorPage />,
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
path: "otp",
|
path: "otp",
|
||||||
element: <PageWrapper children={<OtpPage />} />,
|
element: (
|
||||||
|
<PageWrapper
|
||||||
|
children={
|
||||||
|
<PublicRoute>
|
||||||
|
<OtpPage />
|
||||||
|
</PublicRoute>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
),
|
||||||
errorElement: <ErrorPage />,
|
errorElement: <ErrorPage />,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user