diff options
Diffstat (limited to 'src/routes/frontend.ts')
-rw-r--r-- | src/routes/frontend.ts | 130 |
1 files changed, 69 insertions, 61 deletions
diff --git a/src/routes/frontend.ts b/src/routes/frontend.ts index fca14c6..0f46098 100644 --- a/src/routes/frontend.ts +++ b/src/routes/frontend.ts @@ -25,64 +25,7 @@ const router = Router(); // Add config middleware to all routes router.use(getConfigMiddleware); -router.get("/", (_, res) => { - if (res.locals.config?.general.show_public_event_list) { - return res.redirect("/events"); - } - return res.render("home", { - ...frontendConfig(res), - instanceRules: instanceRules(), - instanceDescription: instanceDescription(), - }); -}); - -router.get("/about", (_: Request, res: Response) => { - return res.render("home", { - ...frontendConfig(res), - instanceRules: instanceRules(), - instanceDescription: instanceDescription(), - }); -}); - -router.get("/new", (_: Request, res: Response) => { - if (res.locals.config?.general.creator_email_addresses?.length) { - return res.render("createEventMagicLink", frontendConfig(res)); - } - return res.render("newevent", { - title: i18next.t("frontend.newevent"), - ...frontendConfig(res), - }); -}); - -router.get("/new/:magicLinkToken", async (req: Request, res: Response) => { - // If we don't have any creator email addresses, we don't need to check the magic link - // so we can just redirect to the new event page - if (!res.locals.config?.general.creator_email_addresses?.length) { - return res.redirect("/new"); - } - const magicLink = await MagicLink.findOne({ - token: req.params.magicLinkToken, - expiryTime: { $gt: new Date() }, - permittedActions: "createEvent", - }); - if (!magicLink) { - return res.render("createEventMagicLink", { - ...frontendConfig(res), - message: { - type: "danger", - text: i18next.t("routes.magiclink-invalid"), - }, - }); - } - res.render("newevent", { - title: i18next.t("frontend.newevent"), - ...frontendConfig(res), - magicLinkToken: req.params.magicLinkToken, - creatorEmail: magicLink.email, - }); -}); - -router.get("/events", async (_: Request, res: Response) => { +const evtrun = async (_: Request, res: Response) => { if (!res.locals.config?.general.show_public_event_list) { return res.status(404).render("404", frontendConfig(res)); } @@ -93,21 +36,26 @@ router.get("/events", async (_: Request, res: Response) => { const updatedEvents: EventListEvent[] = events.map((event) => { const startMoment = moment.tz(event.start, event.timezone); const endMoment = moment.tz(event.end, event.timezone); + let eventStartISO = moment.tz(event.start, "Etc/UTC").toISOString(); + let eventEndISO = moment.tz(event.end, "Etc/UTC").toISOString(); const isSameDay = startMoment.isSame(endMoment, "day"); + const calfmt = 'dddd, MMMM D ยท h:mma' return { id: event.id, name: event.name, location: event.location, displayDate: isSameDay - ? startMoment.format("LL") - : `${startMoment.format("LL")} - ${endMoment.format( - "LL", + ? startMoment.format(calfmt) + : `${startMoment.format(calfmt)} - ${endMoment.format( + calfmt, )}`, eventHasConcluded: endMoment.isBefore(moment.tz(event.timezone)), eventGroup: event.eventGroup as any as IEventGroup, startMoment, endMoment, + eventStartISO, + eventEndISO, }; }); const upcomingEventsInMonthBuckets = updatedEvents @@ -140,8 +88,68 @@ router.get("/events", async (_: Request, res: Response) => { instanceRules: instanceRules(), ...frontendConfig(res), }); +} + +router.get("/", evtrun); +// router.get("/", (_, res) => { +// if (res.locals.config?.general.show_public_event_list) { +// return evt(); +// } +// return res.render("home", { +// ...frontendConfig(res), +// instanceRules: instanceRules(), +// instanceDescription: instanceDescription(), +// }); +// }); + +router.get("/about", (_: Request, res: Response) => { + return res.render("home", { + ...frontendConfig(res), + instanceRules: instanceRules(), + instanceDescription: instanceDescription(), + }); +}); + +router.get("/new", (_: Request, res: Response) => { + if (res.locals.config?.general.creator_email_addresses?.length) { + return res.render("createEventMagicLink", frontendConfig(res)); + } + return res.render("newevent", { + title: i18next.t("frontend.newevent"), + ...frontendConfig(res), + }); }); +router.get("/new/:magicLinkToken", async (req: Request, res: Response) => { + // If we don't have any creator email addresses, we don't need to check the magic link + // so we can just redirect to the new event page + if (!res.locals.config?.general.creator_email_addresses?.length) { + return res.redirect("/new"); + } + const magicLink = await MagicLink.findOne({ + token: req.params.magicLinkToken, + expiryTime: { $gt: new Date() }, + permittedActions: "createEvent", + }); + if (!magicLink) { + return res.render("createEventMagicLink", { + ...frontendConfig(res), + message: { + type: "danger", + text: i18next.t("routes.magiclink-invalid"), + }, + }); + } + res.render("newevent", { + title: i18next.t("frontend.newevent"), + ...frontendConfig(res), + magicLinkToken: req.params.magicLinkToken, + creatorEmail: magicLink.email, + }); +}); + +// router.get("/events", evt); + router.get("/:eventID", async (req: Request, res: Response) => { try { const event = await Event.findOne({ |