import { Box, Card, CardBody, CardHeader, Container, Heading, Link, Stack, StackDivider, Text, VStack, } from "@chakra-ui/react"; import { useLoaderData } from "@remix-run/react"; import { type ReactNode } from "react"; export async function loader({ context }: { context: RequestContext }) { const now = new Date(); const monthEventList = await context.env.D1.prepare( "SELECT * FROM events WHERE month = ? AND year = ?;", ) .bind(now.getUTCMonth() + 1, now.getUTCFullYear()) .all(); if (monthEventList.error) throw new Response(null, { status: 500, }); return monthEventList.results; } export default function () { const data = useLoaderData(); const daysInThisMonth = new Date().setUTCDate(0); const dayCards: ReactNode[] = []; for (let i = 0; i < daysInThisMonth; i++) { const dayData: { [k: string]: any }[] = data.filter( (row) => row.day === i + 1, ); if (!dayData.length) continue; const fotd = dayData.find((d) => d.type === "fotd"); const gamenight = dayData.find((d) => d.type === "gamenight"); const qotd = dayData.find((d) => d.type === "qotd"); const dayCard = ( {new Date( dayData[0].year, dayData[0].month, dayData[0].day, ).toDateString()} } spacing={4}> FACT OF THE DAY {fotd ? "" : "Not"} Booked GAMENIGHT {gamenight ? "" : "Not"} Booked QUESTION OF THE DAY {qotd ? "" : "Not"} Booked ); dayCards.push(dayCard); } return ( {dayCards} ); }