GRV-Summit-Site/lib/calendar.ts
“kirukib” 1a710aa3c6
Some checks are pending
Deploy to Cloudflare Workers (OpenNext) / deploy (push) Waiting to run
first commit + project setup
2026-05-20 11:57:21 +03:00

58 lines
1.7 KiB
TypeScript

import { site } from "@/content/site";
/** Event times in Addis Ababa (EAT, UTC+3) */
const EVENT_START = "20250131T080000";
const EVENT_END = "20250201T180000";
function formatIcsDate(iso: string) {
return iso.replace(/[-:]/g, "").split(".")[0] + "Z";
}
export function buildGoogleCalendarUrl() {
const params = new URLSearchParams({
action: "TEMPLATE",
text: site.name,
dates: `${EVENT_START}/${EVENT_END}`,
details: `${site.tagline}\n\nPresented by ${site.presentedBy}.\n${site.links.legacySite}`,
location: `${site.venue.name}, ${site.venue.address}`,
ctz: "Africa/Addis_Ababa",
});
return `https://calendar.google.com/calendar/render?${params.toString()}`;
}
export function buildOutlookCalendarUrl() {
const params = new URLSearchParams({
path: "/calendar/action/compose",
rru: "addevent",
subject: site.name,
startdt: "2025-01-31T08:00:00",
enddt: "2025-02-01T18:00:00",
body: site.tagline,
location: `${site.venue.name}, ${site.venue.address}`,
});
return `https://outlook.live.com/calendar/0/deeplink/compose?${params.toString()}`;
}
export function buildIcsFileContent() {
const uid = `grv-summit-${site.dates.start}@grvsummit.com`;
const now = formatIcsDate(new Date().toISOString());
return [
"BEGIN:VCALENDAR",
"VERSION:2.0",
"PRODID:-//GRV Summit//EN",
"CALSCALE:GREGORIAN",
"METHOD:PUBLISH",
"BEGIN:VEVENT",
`UID:${uid}`,
`DTSTAMP:${now}`,
`DTSTART;TZID=Africa/Addis_Ababa:20250131T080000`,
`DTEND;TZID=Africa/Addis_Ababa:20250201T180000`,
`SUMMARY:${site.name}`,
`DESCRIPTION:${site.tagline.replace(/\n/g, "\\n")}`,
`LOCATION:${site.venue.name}, ${site.venue.address}`,
"END:VEVENT",
"END:VCALENDAR",
].join("\r\n");
}