import AppLayout from "components/AppLayout"; import InsetBox from "components/InsetBox"; import NavOption from "components/PanelComponents/NavOption"; import ReturnButton, { ReturnButtonType, } from "components/PanelComponents/ReturnButton"; import ContentPanel from "components/Panels/ContentPanel"; import SubPanel from "components/Panels/SubPanel"; import ChronologyYearComponent from "components/Wiki/Chronology/ChronologyYearComponent"; import { useAppLayout } from "contexts/AppLayoutContext"; import { GetChronologyItemsQuery, GetErasQuery } from "graphql/generated"; import { getReadySdk } from "graphql/sdk"; import { GetStaticPropsContext } from "next"; import { AppStaticProps, getAppStaticProps } from "helpers/getAppStaticProps"; import { prettySlug } from "helpers/helpers"; interface Props extends AppStaticProps { chronologyItems: Exclude< GetChronologyItemsQuery["chronologyItems"], null | undefined >["data"]; chronologyEras: Exclude< GetErasQuery["chronologyEras"], null | undefined >["data"]; } export default function Chronology(props: Props): JSX.Element { const { chronologyItems, chronologyEras, langui } = props; const appLayout = useAppLayout(); // Group by year the Chronology items const chronologyItemYearGroups: Props["chronologyItems"][number][][][] = []; chronologyEras.map(() => { chronologyItemYearGroups.push([]); }); let currentChronologyEraIndex = 0; chronologyItems.map((item) => { if (item.attributes) { if ( item.attributes.year > (chronologyEras[currentChronologyEraIndex].attributes?.ending_year ?? 999999) ) { currentChronologyEraIndex += 1; } if ( Object.prototype.hasOwnProperty.call( chronologyItemYearGroups[currentChronologyEraIndex], item.attributes.year ) ) { chronologyItemYearGroups[currentChronologyEraIndex][ item.attributes.year ].push(item); } else { chronologyItemYearGroups[currentChronologyEraIndex][ item.attributes.year ] = [item]; } } }); const subPanel = ( {chronologyEras.map((era) => ( <> {era.attributes && ( 0 && era.attributes.title[0] ? era.attributes.title[0].title : prettySlug(era.attributes.slug) } subtitle={`${era.attributes.starting_year} → ${era.attributes.ending_year}`} border onClick={() => appLayout.setSubPanelOpen(false)} /> )} > ))} ); const contentPanel = ( {chronologyItemYearGroups.map((era, eraIndex) => ( <> {chronologyEras[eraIndex].attributes?.title?.[0] ? chronologyEras[eraIndex].attributes?.title?.[0]?.title : prettySlug(chronologyEras[eraIndex].attributes?.slug)} {chronologyEras[eraIndex].attributes?.title?.[0] ? chronologyEras[eraIndex].attributes?.title?.[0]?.description : ""} {era.map((items, index) => ( <> {items[0].attributes?.year && ( )} > ))} > ))} ); return ( ); } export async function getStaticProps( context: GetStaticPropsContext ): Promise<{ notFound: boolean } | { props: Props }> { const sdk = getReadySdk(); const chronologyItems = await sdk.getChronologyItems({ language_code: context.locale ?? "en", }); const chronologyEras = await sdk.getEras({ language_code: context.locale ?? "en", }); if (!chronologyItems.chronologyItems || !chronologyEras.chronologyEras) return { notFound: true }; const props: Props = { ...(await getAppStaticProps(context)), chronologyItems: chronologyItems.chronologyItems.data, chronologyEras: chronologyEras.chronologyEras.data, }; return { props: props, }; }
{chronologyEras[eraIndex].attributes?.title?.[0] ? chronologyEras[eraIndex].attributes?.title?.[0]?.description : ""}