From 80890eef2aede4d57fe86dacf32fc01d75440205 Mon Sep 17 00:00:00 2001 From: Amy Date: Thu, 19 Aug 2021 01:47:25 -0400 Subject: [PATCH] Add getRecentEvents() --- lib/events.ts | 14 ++++------- lib/news.ts | 37 +++++++++++++++++++++++++++++ pages/index.tsx | 63 ++++++++++++++++++++++++++++--------------------- 3 files changed, 78 insertions(+), 36 deletions(-) diff --git a/lib/events.ts b/lib/events.ts index be78c66a..c9725f61 100644 --- a/lib/events.ts +++ b/lib/events.ts @@ -73,18 +73,14 @@ export async function getUpcomingEvents(): Promise { const events: Event[] = ( await Promise.all( [ - { year: currentYear, term: currentTerm }, - { year: nextYear, term: nextTerm }, + { year: currentYear.toString(), term: currentTerm }, + { year: nextYear.toString(), term: nextTerm }, ].map(async ({ year, term }) => { try { - const eventsInTerm = await getEventsByTerm( - year.toString(), - TERMS[term] - ); + const eventsInTerm = await getEventsByTerm(year, TERMS[term]); return await Promise.all( eventsInTerm.map( - async (slug) => - await getEventBySlug(year.toString(), TERMS[term], slug) + async (slug) => await getEventBySlug(year, TERMS[term], slug) ) ); } catch (error) { @@ -95,7 +91,7 @@ export async function getUpcomingEvents(): Promise { ).flat(); return events - .filter((ev) => new Date(ev.metadata.date).getTime() > Date.now()) + .filter((ev) => new Date(ev.metadata.date).getTime() >= Date.now()) .sort((a, b) => { return ( new Date(a.metadata.date).getTime() - diff --git a/lib/news.ts b/lib/news.ts index 0d9b8bdd..6329964b 100644 --- a/lib/news.ts +++ b/lib/news.ts @@ -65,3 +65,40 @@ export async function getNewsBySlug( metadata: metadata as Metadata, }; } + +export async function getRecentNews(): Promise { + const today = new Date(); + const currentYear = today.getFullYear(); + const currentTerm = Math.trunc(today.getMonth() / 4); + const prevYear = currentTerm > 0 ? currentYear : currentYear - 1; + const prevTerm = (currentTerm - 1 + 3) % 3; + + const news: News[] = ( + await Promise.all( + [ + { year: currentYear.toString(), term: currentTerm }, + { year: prevYear.toString(), term: prevTerm }, + ].map(async ({ year, term }) => { + try { + const newsInTerm = await getNewsByTerm(year, TERMS[term]); + return await Promise.all( + newsInTerm.map( + async (slug) => await getNewsBySlug(year, TERMS[term], slug) + ) + ); + } catch (error) { + return []; + } + }) + ) + ).flat(); + + return news + .filter((news) => new Date(news.metadata.date).getTime() <= Date.now()) + .sort((a, b) => { + return ( + new Date(b.metadata.date).getTime() - + new Date(a.metadata.date).getTime() + ); + }); +} diff --git a/pages/index.tsx b/pages/index.tsx index edb4d65c..6fe67c11 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -1,6 +1,7 @@ import { ParsedUrlQuery } from "querystring"; import { GetStaticProps } from "next"; +import { MDXRemote } from "next-mdx-remote"; import React from "react"; import { ConnectWithUs } from "@/components/ConnectWithUs"; @@ -11,15 +12,13 @@ import { Image } from "@/components/Image"; import { NewsCard } from "@/components/NewsCard"; import { SocialLinks } from "@/components/SocialLinks"; import { Event, getUpcomingEvents } from "@/lib/events"; - -import UnavailableContent, { - metadata as unavailableMetadata, -} from "../content/playground/unavailable.news.mdx"; +import { News, getRecentNews } from "@/lib/news"; import styles from "./index.module.css"; interface Props { events: Event[]; + news: News[]; } export default function Home(props: Props) { @@ -54,27 +53,29 @@ export default function Home(props: Props) {

Upcoming Events

See past events here


+ {props.events.length == 0 ? ( +

+ There are no upcoming events right now. Please check back later! +

+ ) : null}
- {props.events.length > 0 ? ( - props.events - .slice(0, 2) - .map((event) => ( - - )) - ) : ( -

- There are no upcoming events right now. Please check back - later! -

- )} - {props.events.length > 2 ? ( -

See more upcoming events here

- ) : null} + {props.events.length > 0 + ? props.events + .slice(0, 2) + .map((event) => ( + + )) + : null}
+ {props.events.length > 2 ? ( +

See more upcoming events here

+ ) : null}

News

@@ -83,9 +84,16 @@ export default function Home(props: Props) { See past news here


- - - + {props.news.length > 0 ? ( + + + + ) : ( +

There is no news right now. Please check back later!

+ )}
@@ -105,5 +113,6 @@ type Params = ParsedUrlQuery; export const getStaticProps: GetStaticProps = async () => { const events = await getUpcomingEvents(); - return { props: { events } }; + const news = await getRecentNews(); + return { props: { events, news } }; };