Fix router

This commit is contained in:
Hazem Krimi
2023-03-28 22:13:03 +01:00
parent f31c6de4dc
commit 4b6d5ac4a0
6 changed files with 305 additions and 129 deletions
+231 -69
View File
@@ -1,10 +1,10 @@
import jwtDecode from 'jwt-decode';
import { useEffect } from 'react';
import { Routes, Navigate } from 'react-router-dom';
import { Routes, Route, Navigate } from 'react-router-dom';
import { useLazyQuery, useReactiveVar } from '@apollo/client';
import {
ProtectedRoute,
PublicRoute,
Protected,
Public,
Navbar,
Sidebar,
Spinner,
@@ -91,109 +91,271 @@ const App = () => {
</>
)}
<Routes>
<ProtectedRoute path='/'>
<Route path='/' element={
<Protected>
{role !== 'admin' ? (
<Navigate to='/project' />
) : (
<Navigate to='/clients' />
)}
</ProtectedRoute>
<ProtectedRoute path='/project'>
</Protected>
} />
<Route
path='/project'
element={
<Protected>
<Project />
</ProtectedRoute>
<ProtectedRoute path='/project/:id'>
</Protected>
}
/>
<Route
path='/project/:id'
element={
<Protected>
<Project />
</ProtectedRoute>
<ProtectedRoute path='/payments/:id'>
</Protected>
}
/>
<Route
path='/payments/:id'
element={
<Protected>
<Payments />
</ProtectedRoute>
<ProtectedRoute path='/add-project'>
</Protected>
}
/>
<Route
path='/add-project'
element={
<Protected>
<AddProject />
</ProtectedRoute>
<ProtectedRoute path='/project-settings/:id'>
</Protected>
}
/>
<Route
path='/project-settings/:id'
element={
<Protected>
<UpdateProject />
</ProtectedRoute>
<ProtectedRoute path='/support-messaging/:project'>
</Protected>
}
/>
<Route
path='/support-messaging/:project'
element={
<Protected>
<SupportMessaging />
</ProtectedRoute>
<ProtectedRoute path='/support-messaging/:project/:id'>
</Protected>
}
/>
<Route
path='/support-messaging/:project/:id'
element={
<Protected>
<SupportMessaging />
</ProtectedRoute>
<ProtectedRoute path='/template'>
</Protected>
}
/>
<Route
path='/template'
element={
<Protected>
<Template />
</ProtectedRoute>
<ProtectedRoute path='/template/:id'>
</Protected>
}
/>
<Route
path='/template/:id'
element={
<Protected>
<Template />
</ProtectedRoute>
<ProtectedRoute path='/add-template'>
</Protected>
}
/>
<Route
path='/add-template'
element={
<Protected>
<AddTemplate />
</ProtectedRoute>
<ProtectedRoute path='/template-settings/:id'>
</Protected>
}
/>
<Route
path='/template-settings/:id'
element={
<Protected>
<TemplateSettings />
</ProtectedRoute>
<ProtectedRoute path='/add-template'>
</Protected>
}
/>
<Route
path='/add-template'
element={
<Protected>
<AddTemplate />
</ProtectedRoute>
<ProtectedRoute path='/feature'>
</Protected>
}
/>
<Route
path='/feature'
element={
<Protected>
<Feature />
</ProtectedRoute>
<ProtectedRoute path='/feature/:id'>
</Protected>
}
/>
<Route
path='/feature/:id'
element={
<Protected>
<Feature />
</ProtectedRoute>
<ProtectedRoute path='/add-feature'>
</Protected>
}
/>
<Route
path='/add-feature'
element={
<Protected>
<AddFeature />
</ProtectedRoute>
<ProtectedRoute path='/feature-settings/:id'>
</Protected>
}
/>
<Route
path='/feature-settings/:id'
element={
<Protected>
<FeatureSettings />
</ProtectedRoute>
<ProtectedRoute path='/category'>
</Protected>
}
/>
<Route
path='/category'
element={
<Protected>
<Category />
</ProtectedRoute>
<ProtectedRoute path='/category/:id'>
</Protected>
}
/>
<Route
path='/category/:id'
element={
<Protected>
<Category />
</ProtectedRoute>
<ProtectedRoute path='/add-category'>
</Protected>
}
/>
<Route
path='/add-category'
element={
<Protected>
<AddCategory />
</ProtectedRoute>
<ProtectedRoute path='/category-settings/:id'>
</Protected>
}
/>
<Route
path='/category-settings/:id'
element={
<Protected>
<CategorySettings />
</ProtectedRoute>
<ProtectedRoute path='/prototype/:id'>
</Protected>
}
/>
<Route
path='/prototype/:id'
element={
<Protected>
<Prototype />
</ProtectedRoute>
<ProtectedRoute path='/clients'>
</Protected>
}
/>
<Route
path='/clients'
element={
<Protected>
<Users />
</ProtectedRoute>
<ProtectedRoute path='/product-owners'>
</Protected>
}
/>
<Route
path='/product-owners'
element={
<Protected>
<Users />
</ProtectedRoute>
<ProtectedRoute path='/developers'>
</Protected>
}
/>
<Route
path='/developers'
element={
<Protected>
<Users />
</ProtectedRoute>
<ProtectedRoute path='/create-user/:role'>
</Protected>
}
/>
<Route
path='/create-user/:role'
element={
<Protected>
<CreateUser />
</ProtectedRoute>
<ProtectedRoute path='/user-settings/:id'>
</Protected>
}
/>
<Route
path='/user-settings/:id'
element={
<Protected>
<UserSettings />
</ProtectedRoute>
<ProtectedRoute path='/settings'>
</Protected>
}
/>
<Route
path='/settings'
element={
<Protected>
<Settings />
</ProtectedRoute>
<PublicRoute path='/login'>
</Protected>
}
/>
<Route
path='/login'
element={
<Public>
<Login />
</PublicRoute>
<PublicRoute path='/signup'>
</Public>
}
/>
<Route
path='/signup'
element={
<Public>
<Signup />
</PublicRoute>
<ProtectedRoute path='/additional-info'>
</Public>
}
/>
<Route
path='/additional-info'
element={
<Protected>
<AdditionalInfo />
</ProtectedRoute>
<PublicRoute path='/forgot-password'>
</Protected>
}
/>
<Route
path='/forgot-password'
element={
<Public>
<ForgotPassword />
</PublicRoute>
<PublicRoute path='/recover-account'>
</Public>
}
/>
<Route
path='/recover-account'
element={
<Public>
<RecoverAccount />
</PublicRoute>
</Public>
}
/>
</Routes>
</>
) : (
+19
View File
@@ -0,0 +1,19 @@
import { useReactiveVar } from '@apollo/client';
import { Navigate } from 'react-router-dom';
import { tokenVar } from '../../graphql/state';
type Props = {
children: React.ReactNode;
};
const Protected = ({ children }: Props) => {
const token = useReactiveVar(tokenVar);
return (
<>
{token ? children : <Navigate to='/login' />}
</>
);
};
export default Protected;
-13
View File
@@ -1,13 +0,0 @@
import { useReactiveVar } from '@apollo/client';
import { Navigate, Route, RouteProps } from 'react-router-dom';
import { tokenVar } from '../../graphql/state';
const ProtectedRoute: React.FC<RouteProps> = ({ children, ...rest }) => {
const token = useReactiveVar(tokenVar);
return (
<Route {...rest} element={token ? children : <Navigate to='/login' />} />
);
};
export default ProtectedRoute;
+19
View File
@@ -0,0 +1,19 @@
import { useReactiveVar } from '@apollo/client';
import { Navigate } from 'react-router-dom';
import { tokenVar } from '../../graphql/state';
type Props = {
children: React.ReactNode;
};
const Public = ({ children }: Props) => {
const token = useReactiveVar(tokenVar);
return (
<>
{!token ? children : <Navigate to='/' />}
</>
);
};
export default Public;
-11
View File
@@ -1,11 +0,0 @@
import { useReactiveVar } from '@apollo/client';
import { Navigate, Route, RouteProps } from 'react-router-dom';
import { tokenVar } from '../../graphql/state';
const PublicRoute: React.FC<RouteProps> = ({ children, ...rest }) => {
const token = useReactiveVar(tokenVar);
return <Route {...rest} element={!token ? children : <Navigate to='/' />} />;
};
export default PublicRoute;
+4 -4
View File
@@ -15,8 +15,8 @@ import CheckBox from './CheckBox';
import Menu from './Menu';
import Navbar from './Navbar';
import Sidebar from './Sidebar';
import ProtectedRoute from './ProtectedRoute';
import PublicRoute from './PublicRoute';
import Protected from './Protected';
import Public from './Public';
import SectionSelector from './SectionSelector';
import Modal from './Modal';
import SidebarItem from './SidebarItem';
@@ -48,8 +48,8 @@ export {
CheckBox,
Navbar,
Sidebar,
ProtectedRoute,
PublicRoute,
Protected,
Public,
SectionSelector,
Modal,
SidebarItem,