Skip to content
Snippets Groups Projects
Unverified Commit ad646a39 authored by Ahmad Farhat's avatar Ahmad Farhat Committed by GitHub
Browse files

Solve issue with protected route (#4413)

parent a0e66c7a
No related branches found
No related tags found
No related merge requests found
import React, { useEffect } from 'react'; import React, { useEffect } from 'react';
import { Container } from 'react-bootstrap'; import { Container } from 'react-bootstrap';
import { Outlet } from 'react-router-dom'; import { Outlet, useLocation } from 'react-router-dom';
import { Toaster } from 'react-hot-toast'; import { Toaster } from 'react-hot-toast';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import Header from './components/shared_components/Header'; import Header from './components/shared_components/Header';
...@@ -12,6 +12,7 @@ import BackgroundBuffer from './components/shared_components/BackgroundBuffer'; ...@@ -12,6 +12,7 @@ import BackgroundBuffer from './components/shared_components/BackgroundBuffer';
export default function App() { export default function App() {
const currentUser = useAuth(); const currentUser = useAuth();
const pageHeight = currentUser?.signed_in ? 'regular-height' : 'no-header-height'; const pageHeight = currentUser?.signed_in ? 'regular-height' : 'no-header-height';
const location = useLocation();
// //i18n // //i18n
const { i18n } = useTranslation(); const { i18n } = useTranslation();
...@@ -29,7 +30,7 @@ export default function App() { ...@@ -29,7 +30,7 @@ export default function App() {
return ( return (
<> <>
{currentUser?.signed_in && <Header /> } {location.pathname !== '/' && currentUser?.signed_in && <Header /> }
{currentUser?.verified && <BackgroundBuffer /> } {currentUser?.verified && <BackgroundBuffer /> }
<Container className={pageHeight}> <Container className={pageHeight}>
<Outlet /> <Outlet />
......
import React, { useEffect } from 'react'; import React, { useEffect } from 'react';
import { Card, Form } from 'react-bootstrap'; import { Card, Form } from 'react-bootstrap';
import { useLocation, useSearchParams } from 'react-router-dom'; import { useLocation, useNavigate, useSearchParams } from 'react-router-dom';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import Button from 'react-bootstrap/Button'; import Button from 'react-bootstrap/Button';
import ButtonLink from '../shared_components/utilities/ButtonLink'; import ButtonLink from '../shared_components/utilities/ButtonLink';
import useEnv from '../../hooks/queries/env/useEnv'; import useEnv from '../../hooks/queries/env/useEnv';
import Logo from '../shared_components/Logo'; import Logo from '../shared_components/Logo';
import useSiteSetting from '../../hooks/queries/site_settings/useSiteSetting'; import useSiteSetting from '../../hooks/queries/site_settings/useSiteSetting';
import { useAuth } from '../../contexts/auth/AuthProvider';
export default function HomePage() { export default function HomePage() {
const { data: env } = useEnv(); const { data: env } = useEnv();
const { t } = useTranslation(); const { t } = useTranslation();
const { search } = useLocation(); const { search } = useLocation();
const currentUser = useAuth();
const navigate = useNavigate();
const [searchParams] = useSearchParams(); const [searchParams] = useSearchParams();
const inviteToken = searchParams.get('inviteToken'); const inviteToken = searchParams.get('inviteToken');
const { data: registrationMethod } = useSiteSetting('RegistrationMethod'); const { data: registrationMethod } = useSiteSetting('RegistrationMethod');
...@@ -20,6 +23,18 @@ export default function HomePage() { ...@@ -20,6 +23,18 @@ export default function HomePage() {
document.cookie = `token=${inviteToken};path=/;`; document.cookie = `token=${inviteToken};path=/;`;
}, [inviteToken]); }, [inviteToken]);
// redirect user to correct page based on signed in status and CreateRoom permission
useEffect(
() => {
if (!currentUser.stateChanging && currentUser.signed_in && currentUser.permissions.CreateRoom === 'true') {
navigate('/rooms');
} else if (!currentUser.stateChanging && currentUser.signed_in && currentUser.permissions.CreateRoom === 'false') {
navigate('/home');
}
},
[currentUser.signed_in],
);
function showSignUp() { function showSignUp() {
return registrationMethod !== 'invite' || !!inviteToken; return registrationMethod !== 'invite' || !!inviteToken;
} }
......
...@@ -27,6 +27,7 @@ export default function AuthProvider({ children }) { ...@@ -27,6 +27,7 @@ export default function AuthProvider({ children }) {
permissions: currentUser?.permissions, permissions: currentUser?.permissions,
role: currentUser?.role, role: currentUser?.role,
verified: currentUser?.verified, verified: currentUser?.verified,
stateChanging: false,
}; };
const memoizedCurrentUser = useMemo(() => user, [user]); const memoizedCurrentUser = useMemo(() => user, [user]);
......
...@@ -3,19 +3,23 @@ import { toast } from 'react-hot-toast'; ...@@ -3,19 +3,23 @@ import { toast } from 'react-hot-toast';
import { useNavigate } from 'react-router-dom'; import { useNavigate } from 'react-router-dom';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import axios from '../../../helpers/Axios'; import axios from '../../../helpers/Axios';
import { useAuth } from '../../../contexts/auth/AuthProvider';
export default function useDeleteSession() { export default function useDeleteSession() {
const { t } = useTranslation(); const { t } = useTranslation();
const queryClient = useQueryClient(); const queryClient = useQueryClient();
const navigate = useNavigate(); const navigate = useNavigate();
const currentUser = useAuth();
return useMutation( return useMutation(
() => axios.delete('/sessions/signout.json'), () => axios.delete('/sessions/signout.json'),
{ {
onSuccess: async () => { onSuccess: async () => {
await navigate('/'); currentUser.stateChanging = true;
queryClient.refetchQueries('useSessions'); queryClient.refetchQueries('useSessions');
await navigate('/');
toast.success(t('toast.success.session.signed_out')); toast.success(t('toast.success.session.signed_out'));
currentUser.stateChanging = false;
}, },
onError: () => { onError: () => {
toast.error(t('toast.error.problem_completing_action')); toast.error(t('toast.error.problem_completing_action'));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment