feat(calendar): ICS-Feed settings UI (#462) #481

Merged
pm-bot merged 1 commit from feat/calendar-settings-ui into main 2026-06-15 21:47:45 +02:00
Collaborator

Summary

Letzte offene Phase-5-Folgearbeit des Day-Planner-MVP (#360): /heute kann seit rc20 Kalender-Events anzeigen, aber Setup ging bisher nur per API-Direktcall. rc25 liefert die UI.

What changed

  • shared-types: calendarSubscriptionSchema, createCalendarSubscriptionRequestSchema, syncCalendarSubscriptionResponseSchema — Single-Source-of-Truth-Contract gegen rc22-style API/Client-Schema-Drift.
  • api-client: CalendarResource mit listSubscriptions/createSubscription/updateSubscription/deleteSubscription/syncSubscription + 5 Tests (inkl. Drift-Guard).
  • feature-day-planner: CalendarSettingsScreen (Tamagui, cross-platform) + 4 TanStack-Query-Hooks (useCalendarSubscriptions/useCreateCalendarSubscription/useDeleteCalendarSubscription/useSyncCalendarSubscription). Sync/Delete invalidieren dayPlanner.today() damit /heute sofort aktualisiert.
  • Web: /einstellungen/kalender-Route, Sidebar-Eintrag in SETTINGS_NAV_ITEMS.
  • Mobile: app/einstellungen/kalender.tsx-Route, Eintrag im Einstellungen-Index-Drawer.
  • Empty-State: dritter CTA "Kalender verbinden" auf /heute (analog zu Mail/Todo aus rc21).

Scope

Nur ICS-URL-Feeds — keine Outlook/Google OAuth-Flows. Backend (CalendarService + CalendarSyncService + 15-Min-Cron) war seit rc20 fertig, nur die UI-Hülle fehlte. OAuth bleibt explizit out-of-scope (siehe Ticket-Out-of-Scope-Liste).

Test plan

  • Typecheck: shared-types, api-client, feature-day-planner, web, mobile grün
  • Lint grün
  • api-client: 16 tests grün (5 neue für CalendarResource inkl. Schema-Drift-Guard)
  • CI: Drone-Build grün
  • Device-Test rc25-APK: ICS-Feed eintragen → in /heute Termine erscheinen lassen

Fixes #462

## Summary Letzte offene Phase-5-Folgearbeit des Day-Planner-MVP (#360): /heute kann seit rc20 Kalender-Events anzeigen, aber Setup ging bisher nur per API-Direktcall. rc25 liefert die UI. ## What changed - **shared-types**: `calendarSubscriptionSchema`, `createCalendarSubscriptionRequestSchema`, `syncCalendarSubscriptionResponseSchema` — Single-Source-of-Truth-Contract gegen rc22-style API/Client-Schema-Drift. - **api-client**: `CalendarResource` mit `listSubscriptions/createSubscription/updateSubscription/deleteSubscription/syncSubscription` + 5 Tests (inkl. Drift-Guard). - **feature-day-planner**: `CalendarSettingsScreen` (Tamagui, cross-platform) + 4 TanStack-Query-Hooks (`useCalendarSubscriptions/useCreateCalendarSubscription/useDeleteCalendarSubscription/useSyncCalendarSubscription`). Sync/Delete invalidieren `dayPlanner.today()` damit /heute sofort aktualisiert. - **Web**: `/einstellungen/kalender`-Route, Sidebar-Eintrag in `SETTINGS_NAV_ITEMS`. - **Mobile**: `app/einstellungen/kalender.tsx`-Route, Eintrag im Einstellungen-Index-Drawer. - **Empty-State**: dritter CTA "Kalender verbinden" auf /heute (analog zu Mail/Todo aus rc21). ## Scope Nur **ICS-URL-Feeds** — keine Outlook/Google OAuth-Flows. Backend (`CalendarService` + `CalendarSyncService` + 15-Min-Cron) war seit rc20 fertig, nur die UI-Hülle fehlte. OAuth bleibt explizit out-of-scope (siehe Ticket-Out-of-Scope-Liste). ## Test plan - [x] Typecheck: shared-types, api-client, feature-day-planner, web, mobile grün - [x] Lint grün - [x] api-client: 16 tests grün (5 neue für CalendarResource inkl. Schema-Drift-Guard) - [ ] CI: Drone-Build grün - [ ] Device-Test rc25-APK: ICS-Feed eintragen → in /heute Termine erscheinen lassen Fixes #462
feat(calendar): ICS-Feed settings UI for /heute calendar integration
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
475d6bfee9
Closes the Phase-5 follow-up where /heute could render calendar events
since rc20 but had no way to add an ICS subscription except via direct
API call. CalendarSettingsScreen lives in feature-day-planner so web +
mobile share the same Tamagui surface. Sync/delete invalidate the
day-plan query so /heute refreshes immediately after add or sync.

OAuth/Outlook stays out-of-scope per ticket. ICS-URL is the only feed
type the backend accepts (calendar.dto.ts + ics-parser already wired).

v0.6.6-rc25.

Fixes #462
pm-bot merged commit 99f15c16b0 into main 2026-06-15 21:47:45 +02:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
admin-mrrm/mrrmlabapp!481
No description provided.