From 64031668c19bfeaf462a561552f9181dc63f19b8 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Sun, 17 Mar 2024 23:16:55 +0100 Subject: [PATCH] Fix theme error on ssr --- front/apps/web/src/pages/_app.tsx | 57 ++++++++++--------- front/packages/models/src/account-internal.ts | 3 +- 2 files changed, 31 insertions(+), 29 deletions(-) diff --git a/front/apps/web/src/pages/_app.tsx b/front/apps/web/src/pages/_app.tsx index a606bcbd..b553e409 100755 --- a/front/apps/web/src/pages/_app.tsx +++ b/front/apps/web/src/pages/_app.tsx @@ -210,37 +210,40 @@ App.getInitialProps = async (ctx: AppContext) => { if (typeof window !== "undefined") return { pageProps: superjson.serialize(appProps.pageProps) }; - const getUrl = Component.getFetchUrls; - const getLayoutUrl = - Component.getLayout && "Layout" in Component.getLayout - ? Component.getLayout.Layout.getFetchUrls - : Component.getLayout?.getFetchUrls; - const urls: QueryIdentifier[] = [ - ...(getUrl ? getUrl(ctx.router.query as any, items) : []), - ...(getLayoutUrl ? getLayoutUrl(ctx.router.query as any, items) : []), - // always include server info for guest permissions. - { path: ["info"], parser: ServerInfoP }, - ]; + try { + const getUrl = Component.getFetchUrls; + const getLayoutUrl = + Component.getLayout && "Layout" in Component.getLayout + ? Component.getLayout.Layout.getFetchUrls + : Component.getLayout?.getFetchUrls; + const urls: QueryIdentifier[] = [ + ...(getUrl ? getUrl(ctx.router.query as any, items) : []), + ...(getLayoutUrl ? getLayoutUrl(ctx.router.query as any, items) : []), + // always include server info for guest permissions. + { path: ["info"], parser: ServerInfoP }, + ]; - setSsrApiUrl(); + setSsrApiUrl(); - const account = readCookie(ctx.ctx.req?.headers.cookie, "account", AccountP); - if (account) urls.push({ path: ["auth", "me"], parser: UserP }); - const [authToken, token, error] = await getTokenWJ(account); - if (error) appProps.pageProps.ssrError = error; - else { - const client = (await fetchQuery(urls, authToken))!; - appProps.pageProps.queryState = dehydrate(client); - if (account) { - appProps.pageProps.token = token; - appProps.pageProps.account = { - ...client.getQueryData(["auth", "me"]), - ...account, - }; + const account = readCookie(ctx.ctx.req?.headers.cookie, "account", AccountP); + if (account) urls.push({ path: ["auth", "me"], parser: UserP }); + const [authToken, token, error] = await getTokenWJ(account); + if (error) appProps.pageProps.ssrError = error; + else { + const client = (await fetchQuery(urls, authToken))!; + appProps.pageProps.queryState = dehydrate(client); + if (account) { + appProps.pageProps.token = token; + appProps.pageProps.account = { + ...client.getQueryData(["auth", "me"]), + ...account, + }; + } } + appProps.pageProps.theme = readCookie(ctx.ctx.req?.headers.cookie, "theme") ?? "auto"; + } catch (e) { + console.error("SSR error, disabling it."); } - appProps.pageProps.theme = readCookie(ctx.ctx.req?.headers.cookie, "theme") ?? "auto"; - return { pageProps: superjson.serialize(appProps.pageProps) }; }; diff --git a/front/packages/models/src/account-internal.ts b/front/packages/models/src/account-internal.ts index 79a4ebe2..b8d4be89 100644 --- a/front/packages/models/src/account-internal.ts +++ b/front/packages/models/src/account-internal.ts @@ -62,8 +62,7 @@ export const readCookie = ( } if (c.indexOf(name) == 0) { const str = c.substring(name.length, c.length); - const ret = JSON.parse(str); - return parser ? parser.parse(ret) : ret; + return parser ? parser.parse(JSON.parse(str)) : str; } } return null;