all repos — caroster @ e05034e4ae972de5a8df40528d270d038c4343e6

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