diff --git a/app/calendar/api.ts b/app/calendar/api.ts index c42e157c3..bbeff9221 100644 --- a/app/calendar/api.ts +++ b/app/calendar/api.ts @@ -3,11 +3,17 @@ import { throwIfNotLoggedIn } from "utils/api"; import { eventSchema } from "utils/validators/event"; import service from "./service"; -const plusApi = createRouter().mutation("addEvent", { - input: eventSchema, - resolve({ ctx, input }) { - const user = throwIfNotLoggedIn(ctx.user); - return service.addEvent({ input, userId: user.id }); - }, -}); +const plusApi = createRouter() + .query("events", { + resolve() { + return service.events(); + }, + }) + .mutation("addEvent", { + input: eventSchema, + resolve({ ctx, input }) { + const user = throwIfNotLoggedIn(ctx.user); + return service.addEvent({ input, userId: user.id }); + }, + }); export default plusApi; diff --git a/app/calendar/components/CalendarPage.tsx b/app/calendar/components/CalendarPage.tsx index 5fbd0dd60..a315f2634 100644 --- a/app/calendar/components/CalendarPage.tsx +++ b/app/calendar/components/CalendarPage.tsx @@ -1,18 +1,26 @@ import { Button } from "@chakra-ui/button"; import { Trans } from "@lingui/macro"; import { useState } from "react"; +import { trpc } from "utils/trpc"; import { EventModal } from "./EventModal"; export default function CalendarPage() { + const events = trpc.useQuery(["calendar.events"], { enabled: false }); const [modalIsOpen, setModalIsOpen] = useState(false); + console.log("events", events.data); + return (
{modalIsOpen && ( - setModalIsOpen(false)} event={false} /> + setModalIsOpen(false)} + event={false} + refetchQuery={events.refetch} + /> )}
); diff --git a/app/calendar/components/EventModal.tsx b/app/calendar/components/EventModal.tsx index 5f25ef64e..d2cd032f8 100644 --- a/app/calendar/components/EventModal.tsx +++ b/app/calendar/components/EventModal.tsx @@ -35,9 +35,11 @@ type FormData = z.infer; export function EventModal({ onClose, event, + refetchQuery, }: { onClose: () => void; event: boolean; + refetchQuery: () => void; }) { const toast = useToast(); const { i18n } = useLingui(); @@ -47,7 +49,7 @@ export function EventModal({ const addEvent = trpc.useMutation("calendar.addEvent", { onSuccess() { toast(getToastOptions(t`Event added`, "success")); - //trpc.invalidateQuery(["plus.suggestions"]); + refetchQuery(); onClose(); }, onError(error) { diff --git a/app/calendar/service.ts b/app/calendar/service.ts index b8b3861d4..0cb677c36 100644 --- a/app/calendar/service.ts +++ b/app/calendar/service.ts @@ -2,6 +2,10 @@ import prisma from "prisma/client"; import { eventSchema } from "utils/validators/event"; import * as z from "zod"; +const events = () => { + return prisma.calendarEvent.findMany({ where: { date: { gt: new Date() } } }); +}; + const addEvent = async ({ input, userId, @@ -20,5 +24,6 @@ const addEvent = async ({ }; export default { + events, addEvent, }; diff --git a/pages/calendar.tsx b/pages/calendar.tsx index c12e97a13..65b5f2355 100644 --- a/pages/calendar.tsx +++ b/pages/calendar.tsx @@ -1,21 +1,18 @@ import CalendarPage from "app/calendar/components/CalendarPage"; import HeaderBanner from "components/layout/HeaderBanner"; -// import { ssr } from "pages/api/trpc/[trpc]"; -// import { trpc } from "utils/trpc"; +import { ssr } from "pages/api/trpc/[trpc]"; +import { trpc } from "utils/trpc"; -// export const getStaticProps = async () => { -// await Promise.all([ -// ssr.prefetchQuery("plus.suggestions"), -// ssr.prefetchQuery("plus.statuses"), -// ]); +export const getStaticProps = async () => { + await ssr.prefetchQuery("calendar.events"); -// return { -// props: { -// dehydratedState: trpc.dehydrate(), -// }, -// revalidate: 60, -// }; -// }; + return { + props: { + dehydratedState: trpc.dehydrate(), + }, + revalidate: 60, + }; +}; // @ts-expect-error CalendarPage.header = (