import { GetStaticProps } from "next"; import ContentPanel from "components/Panels/ContentPanel"; import SubPanel from "components/Panels/SubPanel"; import ChronologyYearComponent from "components/Chronology/ChronologyYearComponent"; import { GetChronologyItemsQuery, GetErasQuery, } from "graphql/operations-types"; import { getEras, getChronologyItems } from "graphql/operations"; import NavOption from "components/PanelComponents/NavOption"; import AppLayout from "components/AppLayout"; import { prettySlug, prettyTestError, prettyTestWarning, } from "queries/helpers"; import InsetBox from "components/InsetBox"; import { useRouter } from "next/router"; import ReactTooltip from "react-tooltip"; import { AppStaticProps, getAppStaticProps } from "queries/getAppStaticProps"; interface DataChronologyProps extends AppStaticProps { chronologyItems: GetChronologyItemsQuery["chronologyItems"]["data"]; chronologyEras: GetErasQuery["chronologyEras"]["data"]; } export default function DataChronology( props: DataChronologyProps ): JSX.Element { useTesting(props); const { chronologyItems, chronologyEras } = props; // Group by year the Chronology items let chronologyItemYearGroups: GetChronologyItemsQuery["chronologyItems"]["data"][number][][][] = []; chronologyEras.map(() => { chronologyItemYearGroups.push([]); }); let currentChronologyEraIndex = 0; chronologyItems.map((item) => { if ( item.attributes.year > chronologyEras[currentChronologyEraIndex].attributes.ending_year ) { currentChronologyEraIndex++; } if ( !chronologyItemYearGroups[currentChronologyEraIndex].hasOwnProperty( item.attributes.year ) ) { chronologyItemYearGroups[currentChronologyEraIndex][ item.attributes.year ] = [item]; } else { chronologyItemYearGroups[currentChronologyEraIndex][ item.attributes.year ].push(item); } }); const subPanel = ( {chronologyEras.map((era) => ( 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.length > 0 ? chronologyEras[eraIndex].attributes.title[0].title : prettySlug(chronologyEras[eraIndex].attributes.slug)} {chronologyEras[eraIndex].attributes.title.length > 0 ? chronologyEras[eraIndex].attributes.title[0].description : ""} {era.map((items, index) => ( ))} > ))} ); return ( ); } export const getStaticProps: GetStaticProps = async (context) => { const props: DataChronologyProps = { ...(await getAppStaticProps(context)), chronologyItems: ( await getChronologyItems({ language_code: context.locale || "en", }) ).chronologyItems.data, chronologyEras: (await getEras({ language_code: context.locale || "en" })) .chronologyEras.data, }; return { props: props, }; }; function useTesting(props: DataChronologyProps) { const router = useRouter(); const { chronologyItems, chronologyEras } = props; chronologyEras.map((era) => { const chronologyErasURL = "/admin/content-manager/collectionType/api::chronology-era.chronology-era/" + chronologyItems[0].id; if (era.attributes.title.length === 0) { prettyTestError( router, "Missing translation for title and description, using slug instead", ["chronologyEras", era.attributes.slug], chronologyErasURL ); } else if (era.attributes.title.length > 1) { prettyTestError( router, "More than one title and description", ["chronologyEras", era.attributes.slug], chronologyErasURL ); } else { if (!era.attributes.title[0].title) prettyTestError( router, "Missing title, using slug instead", ["chronologyEras", era.attributes.slug], chronologyErasURL ); if (!era.attributes.title[0].description) prettyTestError( router, "Missing description", ["chronologyEras", era.attributes.slug], chronologyErasURL ); } }); chronologyItems.map((item) => { const chronologyItemsURL = "/admin/content-manager/collectionType/api::chronology-item.chronology-item/" + chronologyItems[0].id; const date = `${item.attributes.year}/${item.attributes.month}/${item.attributes.day}`; if (!(item.attributes.events.length > 0)) { prettyTestError( router, "No events for this date", ["chronologyItems", date], chronologyItemsURL ); } else { item.attributes.events.map((event) => { if (!event.source.data) { prettyTestError( router, "No source for this event", ["chronologyItems", date, event.id], chronologyItemsURL ); } if (!(event.translations.length > 0)) { prettyTestWarning( router, "No translation for this event", ["chronologyItems", date, event.id], chronologyItemsURL ); } }); } }); }
{chronologyEras[eraIndex].attributes.title.length > 0 ? chronologyEras[eraIndex].attributes.title[0].description : ""}