[#77] added complex ui for repetition, fixed broken tests due to new feature

This commit is contained in:
Camille Moussu
2025-09-02 18:14:55 +02:00
parent b6f55da506
commit ee01e1d027
14 changed files with 344 additions and 90 deletions
+32 -3
View File
@@ -81,6 +81,22 @@ export function parseCalendarEvent(
break;
case "status":
event.status = String(value);
break;
case "rrule":
event.repetition = { freq: value.freq.toLowerCase() };
if (value.byday) {
event.repetition.selectedDays = value.byday;
}
if (value.until) {
event.repetition.selectedDays = value.endDate;
}
if (value.count) {
event.repetition.selectedDays = value.occurrences;
}
if (value.interval) {
event.repetition.interval = value.interval;
}
break;
}
}
if (recurrenceId && event.uid) {
@@ -105,7 +121,7 @@ export function calendarEventToJCal(event: CalendarEvent): any[] {
const vevent: any[] = [
"vevent",
[
["uid", {}, "text", event.uid],
["uid", {}, "text", event.uid.split("/")[0]],
["transp", {}, "text", event.transp ?? "OPAQUE"],
[
"dtstart",
@@ -150,8 +166,21 @@ export function calendarEventToJCal(event: CalendarEvent): any[] {
if (event.description) {
vevent[1].push(["description", {}, "text", event.description]);
}
if (event.repetition) {
vevent[1].push(["rrule", {}, "recur", { freq: event.repetition }]);
if (event.repetition?.freq) {
const repetitionRule: Record<string, any> = { freq: event.repetition.freq };
if (event.repetition.interval) {
repetitionRule["interval"] = event.repetition.interval;
}
if (event.repetition.occurrences) {
repetitionRule["count"] = event.repetition.occurrences;
}
if (event.repetition.endDate) {
repetitionRule["until"] = event.repetition.endDate;
}
if (event.repetition.selectedDays) {
repetitionRule["byday"] = event.repetition.selectedDays;
}
vevent[1].push(["rrule", {}, "recur", repetitionRule]);
}
event.attendee.forEach((att) => {