all repos — caroster @ 123ddd8569ab8d7686c6a10da890601a4d6b3191

[Octree] Group carpool to your event https://caroster.io

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};