Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
235 changes: 117 additions & 118 deletions clients/web/src/pages/_app.js
Original file line number Diff line number Diff line change
@@ -1,58 +1,57 @@
import '@ui/styles/legacy/global.css'
import { LOGIN_URL } from 'common/constants'
// import { LOGIN_URL } from 'common/constants'

import createCache from '@emotion/cache'
import { CacheProvider } from '@emotion/react'

import { ViewportProvider } from 'components/viewport-provider/viewport-provider'
import { appWithTranslation } from 'next-i18next'
import { useRouter } from 'next/router'
// import { useRouter } from 'next/router'

import { useEffect } from 'react'
import { wrapper } from 'store'
import { Provider, useDispatch, useSelector } from 'react-redux'
import { parseCookies } from 'nookies'
import { Provider } from 'react-redux'
// import { parseCookies } from 'nookies'

import { setUser } from 'containers/account/account.state'
import { getSessGuid, sessGuidHydrate } from 'containers/account/account.state'
// import { setUser } from 'containers/account/account.state'
// import { getSessGuid, sessGuidHydrate } from 'containers/account/account.state'

import { fetchUnleashData } from 'connectors/feature-flags/feature-flags.state'
import { featuresHydrate } from 'connectors/feature-flags/feature-flags.state'
// import { fetchUnleashData } from 'connectors/feature-flags/feature-flags.state'
// import { featuresHydrate } from 'connectors/feature-flags/feature-flags.state'

import { checkListsPilotStatus } from 'containers/lists/lists.state'
// import { checkListsPilotStatus } from 'containers/lists/lists.state'

import { appSetPreferences } from 'connectors/app/app.state'
import { hydrateSettings } from 'connectors/settings/settings.state'
import { featureFlagActive } from 'connectors/feature-flags/feature-flags'
// import { appSetPreferences } from 'connectors/app/app.state'
// import { hydrateSettings } from 'connectors/settings/settings.state'
// import { featureFlagActive } from 'connectors/feature-flags/feature-flags'

import { ConfirmItemsImport } from 'connectors/confirm/items-import'
// import { ConfirmItemsImport } from 'connectors/confirm/items-import'

/** Setup Files
--------------------------------------------------------------- */
import { loadPolyfills } from 'common/setup/polyfills'

import { Shortcuts } from 'connectors/shortcuts/shortcuts'
import { DevTools } from 'connectors/dev-tools/dev-tools'
// import { loadPolyfills } from 'common/setup/polyfills'
// import { Shortcuts } from 'connectors/shortcuts/shortcuts'
// import { DevTools } from 'connectors/dev-tools/dev-tools'

/** App
--------------------------------------------------------------- */
const cache = createCache({ key: 'next' })

function PocketWebClient({ Component, pageProps, err }) {
// Initialize app once per page load
const dispatch = useDispatch()
// const dispatch = useDispatch()

const router = useRouter()
const location = router.pathname
// const router = useRouter()
// const location = router.pathname

const { user_status, user_id, sess_guid, birth, isFXA} = useSelector((state) => state.user) //prettier-ignore
const featureState = useSelector((state) => state.features)
const { flagsReady } = useSelector((state) => state.features)
const { authRequired } = pageProps
// const { user_status, user_id, sess_guid, birth, isFXA} = useSelector((state) => state.user) //prettier-ignore
// const featureState = useSelector((state) => state.features)
// const { flagsReady } = useSelector((state) => state.features)
// const { authRequired } = pageProps

const fxaFlag = featureFlagActive({ flag: 'fxa', featureState })
const forceFxaRedirect = featureFlagActive({ flag: 'forceFxaRedirect', featureState })
const restrictedLink = authRequired && location !== '/learn-more' && (!isFXA || forceFxaRedirect)
// const fxaFlag = featureFlagActive({ flag: 'fxa', featureState })
// const forceFxaRedirect = featureFlagActive({ flag: 'forceFxaRedirect', featureState })
// const restrictedLink = authRequired && location !== '/learn-more' && (!isFXA || forceFxaRedirect)

useEffect(() => {
// Log out version for quick scan. Can also help support get a read on
Expand All @@ -61,110 +60,110 @@ function PocketWebClient({ Component, pageProps, err }) {
console.info(`Pocket Web Client: ${RELEASE_VERSION}`)

// Load any relevant polyfills
loadPolyfills()
// loadPolyfills()
}, [])

// Check user status with cookies
useEffect(() => {
if (user_status !== 'pending') return () => {}

const cookies = parseCookies()
const { sess_guid } = cookies

/**
* First time user
* We don't have a sess_guid for this users so we are gonna
* assume they are a logged out user and treat them as such
* --------------------------------------------------------------
*/
const initializeUser = async () => {
const sess_guid = await getSessGuid()
if (!sess_guid) {
// The reason we wouldn't get a sessGuid is because of a cors error (AKA on a non-pocket)
// so we want to invalidate the user at this point ex: https://getpocket.com/v3/guid
dispatch(setUser(true))
return
}
dispatch(sessGuidHydrate(sess_guid))
dispatch(setUser(false))
}

/**
* User awaiting validation
* This will only happen when we are using an cookies auth flow
* --------------------------------------------------------------
*/
const validateUser = () => {
dispatch(sessGuidHydrate(sess_guid))
dispatch(setUser())
}

if (!sess_guid) initializeUser()
if (sess_guid) validateUser()
}, [user_status, dispatch])
// useEffect(() => {
// if (user_status !== 'pending') return () => {}

// const cookies = parseCookies()
// const { sess_guid } = cookies

// /**
// * First time user
// * We don't have a sess_guid for this users so we are gonna
// * assume they are a logged out user and treat them as such
// * --------------------------------------------------------------
// */
// const initializeUser = async () => {
// const sess_guid = await getSessGuid()
// if (!sess_guid) {
// // The reason we wouldn't get a sessGuid is because of a cors error (AKA on a non-pocket)
// // so we want to invalidate the user at this point ex: https://getpocket.com/v3/guid
// dispatch(setUser(true))
// return
// }
// dispatch(sessGuidHydrate(sess_guid))
// dispatch(setUser(false))
// }

// /**
// * User awaiting validation
// * This will only happen when we are using an cookies auth flow
// * --------------------------------------------------------------
// */
// const validateUser = () => {
// dispatch(sessGuidHydrate(sess_guid))
// dispatch(setUser())
// }

// if (!sess_guid) initializeUser()
// if (sess_guid) validateUser()
// }, [user_status, dispatch])

// Hydrate user features/settings
useEffect(() => {
// Sets up feature flags for this user
const hydrateFeatures = async () => {
try {
const locale = navigator.languages
? navigator.languages[0]
: navigator.language || navigator.userLanguage

const response = await fetchUnleashData(user_id, sess_guid, birth, locale)
const features = response ? response : {}
if (features) dispatch(featuresHydrate(features))
} catch {
dispatch(featuresHydrate({}))
}
}

const requestListsPilotStatus = async () => {
dispatch(checkListsPilotStatus())
}

if (user_status === 'pending' || flagsReady) return () => {}
if (user_status === 'invalid') {
hydrateFeatures()
dispatch(hydrateSettings())
return () => {}
}

// Set up defaults/user pref in state
dispatch(appSetPreferences())
dispatch(hydrateSettings())

hydrateFeatures()
requestListsPilotStatus()
}, [user_status, sess_guid, user_id, birth, dispatch, flagsReady])
// useEffect(() => {
// Sets up feature flags for this user
// const hydrateFeatures = async () => {
// try {
// const locale = navigator.languages
// ? navigator.languages[0]
// : navigator.language || navigator.userLanguage

// const response = await fetchUnleashData(user_id, sess_guid, birth, locale)
// const features = response ? response : {}
// if (features) dispatch(featuresHydrate(features))
// } catch {
// dispatch(featuresHydrate({}))
// }
// }

// const requestListsPilotStatus = async () => {
// dispatch(checkListsPilotStatus())
// }

// if (user_status === 'pending' || flagsReady) return () => {}
// if (user_status === 'invalid') {
// hydrateFeatures()
// dispatch(hydrateSettings())
// return () => {}
// }

// Set up defaults/user pref in state
// dispatch(appSetPreferences())
// dispatch(hydrateSettings())

// hydrateFeatures()
// requestListsPilotStatus()
// }, [user_status, sess_guid, user_id, birth, dispatch, flagsReady])

// Check auth conditions
useEffect(() => {
// Adding flagsready here may slow non auth pages
if (!authRequired || user_status === 'pending') return () => {}
// useEffect(() => {
// // Adding flagsready here may slow non auth pages
// if (!authRequired || user_status === 'pending') return () => {}

// User is not logged in
if (user_status === 'invalid') {
window.location = `${LOGIN_URL}?src=web-auth&utm_source=${window.location.href}`
}
// // User is not logged in
// if (user_status === 'invalid') {
// window.location = `${LOGIN_URL}?src=web-auth&utm_source=${window.location.href}`
// }

// User is logged in but not via FXA
if (flagsReady && fxaFlag && restrictedLink) {
router.replace('/learn-more')
}
}, [authRequired, user_status, restrictedLink, router, flagsReady, fxaFlag])
// // User is logged in but not via FXA
// if (flagsReady && fxaFlag && restrictedLink) {
// router.replace('/learn-more')
// }
// }, [authRequired, user_status, restrictedLink, router, flagsReady, fxaFlag])

const shouldRender = authRequired
? user_status !== 'pending' && user_status !== 'invalid' && flagsReady
: true
// const shouldRender = authRequired
// ? user_status !== 'pending' && user_status !== 'invalid' && flagsReady
// : true

return (
<ViewportProvider>
<DevTools />
<Shortcuts />
{/* <DevTools /> */}
{/* <Shortcuts /> */}
<CacheProvider value={cache}>
{shouldRender ? <Component {...pageProps} err={err} /> : null}
<Component {...pageProps} err={err} />
</CacheProvider>
</ViewportProvider>
)
Expand All @@ -175,7 +174,7 @@ function AppWithStore({ Component, ...rest }) {
return (
<Provider store={store}>
<PocketWebClient Component={Component} {...props} />
<ConfirmItemsImport />
{/* <ConfirmItemsImport /> */}
</Provider>
)
}
Expand Down
10 changes: 5 additions & 5 deletions clients/web/src/pages/waypoint.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ export async function getServerSideProps({ req, locale, query, defaultLocale, lo
const supportedLocale = locales.includes(lang)
const langPrefix = lang !== defaultLocale && supportedLocale ? `/${lang}` : ''
// const isSignUp = query['type'] === 'signup'
const nonEnglish = locale !== defaultLocale || (lang !== defaultLocale && supportedLocale)
const isGerman = ['de', 'de-DE'].includes(locale) || ['de', 'de-DE'].includes(lang)
const homeEligible = isGerman || !nonEnglish
// const nonEnglish = locale !== defaultLocale || (lang !== defaultLocale && supportedLocale)
// const isGerman = ['de', 'de-DE'].includes(locale) || ['de', 'de-DE'].includes(lang)
// const homeEligible = isGerman || !nonEnglish

// query parameters returned after auth that are currently not used.
// remove from the list of query parameters
Expand All @@ -31,9 +31,9 @@ export async function getServerSideProps({ req, locale, query, defaultLocale, lo
]
unusedQueryParams.forEach((param) => delete query[param])

const savesLink = queryString.stringifyUrl({ url: `${langPrefix}/saves`, query })
// const savesLink = queryString.stringifyUrl({ url: `${langPrefix}/saves`, query })
const homeLink = queryString.stringifyUrl({ url: `${langPrefix}/home`, query })
const destination = homeEligible ? homeLink : savesLink
const destination = homeLink

return {
redirect: {
Expand Down
Loading