From 6ed0a5e2d629f2e132af3eb2c4b4a87468497b74 Mon Sep 17 00:00:00 2001 From: Aditya Pimpalkar Date: Wed, 3 Apr 2024 07:05:18 +0100 Subject: [PATCH] feat: Redirect to previous page after login (#4731) fix: #4721 --- .../src/modules/apollo/hooks/useApolloFactory.ts | 8 ++++++-- .../auth/sign-in-up/hooks/useNavigateAfterSignInUp.ts | 8 +++++--- .../src/modules/auth/states/previousUrlState.ts | 6 ++++++ 3 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 packages/twenty-front/src/modules/auth/states/previousUrlState.ts diff --git a/packages/twenty-front/src/modules/apollo/hooks/useApolloFactory.ts b/packages/twenty-front/src/modules/apollo/hooks/useApolloFactory.ts index ec0ef70ea..c7695f52a 100644 --- a/packages/twenty-front/src/modules/apollo/hooks/useApolloFactory.ts +++ b/packages/twenty-front/src/modules/apollo/hooks/useApolloFactory.ts @@ -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> = {}) => { 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> = {}) => { !isMatchingLocation(AppPath.Invite) && !isMatchingLocation(AppPath.ResetPassword) ) { + setPreviousUrl(`${location.pathname}${location.search}`); navigate(AppPath.SignInUp); } }, @@ -56,7 +60,7 @@ export const useApolloFactory = (options: Partial> = {}) => { return apolloRef.current.getClient(); // eslint-disable-next-line react-hooks/exhaustive-deps - }, [setTokenPair, isDebugMode]); + }, [setTokenPair, isDebugMode, setPreviousUrl]); useUpdateEffect(() => { if (isDefined(apolloRef.current)) { diff --git a/packages/twenty-front/src/modules/auth/sign-in-up/hooks/useNavigateAfterSignInUp.ts b/packages/twenty-front/src/modules/auth/sign-in-up/hooks/useNavigateAfterSignInUp.ts index ee090c127..ef0e9b6cc 100644 --- a/packages/twenty-front/src/modules/auth/sign-in-up/hooks/useNavigateAfterSignInUp.ts +++ b/packages/twenty-front/src/modules/auth/sign-in-up/hooks/useNavigateAfterSignInUp.ts @@ -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 }; }; diff --git a/packages/twenty-front/src/modules/auth/states/previousUrlState.ts b/packages/twenty-front/src/modules/auth/states/previousUrlState.ts new file mode 100644 index 000000000..2fdb02ae8 --- /dev/null +++ b/packages/twenty-front/src/modules/auth/states/previousUrlState.ts @@ -0,0 +1,6 @@ +import { createState } from '@/ui/utilities/state/utils/createState'; + +export const previousUrlState = createState({ + key: 'previousUrlState', + defaultValue: '', +});