Add getRecentEvents()
This commit is contained in:
parent
cb3408990d
commit
eaf90b794d
|
@ -73,18 +73,14 @@ export async function getUpcomingEvents(): Promise<Event[]> {
|
||||||
const events: Event[] = (
|
const events: Event[] = (
|
||||||
await Promise.all(
|
await Promise.all(
|
||||||
[
|
[
|
||||||
{ year: currentYear, term: currentTerm },
|
{ year: currentYear.toString(), term: currentTerm },
|
||||||
{ year: nextYear, term: nextTerm },
|
{ year: nextYear.toString(), term: nextTerm },
|
||||||
].map(async ({ year, term }) => {
|
].map(async ({ year, term }) => {
|
||||||
try {
|
try {
|
||||||
const eventsInTerm = await getEventsByTerm(
|
const eventsInTerm = await getEventsByTerm(year, TERMS[term]);
|
||||||
year.toString(),
|
|
||||||
TERMS[term]
|
|
||||||
);
|
|
||||||
return await Promise.all(
|
return await Promise.all(
|
||||||
eventsInTerm.map(
|
eventsInTerm.map(
|
||||||
async (slug) =>
|
async (slug) => await getEventBySlug(year, TERMS[term], slug)
|
||||||
await getEventBySlug(year.toString(), TERMS[term], slug)
|
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
@ -95,7 +91,7 @@ export async function getUpcomingEvents(): Promise<Event[]> {
|
||||||
).flat();
|
).flat();
|
||||||
|
|
||||||
return events
|
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) => {
|
.sort((a, b) => {
|
||||||
return (
|
return (
|
||||||
new Date(a.metadata.date).getTime() -
|
new Date(a.metadata.date).getTime() -
|
||||||
|
|
37
lib/news.ts
37
lib/news.ts
|
@ -65,3 +65,40 @@ export async function getNewsBySlug(
|
||||||
metadata: metadata as Metadata,
|
metadata: metadata as Metadata,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function getRecentNews(): Promise<News[]> {
|
||||||
|
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()
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { ParsedUrlQuery } from "querystring";
|
import { ParsedUrlQuery } from "querystring";
|
||||||
|
|
||||||
import { GetStaticProps } from "next";
|
import { GetStaticProps } from "next";
|
||||||
|
import { MDXRemote } from "next-mdx-remote";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
import { ConnectWithUs } from "@/components/ConnectWithUs";
|
import { ConnectWithUs } from "@/components/ConnectWithUs";
|
||||||
|
@ -11,15 +12,13 @@ import { Image } from "@/components/Image";
|
||||||
import { NewsCard } from "@/components/NewsCard";
|
import { NewsCard } from "@/components/NewsCard";
|
||||||
import { SocialLinks } from "@/components/SocialLinks";
|
import { SocialLinks } from "@/components/SocialLinks";
|
||||||
import { Event, getUpcomingEvents } from "@/lib/events";
|
import { Event, getUpcomingEvents } from "@/lib/events";
|
||||||
|
import { News, getRecentNews } from "@/lib/news";
|
||||||
import UnavailableContent, {
|
|
||||||
metadata as unavailableMetadata,
|
|
||||||
} from "../content/playground/unavailable.news.mdx";
|
|
||||||
|
|
||||||
import styles from "./index.module.css";
|
import styles from "./index.module.css";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
events: Event[];
|
events: Event[];
|
||||||
|
news: News[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function Home(props: Props) {
|
export default function Home(props: Props) {
|
||||||
|
@ -54,27 +53,29 @@ export default function Home(props: Props) {
|
||||||
<h1 className={styles.cardsHeading}>Upcoming Events</h1>
|
<h1 className={styles.cardsHeading}>Upcoming Events</h1>
|
||||||
<p className={styles.cardsDescription}>See past events here</p>
|
<p className={styles.cardsDescription}>See past events here</p>
|
||||||
<hr className={styles.cardsDividingLine} />
|
<hr className={styles.cardsDividingLine} />
|
||||||
|
{props.events.length == 0 ? (
|
||||||
|
<p>
|
||||||
|
There are no upcoming events right now. Please check back later!
|
||||||
|
</p>
|
||||||
|
) : null}
|
||||||
<div className={styles.eventCards}>
|
<div className={styles.eventCards}>
|
||||||
{props.events.length > 0 ? (
|
{props.events.length > 0
|
||||||
props.events
|
? props.events
|
||||||
.slice(0, 2)
|
.slice(0, 2)
|
||||||
.map((event) => (
|
.map((event) => (
|
||||||
<EventDescriptionCard
|
<EventDescriptionCard
|
||||||
{...event.metadata}
|
{...event.metadata}
|
||||||
date={new Date(event.metadata.date)}
|
date={new Date(event.metadata.date)}
|
||||||
key={event.metadata.name + event.metadata.date.toString()}
|
key={
|
||||||
/>
|
event.metadata.name + event.metadata.date.toString()
|
||||||
))
|
}
|
||||||
) : (
|
/>
|
||||||
<p>
|
))
|
||||||
There are no upcoming events right now. Please check back
|
: null}
|
||||||
later!
|
|
||||||
</p>
|
|
||||||
)}
|
|
||||||
{props.events.length > 2 ? (
|
|
||||||
<p>See more upcoming events here</p>
|
|
||||||
) : null}
|
|
||||||
</div>
|
</div>
|
||||||
|
{props.events.length > 2 ? (
|
||||||
|
<p>See more upcoming events here</p>
|
||||||
|
) : null}
|
||||||
</section>
|
</section>
|
||||||
<section className={styles.news} id="news">
|
<section className={styles.news} id="news">
|
||||||
<h1 className={styles.cardsHeading}>News</h1>
|
<h1 className={styles.cardsHeading}>News</h1>
|
||||||
|
@ -83,9 +84,16 @@ export default function Home(props: Props) {
|
||||||
See past news here
|
See past news here
|
||||||
</p>
|
</p>
|
||||||
<hr className={styles.cardsDividingLine} />
|
<hr className={styles.cardsDividingLine} />
|
||||||
<NewsCard {...unavailableMetadata}>
|
{props.news.length > 0 ? (
|
||||||
<UnavailableContent />
|
<NewsCard
|
||||||
</NewsCard>
|
{...props.news[0].metadata}
|
||||||
|
date={new Date(props.news[0].metadata.date)}
|
||||||
|
>
|
||||||
|
<MDXRemote {...props.news[0].content} />
|
||||||
|
</NewsCard>
|
||||||
|
) : (
|
||||||
|
<p>There is no news right now. Please check back later!</p>
|
||||||
|
)}
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -105,5 +113,6 @@ type Params = ParsedUrlQuery;
|
||||||
|
|
||||||
export const getStaticProps: GetStaticProps<Props, Params> = async () => {
|
export const getStaticProps: GetStaticProps<Props, Params> = async () => {
|
||||||
const events = await getUpcomingEvents();
|
const events = await getUpcomingEvents();
|
||||||
return { props: { events } };
|
const news = await getRecentNews();
|
||||||
|
return { props: { events, news } };
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue