From 394fc3fd226121a1672a2251b9dd798ae6790993 Mon Sep 17 00:00:00 2001 From: Arthur Belleville Date: Sun, 27 Jul 2025 14:28:21 +0200 Subject: [PATCH] Add ICS export functionality to Planning --- ui/src/pages/planning.tsx | 43 ++++++++++++++++++++ ui/src/utils/helpers.ts | 85 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 128 insertions(+) diff --git a/ui/src/pages/planning.tsx b/ui/src/pages/planning.tsx index f9e0b2d..b3f2f75 100644 --- a/ui/src/pages/planning.tsx +++ b/ui/src/pages/planning.tsx @@ -9,6 +9,7 @@ import { SelectListItem, } from "@ui/ui-library/select"; import { Outlet, useNavigate, useParams } from "react-router-dom"; +import { generateICSFromEvents, downloadICSFile } from "@ui/utils/helpers"; type ViewType = "month" | "week" | "day"; @@ -31,6 +32,27 @@ export const PlanningPage = () => { const deleteEvent = useDeleteEvent(); + const handleExportICS = () => { + if (!tabloEvents || tabloEvents.length === 0) { + return; + } + + const calendarName = + selectedTabloId === "all" + ? "Planning - Tous les tablos" + : tablos?.find((t) => t.id === selectedTabloId)?.name || "Planning"; + + const icsContent = generateICSFromEvents(tabloEvents, calendarName); + const filename = + selectedTabloId === "all" + ? "planning-tous-tablos.ics" + : `planning-${ + tablos?.find((t) => t.id === selectedTabloId)?.name || "tablo" + }.ics`; + + downloadICSFile(icsContent, filename); + }; + const navigateToCreateEvent = (date: Date, tablo_id: string) => { if (tablo_id === "all") { navigate({ @@ -732,6 +754,27 @@ export const PlanningPage = () => {
+
{(["month", "week", "day"] as ViewType[]).map((view) => (