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 { GetChronologyItemsQuery, GetErasQuery } from "graphql/generated"; import { AppStaticProps, getAppStaticProps } from "graphql/getAppStaticProps"; import { getReadySdk } from "graphql/sdk"; import { prettySlug } from "helpers/formatters"; import { isDefined } from "helpers/others"; import { GetStaticPropsContext } from "next"; import { Fragment } from "react"; interface Props extends AppStaticProps { chronologyItems: NonNullable< GetChronologyItemsQuery["chronologyItems"] >["data"]; chronologyEras: NonNullable["data"]; } export default function Chronology(props: Props): JSX.Element { const { chronologyItems, chronologyEras, langui } = props; // 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 /> )} ))} ); 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 && isDefined(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, }; }