From 50279bd864b656aa5b33f82ecd35ebec2b941911 Mon Sep 17 00:00:00 2001 From: mantikoros Date: Tue, 23 Aug 2022 12:37:02 -0500 Subject: [PATCH] useRedirectAfterSignup --- web/components/auth-context.tsx | 3 +++ web/hooks/use-redirect-after-signup.ts | 30 ++++++++++++++++++++++++++ web/pages/twitch.tsx | 2 ++ 3 files changed, 35 insertions(+) create mode 100644 web/hooks/use-redirect-after-signup.ts diff --git a/web/components/auth-context.tsx b/web/components/auth-context.tsx index f62c10a2..fa303f08 100644 --- a/web/components/auth-context.tsx +++ b/web/components/auth-context.tsx @@ -13,6 +13,7 @@ import { createUser } from 'web/lib/firebase/api' import { randomString } from 'common/util/random' import { identifyUser, setUserProperty } from 'web/lib/service/analytics' import { useStateCheckEquality } from 'web/hooks/use-state-check-equality' +import { handleRedirectAfterSignup } from 'web/hooks/use-redirect-after-signup' // Either we haven't looked up the logged in user yet (undefined), or we know // the user is not logged in (null), or we know the user is logged in. @@ -62,11 +63,13 @@ export function AuthProvider(props: { // Note: Cap on localStorage size is ~5mb localStorage.setItem(CACHED_USER_KEY, JSON.stringify(current)) setCachedReferralInfoForUser(current.user) + handleRedirectAfterSignup(current.user) } else { // User logged out; reset to null deleteTokenCookies() setAuthUser(null) localStorage.removeItem(CACHED_USER_KEY) + handleRedirectAfterSignup(null) } }) }, [setAuthUser]) diff --git a/web/hooks/use-redirect-after-signup.ts b/web/hooks/use-redirect-after-signup.ts new file mode 100644 index 00000000..466acaca --- /dev/null +++ b/web/hooks/use-redirect-after-signup.ts @@ -0,0 +1,30 @@ +import { User } from 'common/user' +import dayjs from 'dayjs' +import { useEffect } from 'react' + +import { safeLocalStorage } from 'web/lib/util/local' + +type page_redirects = 'twitch' + +const key = 'redirect-after-signup' + +export const useRedirectAfterSignup = (page: page_redirects) => { + useEffect(() => { + safeLocalStorage()?.setItem(key, page) + }, [page]) +} + +export const handleRedirectAfterSignup = (user: User | null) => { + const redirect = safeLocalStorage()?.getItem(key) + safeLocalStorage()?.removeItem(key) + + if (!user || !redirect) return + + const now = dayjs().utc() + const userCreatedTime = dayjs(user.createdTime) + if (now.diff(userCreatedTime, 'minute') > 5) return + + if (redirect === 'twitch') { + // TODO: actual Twitch redirect + } +} diff --git a/web/pages/twitch.tsx b/web/pages/twitch.tsx index 152a8f2d..a8fdb291 100644 --- a/web/pages/twitch.tsx +++ b/web/pages/twitch.tsx @@ -9,8 +9,10 @@ import { withTracking } from 'web/lib/service/analytics' import { Row } from 'web/components/layout/row' import { Button } from 'web/components/button' import { useTracking } from 'web/hooks/use-tracking' +import { useRedirectAfterSignup } from 'web/hooks/use-redirect-after-signup' export default function TwitchLandingPage() { + useRedirectAfterSignup('twitch') useSaveReferral() useTracking('view twitch landing page')