all repos — caroster @ d8b50fcea8125de6998c9781d73e18b9372aff9e

[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';
 5import {getCookie} from './cookies';
 6
 7type ServerSideExtension = (
 8  context: any,
 9  apolloClient: ApolloClient<any>
10) => Promise<Object | void>;
11
12const getServerSideProps =
13  (extension?: ServerSideExtension) => async (context: any) => {
14    const session = await getSession(context);
15    const {STRAPI_URL = 'http://localhost:1337'} = process.env;
16    const apolloClient = initializeApollo(`${STRAPI_URL}/graphql`, session);
17    const locale = session?.user?.lang || 'fr';
18
19    try {
20      const {
21        data: {setting = {}},
22      } = await apolloClient.query({
23        query: SettingDocument,
24        variables: {locale},
25      });
26      let announcement = setting?.data?.attributes?.announcement || '';
27      const lastAnnouncementSeen = getCookie(
28        'lastAnnouncementSeen',
29        context.req.headers.cookie
30      );
31
32      if (!announcement || announcement === lastAnnouncementSeen)
33        announcement = null;
34
35      if (session)
36        await apolloClient.query({
37          query: ProfileDocument,
38        });
39
40      let extensionProps = {};
41      if (extension)
42        extensionProps = (await extension(context, apolloClient)) || {};
43
44      return {
45        props: {
46          session,
47          announcement,
48          [APOLLO_STATE_PROP_NAME]: apolloClient.cache.extract(),
49          ...extensionProps,
50        },
51      };
52    } catch (error) {
53      console.error(error);
54      return {
55        props: {session},
56      };
57    }
58  };
59
60export default {
61  getServerSideProps,
62};