diff options
| author | Raphael Kabo <raphaelkabo@hey.com> | 2024-05-27 09:56:57 +0100 | 
|---|---|---|
| committer | Raphael Kabo <raphaelkabo@hey.com> | 2024-05-27 09:56:57 +0100 | 
| commit | 2be06712a8e258d2ee2b7b910af7fbc6150a3c34 (patch) | |
| tree | 38c8073045f1511b6c8ae1c658130093d3d884e7 /src/routes | |
| parent | 6d374b13854d0f60928e826b9873b1d74143ff96 (diff) | |
Improve event lists
Diffstat (limited to 'src/routes')
| -rw-r--r-- | src/routes/frontend.ts | 39 | 
1 files changed, 24 insertions, 15 deletions
diff --git a/src/routes/frontend.ts b/src/routes/frontend.ts index 86ad69c..14bb779 100644 --- a/src/routes/frontend.ts +++ b/src/routes/frontend.ts @@ -18,6 +18,7 @@ import {  import MagicLink from "../models/MagicLink.js";  import { getConfigMiddleware } from "../lib/middleware.js";  import { getMessage } from "../util/messages.js"; +import { EventListEvent, bucketEventsByMonth } from "../lib/event.js";  const router = Router(); @@ -89,7 +90,7 @@ router.get("/events", async (_: Request, res: Response) => {          .populate("eventGroup")          .lean()          .sort("start"); -    const updatedEvents = events.map((event) => { +    const updatedEvents: EventListEvent[] = events.map((event) => {          const startMoment = moment.tz(event.start, event.timezone);          const endMoment = moment.tz(event.end, event.timezone);          const isSameDay = startMoment.isSame(endMoment, "day"); @@ -105,14 +106,16 @@ router.get("/events", async (_: Request, res: Response) => {                    )}`,              eventHasConcluded: endMoment.isBefore(moment.tz(event.timezone)),              eventGroup: event.eventGroup as any as IEventGroup, +            startMoment, +            endMoment,          };      }); -    const upcomingEvents = updatedEvents.filter( -        (event) => event.eventHasConcluded === false, -    ); -    const pastEvents = updatedEvents.filter( -        (event) => event.eventHasConcluded === true, -    ); +    const upcomingEventsInMonthBuckets = updatedEvents +        .filter((event) => event.eventHasConcluded === false) +        .reduce(bucketEventsByMonth, []); +    const pastEventsInMonthBuckets = updatedEvents +        .filter((event) => event.eventHasConcluded === true) +        .reduce(bucketEventsByMonth, []);      const eventGroups = await EventGroup.find({          showOnPublicList: true,      }).lean(); @@ -130,8 +133,8 @@ router.get("/events", async (_: Request, res: Response) => {      res.render("publicEventList", {          title: "Public events", -        upcomingEvents: upcomingEvents, -        pastEvents: pastEvents, +        upcomingEvents: upcomingEventsInMonthBuckets, +        pastEvents: pastEventsInMonthBuckets,          eventGroups: updatedEventGroups,          instanceDescription: instanceDescription(),          instanceRules: instanceRules(), @@ -425,7 +428,7 @@ router.get("/group/:eventGroupID", async (req: Request, res: Response) => {              .lean()              .sort("start"); -        const updatedEvents = events.map((event) => { +        const updatedEvents: EventListEvent[] = events.map((event) => {              const startMoment = moment.tz(event.start, event.timezone);              const endMoment = moment.tz(event.end, event.timezone);              const isSameDay = startMoment.isSame(endMoment, "day"); @@ -442,12 +445,18 @@ router.get("/group/:eventGroupID", async (req: Request, res: Response) => {                  eventHasConcluded: endMoment.isBefore(                      moment.tz(event.timezone),                  ), +                startMoment, +                endMoment,              };          }); -        const upcomingEventsExist = updatedEvents.some( -            (e) => !e.eventHasConcluded, -        ); +        const upcomingEventsInMonthBuckets = updatedEvents +            .filter((event) => !event.eventHasConcluded) +            .reduce(bucketEventsByMonth, []); + +        const pastEventsInMonthBuckets = updatedEvents +            .filter((event) => event.eventHasConcluded) +            .reduce(bucketEventsByMonth, []);          let firstLoad = false;          if (eventGroup.firstLoad === true) { @@ -494,8 +503,8 @@ router.get("/group/:eventGroupID", async (req: Request, res: Response) => {              title: eventGroup.name,              eventGroupData: eventGroup,              escapedName: escapedName, -            events: updatedEvents, -            upcomingEventsExist: upcomingEventsExist, +            upcomingEvents: upcomingEventsInMonthBuckets, +            pastEvents: pastEventsInMonthBuckets,              parsedDescription: parsedDescription,              editingEnabled: editingEnabled,              eventGroupHasCoverImage: eventGroupHasCoverImage,  | 
