70 lines
2.2 KiB
TypeScript
70 lines
2.2 KiB
TypeScript
/**
|
|||
* This page is empty for the user, it is used only to take advantage of the
|
|||
* caching system that NextJS uses SSG pages.
|
|||
* TODO: Redirect to user profile on browser
|
|||
*/
|
|||
import type { GetStaticPaths, GetStaticProps, InferGetStaticPropsType } from "next";
|
|||
import { z } from "zod";
|
|||
|
|||
import getCalendarsEvents from "@calcom/core/getCalendarsEvents";
|
|||
import dayjs from "@calcom/dayjs";
|
|||
import prisma from "@calcom/prisma";
|
|||
|
|||
const paramsSchema = z.object({ user: z.string(), month: z.string() });
|
|||
export const getStaticProps: GetStaticProps<
|
|||
{ results: Awaited<ReturnType<typeof getCalendarsEvents>> },
|
|||
{ user: string }
|
|||
> = async (context) => {
|
|||
const { user: username, month } = paramsSchema.parse(context.params);
|
|||
const userWithCredentials = await prisma.user.findFirst({
|
|||
where: {
|
|||
username,
|
|||
},
|
|||
select: {
|
|||
id: true,
|
|||
username: true,
|
|||
credentials: true,
|
|||
selectedCalendars: true,
|
|||
},
|
|||
});
|
|||
// Subtract 11 hours from the start date to avoid problems in UTC- time zones.
|
|||
const startDate = dayjs.utc(month, "YYYY-MM").startOf("day").subtract(11, "hours").format();
|
|||
// Add 14 hours from the start date to avoid problems in UTC+ time zones.
|
|||
const endDate = dayjs.utc(month, "YYYY-MM").endOf("month").add(14, "hours").format();
|
|||
|
try {
|
||
const results = userWithCredentials?.credentials
|
|||
? await getCalendarsEvents(
|
|||
userWithCredentials?.credentials,
|
|||
startDate,
|
|||
endDate,
|
|||
userWithCredentials?.selectedCalendars
|
|||
|
)
|
||
: [];
|
|||
|
|||
|
return {
|
||
props: { results, date: new Date().toISOString() },
|
|||
revalidate: 1,
|
|||
};
|
|||
} catch (error) {
|
|||
|
let message = "Unknown error while fetching calendar";
|
||
|
if (error instanceof Error) message = error.message;
|
||
console.error(error, message);
|
|||
return {
|
|||
props: { results: [], date: new Date().toISOString(), message },
|
|||
revalidate: 1,
|
|||
};
|
|||
}
|
|||
};
|
|||
|
|||
export const getStaticPaths: GetStaticPaths = () => {
|
|||
return {
|
|||
paths: [],
|
|||
fallback: "blocking",
|
|||
};
|
|||
};
|
|||
type Props = InferGetStaticPropsType<typeof getStaticProps>;
|
|||
const CalendarCache = (props: Props) =>
|
|||
process.env.NODE_ENV === "development" ? <pre>{JSON.stringify(props, null, " ")}</pre> : <div />;
|
|||
|
|||
export default CalendarCache;
|