import { GetStaticProps } from "next"; import { AppLayout, AppLayoutRequired } from "components/AppLayout"; import { PanelHeader } from "components/PanelComponents/PanelHeader"; import { SubPanel } from "components/Containers/SubPanel"; import { Icon } from "components/Ico"; import { getReadySdk } from "graphql/sdk"; import { GetChroniclesChaptersQuery } from "graphql/generated"; import { filterHasAttributes } from "helpers/asserts"; import { prettySlug } from "helpers/formatters"; import { getOpenGraph } from "helpers/openGraph"; import { TranslatedChroniclesList } from "components/Chronicles/ChroniclesList"; import { HorizontalLine } from "components/HorizontalLine"; import { getLangui } from "graphql/fetchLocalData"; import { atoms } from "contexts/atoms"; import { useAtomGetter } from "helpers/atoms"; /* * ╭────────╮ * ──────────────────────────────────────────╯ PAGE ╰───────────────────────────────────────────── */ interface Props extends AppLayoutRequired { chapters: NonNullable["data"]; } const Chronicles = ({ chapters, ...otherProps }: Props): JSX.Element => { const langui = useAtomGetter(atoms.localData.langui); const subPanel = (
{filterHasAttributes(chapters, ["attributes.chronicles", "id"] as const).map((chapter) => ( ({ title: translation.title, language: translation.language.data.attributes.code, }))} fallback={{ title: prettySlug(chapter.attributes.slug) }} /> ))}
); return ; }; export default Chronicles; /* * ╭──────────────────────╮ * ───────────────────────────────────╯ NEXT DATA FETCHING ╰────────────────────────────────────── */ export const getStaticProps: GetStaticProps = async (context) => { const sdk = getReadySdk(); const langui = getLangui(context.locale); const chronicles = await sdk.getChroniclesChapters(); if (!chronicles.chroniclesChapters?.data) return { notFound: true }; const props: Props = { chapters: chronicles.chroniclesChapters.data, openGraph: getOpenGraph(langui, langui.chronicles ?? "Chronicles"), }; return { props: props, }; };