Skip to content

Commit 623a040

Browse files
author
Peter Bengtsson
authored
use defaultfallback data for apisession (github#29719)
* don't get available languages from session * update useSession * one more fix * use default session till XHR comes in * warn on error
1 parent 4f4d7d8 commit 623a040

File tree

2 files changed

+30
-9
lines changed

2 files changed

+30
-9
lines changed

components/hooks/useSession.ts

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import type { ThemeProviderProps } from '@primer/react'
2+
import { useRouter } from 'next/router'
3+
import { useEffect } from 'react'
24
import useSWR from 'swr'
35

6+
import { getTheme } from '../../lib/get-theme'
7+
48
export default async function fetcher<JSON = any>(
59
input: RequestInfo,
610
init?: RequestInit
@@ -11,7 +15,7 @@ export default async function fetcher<JSON = any>(
1115

1216
export type Session = {
1317
isSignedIn: boolean
14-
csrfToken: string
18+
csrfToken?: string
1519
userLanguage: string // en, es, ja, cn
1620
theme: {
1721
colorMode: Pick<ThemeProviderProps, 'colorMode'>
@@ -25,8 +29,27 @@ export type Session = {
2529
}
2630
}
2731

32+
const defaultSession: Session = {
33+
isSignedIn: false,
34+
userLanguage: 'en', // en, es, ja, cn
35+
theme: getTheme({}), // as if no cookie was present
36+
themeCss: getTheme({}, true), // as if no cookie was present
37+
}
2838
// React hook version
2939
export function useSession() {
30-
const { data: session, error } = useSWR<Session>('/api/session', fetcher)
31-
return { session, isLoadingSession: !error && !session }
40+
const { locale } = useRouter()
41+
42+
const { data: session, error } = useSWR<Session>('/api/session', fetcher, {
43+
// Use the current language, as per the URL, until we know what the
44+
// user actually prefers.
45+
fallbackData: Object.assign({}, defaultSession, { userLanguage: locale }),
46+
})
47+
48+
useEffect(() => {
49+
if (error) {
50+
console.warn('An error occurred loading the user session', error)
51+
}
52+
}, [error])
53+
54+
return { session }
3255
}

pages/_app.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@ type MyAppProps = AppProps & {
1919
type colorModeAuto = Pick<ThemeProviderProps, 'colorMode'>
2020

2121
const MyApp = ({ Component, pageProps, languagesContext }: MyAppProps) => {
22-
const { session, isLoadingSession } = useSession()
22+
const { session } = useSession()
2323
useEffect(() => {
24-
events(session?.csrfToken)
24+
if (session?.csrfToken) {
25+
events(session.csrfToken)
26+
}
2527
experiment()
2628
}, [session])
2729

@@ -64,10 +66,6 @@ const MyApp = ({ Component, pageProps, languagesContext }: MyAppProps) => {
6466
data-color-mode={session?.themeCss?.colorMode || 'auto'}
6567
data-dark-theme={session?.themeCss?.nightTheme || 'dark'}
6668
data-light-theme={session?.themeCss?.dayTheme || 'light'}
67-
style={
68-
/* render a mostly gray background until we know the color mode via XHR */
69-
{ opacity: isLoadingSession ? 0.1 : 1 }
70-
}
7169
>
7270
<LanguagesContext.Provider value={languagesContext}>
7371
<Component {...pageProps} />

0 commit comments

Comments
 (0)