frontend/lib/pageUtils.ts (view raw)
1import {ApolloClient} from '@apollo/client';
2import {getSession} from 'next-auth/react';
3import {ProfileDocument, SettingDocument} from '../generated/graphql';
4import {initializeApollo, APOLLO_STATE_PROP_NAME} from './apolloClient';
5
6type ServerSideExtension = (
7 context: any,
8 apolloClient: ApolloClient<any>
9) => Promise<Object | void>;
10
11const getServerSideProps =
12 (extension?: ServerSideExtension) => async (context: any) => {
13 const session = await getSession(context);
14 const {STRAPI_URL = 'http://localhost:1337'} = process.env;
15 const apolloClient = await initializeApollo(
16 `${STRAPI_URL}/graphql`,
17 session
18 );
19 const locale = session?.user?.lang || 'fr';
20
21 try {
22 await apolloClient.query({
23 query: SettingDocument,
24 variables: {locale},
25 });
26
27 if (session)
28 await apolloClient.query({
29 query: ProfileDocument,
30 });
31
32 let extensionProps = {};
33 if (extension)
34 extensionProps = (await extension(context, apolloClient)) || {};
35
36 return {
37 props: {
38 session,
39 [APOLLO_STATE_PROP_NAME]: apolloClient.cache.extract(),
40 ...extensionProps,
41 },
42 };
43 } catch (error) {
44 console.error(error);
45 return {
46 props: {session},
47 };
48 }
49 };
50
51export default {
52 getServerSideProps,
53};