From 99783ca600b85cd7e014e33b769e56f56739fc1f Mon Sep 17 00:00:00 2001 From: Ulas Kalayci Date: Wed, 29 Apr 2026 10:39:17 +0200 Subject: [PATCH] fix: correct onSave pattern for ICS edit modal onSave(panel) is a setup hook, not a submit handler. Bind the form's submit event inside it and call closeModal({ force: true }) on success. Also add explicit submit/cancel buttons to the modal content. Co-Authored-By: Claude Sonnet 4.6 --- public/pages/settings.js | 47 +++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/public/pages/settings.js b/public/pages/settings.js index 2f7d76f..976ab2a 100644 --- a/public/pages/settings.js +++ b/public/pages/settings.js @@ -1791,26 +1791,37 @@ function bindIcsEvents(container, user, initialSubs) { - + +
+ + +
`, - onSave: async (modalEl, close) => { - const name = modalEl.querySelector('#ics-edit-name').value.trim(); - const color = modalEl.querySelector('#ics-edit-color').value; - const shared = modalEl.querySelector('#ics-edit-shared').checked ? 1 : 0; - const errEl = modalEl.querySelector('#ics-edit-error'); - errEl.hidden = true; - try { - const res = await api.patch(`/calendar/subscriptions/${id}`, { name, color, shared }); - const idx = subs.findIndex((s) => s.id === id); - if (idx >= 0) subs[idx] = res.data; - renderIcsList(container, subs, user); - window.oikos?.showToast(t('settings.ics.updatedToast'), 'success'); - close(); - } catch (err) { - errEl.textContent = err.message ?? t('common.errorGeneric'); - errEl.hidden = false; - } + onSave(panel) { + panel.querySelector('#ics-edit-cancel')?.addEventListener('click', () => closeModal()); + panel.querySelector('#ics-edit-form')?.addEventListener('submit', async (e) => { + e.preventDefault(); + const submitBtn = panel.querySelector('[type=submit]'); + const errEl = panel.querySelector('#ics-edit-error'); + const name = panel.querySelector('#ics-edit-name').value.trim(); + const color = panel.querySelector('#ics-edit-color').value; + const shared = panel.querySelector('#ics-edit-shared').checked ? 1 : 0; + errEl.hidden = true; + submitBtn.disabled = true; + try { + const res = await api.patch(`/calendar/subscriptions/${id}`, { name, color, shared }); + const idx = subs.findIndex((s) => s.id === id); + if (idx >= 0) subs[idx] = res.data; + renderIcsList(container, subs, user); + window.oikos?.showToast(t('settings.ics.updatedToast'), 'success'); + closeModal({ force: true }); + } catch (err) { + errEl.textContent = err.message ?? t('common.errorGeneric'); + errEl.hidden = false; + submitBtn.disabled = false; + } + }); }, }); }