From 2f9c3723662743ececbf9ee35ad568268d9a5a54 Mon Sep 17 00:00:00 2001 From: Pushkar Anand Date: Tue, 8 Jun 2021 00:28:52 +0530 Subject: [PATCH] Support for auto redirect. --- src/pages/_app.tsx | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 5890d0d94..f9f8d06c6 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -10,6 +10,8 @@ import 'photoswipe/dist/photoswipe.css'; import EnteSpinner from 'components/EnteSpinner'; import { sentryInit } from '../utils/sentry'; import { Workbox } from 'workbox-window'; +import { getEndpoint } from 'utils/common/apiUtil'; +import { getData, LS_KEYS } from 'utils/storage/localStorage'; const GlobalStyles = createGlobalStyle` /* ubuntu-regular - latin */ @@ -345,6 +347,10 @@ type AppContextType = { export const AppContext = createContext(null); +const redirectMap = { + roadmap: (token: string) => `${getEndpoint()}/users/roadmap?token=${token}`, +}; + export default function App({ Component, err }) { const router = useRouter(); const [loading, setLoading] = useState(false); @@ -353,6 +359,7 @@ export default function App({ Component, err }) { ); const [showNavbar, setShowNavBar] = useState(false); const [files, setFiles] = useState(null); + const [redirectName, setRedirectName] = useState(null); useEffect(() => { if ( @@ -399,10 +406,28 @@ export default function App({ Component, err }) { ); console.log(`%c${constants.CONSOLE_WARNING_DESC}`, 'font-size: 20px;'); + const query = new URLSearchParams(window.location.search); + const redirect = query.get('redirect'); + if (redirect && redirectMap[redirect]) { + const user = getData(LS_KEYS.USER); + if (user?.token) { + window.location.href = redirectMap[redirect](user.token); + } else { + setRedirectName(redirect); + } + } + router.events.on('routeChangeStart', (url: string) => { if (window.location.pathname !== url.split('?')[0]) { setLoading(true); } + + if (redirectName) { + const user = getData(LS_KEYS.USER); + if (user?.token) { + window.location.href = redirectMap[redirectName](user.token); + } + } }); router.events.on('routeChangeComplete', () => { @@ -416,7 +441,7 @@ export default function App({ Component, err }) { window.removeEventListener('online', setUserOnline); window.removeEventListener('offline', setUserOffline); }; - }, []); + }, [redirectName]); const showNavBar = (show: boolean) => setShowNavBar(show);