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) => (