This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
website/src/features/IndexPage/IndexPage.tsx

89 lines
2.3 KiB
TypeScript
Raw Normal View History

import { GetStaticProps } from 'next';
import {
createClient,
Profession,
Qualification,
Query,
QueryProfessionsArgs,
} from 'libs/graphql';
import { QUERY_PROFESSIONS } from './queries';
2021-03-17 05:22:49 +00:00
2021-03-27 08:16:54 +00:00
import { Divider } from '@material-ui/core';
2021-04-24 16:39:03 +00:00
import Seo from 'common/Seo/Seo';
import Layout from 'common/Layout/Layout';
2021-03-20 11:42:17 +00:00
import Header from './components/Header/Header';
2021-03-27 07:55:18 +00:00
import Timer from './components/Timer/Timer';
2021-03-27 08:03:42 +00:00
import AboutExam from './components/AboutExam/AboutExam';
2021-03-27 08:16:54 +00:00
import ExamParts from './components/ExamParts/ExamParts';
import CheckMobileApp from './components/CheckMobileApp/CheckMobileApp';
import Professions from './components/Professions/Professions';
2021-11-04 08:23:45 +00:00
import * as Sentry from '@sentry/nextjs';
2021-03-20 11:42:17 +00:00
interface IndexPageProps {
professions: Profession[];
qualifications: Qualification[];
2021-03-27 07:55:18 +00:00
dateOfTheExam: string;
}
const IndexPage = ({
qualifications,
dateOfTheExam,
professions,
}: IndexPageProps) => {
2021-03-20 11:42:17 +00:00
return (
<Layout padding={false}>
2021-04-24 16:39:03 +00:00
<Seo title="Strona główna" />
<Header qualifications={qualifications} />
2021-03-27 07:55:18 +00:00
<Timer dateOfTheExam={dateOfTheExam} />
2021-03-27 08:03:42 +00:00
<AboutExam />
2021-03-27 08:16:54 +00:00
<Divider />
<ExamParts />
<CheckMobileApp />
<Professions professions={professions} />
2021-03-20 11:42:17 +00:00
</Layout>
);
};
const getQualificationsFromProfessions = (
professions: Profession[]
): Qualification[] => {
const map = new Map<number, Qualification>();
professions.forEach(profession => {
profession.qualifications.forEach(qualification => {
map.set(qualification.id, qualification);
});
});
return Array.from(map.values());
};
export const REVALIDATE = 30;
2021-04-14 18:11:35 +00:00
export const getStaticProps: GetStaticProps = async () => {
2021-03-27 07:55:18 +00:00
const pageProps: IndexPageProps = {
professions: [],
qualifications: [],
dateOfTheExam: new Date(process.env.DATE_OF_THE_EXAM ?? 0).toISOString(),
};
const client = createClient();
try {
const resp = await client.request<
Pick<Query, 'professions'>,
QueryProfessionsArgs
>(QUERY_PROFESSIONS, { sort: ['name ASC'] });
if (Array.isArray(resp.professions?.items)) {
pageProps.professions = resp.professions.items;
pageProps.qualifications = getQualificationsFromProfessions(
resp.professions.items
);
}
} catch (e) {}
return {
props: pageProps,
2021-04-14 18:11:35 +00:00
revalidate: REVALIDATE,
};
};
export default IndexPage;