1 parent
beae94e932
commit
de4d70970c
51 files changed
+4034
-421
No files matched your search
@@ -204,7 +204,53 @@ function updateCalendarRecurrenceUi() {
|
||||
$("#calendar-rrule-wrap").classList.toggle("hidden", $("#calendar-recurrence").value !== "custom");
|
||||
}
|
||||
|
||||
const calendarReminderChoices = [
|
||||
["", "None"], ["0", "At start"], ["5", "5 minutes"], ["10", "10 minutes"], ["15", "15 minutes"], ["30", "30 minutes"],
|
||||
["60", "1 hour"], ["120", "2 hours"], ["1440", "1 day before"], ["2880", "2 days before"], ["10080", "1 week before"],
|
||||
];
|
||||
|
||||
function fillCalendarReminderSelects() {
|
||||
for (const selector of ["#calendar-reminder", "#calendar-reminder-extra", "#calendar-default-reminder", "#calendar-default-reminder-extra"]) {
|
||||
const select = $(selector);
|
||||
if (!select) continue;
|
||||
const current = select.value;
|
||||
select.replaceChildren(...calendarReminderChoices.map(([value, label]) => new Option(trText(label), value)));
|
||||
select.value = current;
|
||||
}
|
||||
}
|
||||
|
||||
function setReminderSelect(selector, minutes) {
|
||||
const select = $(selector);
|
||||
if (!select) return;
|
||||
const value = minutes == null ? "" : String(minutes);
|
||||
select.value = Array.from(select.options).some((option) => option.value === value) ? value : "";
|
||||
}
|
||||
|
||||
function reminderSelectValue(selector) {
|
||||
const value = $(selector)?.value ?? "";
|
||||
return value === "" ? null : Number(value);
|
||||
}
|
||||
|
||||
async function loadCalendarReminderDefaults() {
|
||||
try {
|
||||
state.calendarSettings = await request("/calendar/settings", { method: "GET" });
|
||||
} catch (_) {
|
||||
state.calendarSettings = state.calendarSettings || null;
|
||||
}
|
||||
fillCalendarReminderSelects();
|
||||
setReminderSelect("#calendar-default-reminder", state.calendarSettings?.default_reminder_minutes);
|
||||
setReminderSelect("#calendar-default-reminder-extra", state.calendarSettings?.default_extra_reminder_minutes);
|
||||
}
|
||||
|
||||
async function saveCalendarReminderDefault(field, selector) {
|
||||
try {
|
||||
state.calendarSettings = await request("/calendar/settings", { method: "PUT", body: JSON.stringify({ [field]: reminderSelectValue(selector) }) });
|
||||
toast(trText("Calendar reminder defaults saved"));
|
||||
} catch (error) { toast(error.message, "error"); }
|
||||
}
|
||||
|
||||
function editCalendarEvent(event = null) {
|
||||
fillCalendarReminderSelects();
|
||||
$("#calendar-form").classList.remove("hidden");
|
||||
$("#calendar-event-id").value = event?.id || "";
|
||||
$("#calendar-title").value = event?.title || "";
|
||||
@@ -226,8 +272,9 @@ function editCalendarEvent(event = null) {
|
||||
$("#calendar-description").value = event?.description || "";
|
||||
const color = String(event?.color || "");
|
||||
$("#calendar-color").value = /^#[0-9a-f]{6}$/i.test(color) ? color : "#6b7280";
|
||||
const reminder = event?.reminder_minutes == null ? "" : String(event.reminder_minutes);
|
||||
$("#calendar-reminder").value = Array.from($("#calendar-reminder").options).some((option) => option.value === reminder) ? reminder : "";
|
||||
// New events start with the reminders chosen in Settings -> Notifications.
|
||||
setReminderSelect("#calendar-reminder", event ? event.reminder_minutes : state.calendarSettings?.default_reminder_minutes);
|
||||
setReminderSelect("#calendar-reminder-extra", event ? event.reminder_extra_minutes : state.calendarSettings?.default_extra_reminder_minutes);
|
||||
$("#calendar-delete").disabled = !event;
|
||||
}
|
||||
|
||||
@@ -253,7 +300,8 @@ async function saveCalendarEvent(event) {
|
||||
status: $("#calendar-status").value || "confirmed",
|
||||
meeting_url: $("#calendar-meeting-url").value.trim() || null,
|
||||
color: $("#calendar-color").value || null,
|
||||
reminder_minutes: $("#calendar-reminder").value === "" ? null : Number($("#calendar-reminder").value),
|
||||
reminder_minutes: reminderSelectValue("#calendar-reminder"),
|
||||
reminder_extra_minutes: reminderSelectValue("#calendar-reminder-extra"),
|
||||
};
|
||||
const payload = id ? base : { ...base, source: "manual", source_uid: null, source_message_uid: null, source_message_folder: null };
|
||||
try { await request(id ? `/calendar/events/${encodeURIComponent(id)}` : "/calendar/events", { method: id ? "PUT" : "POST", body: JSON.stringify(payload) }); $("#calendar-form").classList.add("hidden"); await loadCalendar(); toast("Event saved"); }
|
||||
|
||||
Reference in new issue
Block a user