feat: Redirect to previous page after login (#4731)

fix: #4721
This commit is contained in:
Aditya Pimpalkar
2024-04-03 07:05:18 +01:00
committed by GitHub
parent 5f6109bb53
commit 6ed0a5e2d6
3 changed files with 17 additions and 5 deletions

View File

@ -1,8 +1,9 @@
import { useMemo, useRef } from 'react';
import { useNavigate } from 'react-router-dom';
import { useLocation, useNavigate } from 'react-router-dom';
import { InMemoryCache, NormalizedCacheObject } from '@apollo/client';
import { useRecoilState } from 'recoil';
import { previousUrlState } from '@/auth/states/previousUrlState';
import { tokenPairState } from '@/auth/states/tokenPairState';
import { isDebugModeState } from '@/client-config/states/isDebugModeState';
import { AppPath } from '@/types/AppPath';
@ -21,6 +22,8 @@ export const useApolloFactory = (options: Partial<Options<any>> = {}) => {
const navigate = useNavigate();
const isMatchingLocation = useIsMatchingLocation();
const [tokenPair, setTokenPair] = useRecoilState(tokenPairState);
const [, setPreviousUrl] = useRecoilState(previousUrlState);
const location = useLocation();
const apolloClient = useMemo(() => {
apolloRef.current = new ApolloFactory({
@ -45,6 +48,7 @@ export const useApolloFactory = (options: Partial<Options<any>> = {}) => {
!isMatchingLocation(AppPath.Invite) &&
!isMatchingLocation(AppPath.ResetPassword)
) {
setPreviousUrl(`${location.pathname}${location.search}`);
navigate(AppPath.SignInUp);
}
},
@ -56,7 +60,7 @@ export const useApolloFactory = (options: Partial<Options<any>> = {}) => {
return apolloRef.current.getClient();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [setTokenPair, isDebugMode]);
}, [setTokenPair, isDebugMode, setPreviousUrl]);
useUpdateEffect(() => {
if (isDefined(apolloRef.current)) {

View File

@ -3,6 +3,7 @@ import { useNavigate } from 'react-router-dom';
import { useRecoilValue } from 'recoil';
import { CurrentWorkspace } from '@/auth/states/currentWorkspaceState.ts';
import { previousUrlState } from '@/auth/states/previousUrlState';
import { billingState } from '@/client-config/states/billingState.ts';
import { AppPath } from '@/types/AppPath.ts';
import { WorkspaceMember } from '~/generated/graphql.tsx';
@ -10,6 +11,7 @@ import { WorkspaceMember } from '~/generated/graphql.tsx';
export const useNavigateAfterSignInUp = () => {
const navigate = useNavigate();
const billing = useRecoilValue(billingState);
const previousUrl = useRecoilValue(previousUrlState);
const navigateAfterSignInUp = useCallback(
(
currentWorkspace: CurrentWorkspace,
@ -35,10 +37,10 @@ export const useNavigateAfterSignInUp = () => {
navigate(AppPath.CreateProfile);
return;
}
navigate(AppPath.Index);
if (previousUrl !== '') navigate(previousUrl);
else navigate(AppPath.Index);
},
[billing, navigate],
[billing, previousUrl, navigate],
);
return { navigateAfterSignInUp };
};

View File

@ -0,0 +1,6 @@
import { createState } from '@/ui/utilities/state/utils/createState';
export const previousUrlState = createState<string>({
key: 'previousUrlState',
defaultValue: '',
});