on master help sign in
order future events by earliest event
commitb8987fe040265db88f0f2bc53f03a7ab29858f14 authorJosh Lehman <josh@urbit.org> dateMon 13 Sep 2021, 17:10 (5 years ago) parenta188a48
3 files changed+73−5
components/EventPreview.js+37 pages/events.js+17−4 pages/index.js+19−1
components/EventPreview.js+37
@@ -4,6 +4,7 @@ import {
44 ShowOrHide,
55 ReadableList,
66 Person,
7+ Name,
78 DateRange,
89} from "../components/Snippets";
910import {
@@ -14,6 +15,42 @@ import {
1415 formatTimeZone,
1516} from "../lib/lib";
1617
18+// JAL(2021.9.13) Couldn't quite get this to work properly. There's a trailing
19+// "and"
20+//
21+// function GuestList({ guests, textClass }) {
22+
23+// const renderGuests = guests?.length > 2 ? guests?.slice(0,2) : guests;
24+// const noRenderGuestsCount = guests?.slice(2).length;
25+
26+// return (
27+// <p className={textClass + " type-sub"}>
28+// <b>
29+// {renderGuests?.length > 1 ? "With guests " : "With guest "}
30+// </b>
31+// <ReadableList>
32+// {renderGuests?.map((guest, index) => (
33+// <>
34+// <Person
35+// key={`${guest.name}-${guest.patp}`}
36+// nameClassNames={textClass}
37+// patpClassNames={textClass}
38+// name={guest.name}
39+// patp={guest.patp}
40+// />
41+// {renderGuests?.length > 1 ? <span>, </span> : <></>}
42+// </>
43+// ))}
44+// {noRenderGuestsCount > 1 ?
45+// <Name>{noRenderGuestsCount} more </Name>
46+// :
47+// <></>
48+// }
49+// </ReadableList>
50+// </p>
51+// );
52+// }
53+
1754export default function EventPreview({ event, className, big }) {
1855 // Event tiles have a 'dark mode' used when their background images are dark and white text is needed for legibility.
1956 const grayText = event?.dark ? "text-washedWhite" : "text-wall-400";
pages/events.js+17−4
@@ -34,10 +34,23 @@ export default function Events({ events, search }) {
3434 return ends < now;
3535 });
3636
37− const futureEvents = events.filter((event) => {
38− const starts = generateRealtimeDate(event.starts);
39− return starts > now;
40− });
37+ const futureEvents = events
38+ .filter((event) => {
39+ const starts = generateRealtimeDate(event.starts);
40+ return starts > now;
41+ })
42+ .sort((a, b) => {
43+ const aStarts = generateRealtimeDate(a.starts).ts;
44+ const bStarts = generateRealtimeDate(b.starts).ts;
45+ if (aStarts > bStarts) {
46+ return 1;
47+ } else if (aStarts === bStarts) {
48+ return 0;
49+ }
50+ return -1;
51+ });
52+
53+ console.log(futureEvents);
4154
4255 const happeningNow = events.filter((event) => {
4356 const starts = generateRealtimeDate(event.starts);
pages/index.js+19−1
@@ -1,6 +1,7 @@
11import Head from "next/head";
22import Link from "next/link";
33import React, { useState, useEffect } from "react";
4+import { DateTime } from "luxon";
45
56import Container from "../components/Container";
67import Section from "../components/Section";
@@ -18,6 +19,7 @@ import {
1819 getAllEvents,
1920 formatDate,
2021 getOpenGrantsCount,
22+ generateRealtimeDate,
2123} from "../lib/lib";
2224import { contact, eventKeys } from "../lib/constants";
2325import { useLocalStorage } from "../lib/hooks";
@@ -299,7 +301,23 @@ export async function getStaticProps() {
299301 "blog"
300302 );
301303
302− const events = getAllEvents(eventKeys, "events");
304+ const now = DateTime.now();
305+
306+ const events = getAllEvents(eventKeys, "events")
307+ .filter((event) => {
308+ const starts = generateRealtimeDate(event.starts);
309+ return starts > now;
310+ })
311+ .sort((a, b) => {
312+ const aStarts = generateRealtimeDate(a.starts).ts;
313+ const bStarts = generateRealtimeDate(b.starts).ts;
314+ if (aStarts > bStarts) {
315+ return 1;
316+ } else if (aStarts === bStarts) {
317+ return 0;
318+ }
319+ return -1;
320+ });
303321
304322 return {
305323 props: { posts, events, openGrantsCount },