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

63 lines
1.5 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
import Layout from 'common/Layout/Layout';
2021-03-20 11:42:17 +00:00
import Header from './components/Header/Header';
interface IndexPageProps {
professions: Profession[];
qualifications: Qualification[];
}
const IndexPage = ({ qualifications }: IndexPageProps) => {
2021-03-20 11:42:17 +00:00
return (
<Layout transparentTopBar absoluteTopBar padding={false}>
<Header qualifications={qualifications} />
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 getStaticProps: GetStaticProps = async () => {
const pageProps: IndexPageProps = { professions: [], qualifications: [] };
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,
revalidate: 60,
};
};
export default IndexPage;