From 062c0d3d098c5e7da370e34094bdb8fff598f225 Mon Sep 17 00:00:00 2001 From: Bruno Bernardino Date: Mon, 18 Mar 2024 19:18:29 +0000 Subject: [PATCH] Add CalDav routes and methods, with mock data --- fresh.gen.ts | 8 + islands/calendar/MainCalendar.tsx | 42 ++- lib/data/calendar.ts | 250 ++++++++++++++++++ lib/types.ts | 23 +- lib/utils.ts | 113 +++++++- routes/.well-known/caldav.tsx | 7 + routes/calendar.tsx | 100 +------ routes/dav/calendars.tsx | 133 ++++++++++ routes/dav/calendars/[calendarId].tsx | 209 +++++++++++++++ .../[calendarId]/[calendarEventId].ics.tsx | 229 ++++++++++++++++ routes/dav/principals.tsx | 9 + 11 files changed, 1008 insertions(+), 115 deletions(-) create mode 100644 lib/data/calendar.ts create mode 100644 routes/.well-known/caldav.tsx create mode 100644 routes/dav/calendars.tsx create mode 100644 routes/dav/calendars/[calendarId].tsx create mode 100644 routes/dav/calendars/[calendarId]/[calendarEventId].ics.tsx diff --git a/fresh.gen.ts b/fresh.gen.ts index b07b214..03ce848 100644 --- a/fresh.gen.ts +++ b/fresh.gen.ts @@ -2,6 +2,7 @@ // This file SHOULD be checked into source version control. // This file is automatically updated during development when running `dev.ts`. +import * as $_well_known_caldav from './routes/.well-known/caldav.tsx'; import * as $_well_known_carddav from './routes/.well-known/carddav.tsx'; import * as $_404 from './routes/_404.tsx'; import * as $_app from './routes/_app.tsx'; @@ -24,6 +25,9 @@ import * as $dashboard from './routes/dashboard.tsx'; import * as $dav_addressbooks from './routes/dav/addressbooks.tsx'; import * as $dav_addressbooks_contacts from './routes/dav/addressbooks/contacts.tsx'; import * as $dav_addressbooks_contacts_contactId_vcf from './routes/dav/addressbooks/contacts/[contactId].vcf.tsx'; +import * as $dav_calendars from './routes/dav/calendars.tsx'; +import * as $dav_calendars_calendarId_ from './routes/dav/calendars/[calendarId].tsx'; +import * as $dav_calendars_calendarId_calendarEventId_ics from './routes/dav/calendars/[calendarId]/[calendarEventId].ics.tsx'; import * as $dav_files from './routes/dav/files.tsx'; import * as $dav_index from './routes/dav/index.tsx'; import * as $dav_principals from './routes/dav/principals.tsx'; @@ -47,6 +51,7 @@ import { type Manifest } from '$fresh/server.ts'; const manifest = { routes: { + './routes/.well-known/caldav.tsx': $_well_known_caldav, './routes/.well-known/carddav.tsx': $_well_known_carddav, './routes/_404.tsx': $_404, './routes/_app.tsx': $_app, @@ -69,6 +74,9 @@ const manifest = { './routes/dav/addressbooks.tsx': $dav_addressbooks, './routes/dav/addressbooks/contacts.tsx': $dav_addressbooks_contacts, './routes/dav/addressbooks/contacts/[contactId].vcf.tsx': $dav_addressbooks_contacts_contactId_vcf, + './routes/dav/calendars.tsx': $dav_calendars, + './routes/dav/calendars/[calendarId].tsx': $dav_calendars_calendarId_, + './routes/dav/calendars/[calendarId]/[calendarEventId].ics.tsx': $dav_calendars_calendarId_calendarEventId_ics, './routes/dav/files.tsx': $dav_files, './routes/dav/index.tsx': $dav_index, './routes/dav/principals.tsx': $dav_principals, diff --git a/islands/calendar/MainCalendar.tsx b/islands/calendar/MainCalendar.tsx index d2fe200..769b31e 100644 --- a/islands/calendar/MainCalendar.tsx +++ b/islands/calendar/MainCalendar.tsx @@ -757,13 +757,14 @@ export default function MainCalendar({ initialCalendars, initialCalendarEvents, const isFirstDay = dayIndex === 0; const isLastDay = dayIndex === 6; + const isToday = new Date(day.date).toISOString().substring(0, 10) === today; return ( <>
{weekDayFormat.format(day.date)}
@@ -1083,9 +1084,9 @@ export default function MainCalendar({ initialCalendars, initialCalendarEvents,
-

{openEvent.value?.title || ''}

+

{openEvent.value?.title || ''}

{openEvent.value?.start_date ? allDayEventDateFormat.format(new Date(openEvent.value.start_date)) : ''} @@ -1097,15 +1098,40 @@ export default function MainCalendar({ initialCalendars, initialCalendarEvents, )}
+
+

TODO: calendar, recurrence

+
{openEvent.value?.extra.description ? ( -
+

{openEvent.value.extra.description}

) : null} -
-

TODO: location, calendar, recurrence, reminders

+ {openEvent.value?.extra.url + ? ( +
+ + {openEvent.value.extra.url} + +
+ ) + : null} + {openEvent.value?.extra.location + ? ( +
+ + {openEvent.value.extra.location} + +
+ ) + : null} +
+

TODO: reminders