caldav-client

standalone CalDAV web client
git clone https://git.ce9e.org/caldav-client.git

commit
c968cfa0a3d74d85d1a938735437177411f495be
parent
2f7a751bae3141da116c7706b0b1336b3794cd2f
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2022-02-11 07:30
do not update UI on unsuccessful update

Diffstat

M dav.js 19 ++++++++++++++-----
M main.js 59 +++++++++++++++++++++++++++++++++--------------------------

2 files changed, 47 insertions, 31 deletions


diff --git a/dav.js b/dav.js

@@ -158,13 +158,22 @@ export var createEvent = function(info, source) {
  158   158     };
  159   159 };
  160   160 
  161    -1 export var commitEvent = function(data) {
   -1   161 export var commitEvent = function(data, _changes) {
  162   162     var comp = data.extendedProps.comp;
  163   163     var vevent = new ICAL.Event(comp.getFirstSubcomponent('vevent'));
  164    -1     vevent.summary = data.title;
  165    -1     vevent.startDate = date2idate(data.start, data.allDay, data.extendedProps.offset);
  166    -1     vevent.endDate = date2idate(data.end || data.start, data.allDay, data.extendedProps.offset);
  167    -1     return _fetch(data.groupId, {
   -1   164 
   -1   165     var changes = _changes || {};
   -1   166     var groupId = changes.groupId || data.groupId;
   -1   167     var title = changes.title || data.title;
   -1   168     var start = changes.start || data.start;
   -1   169     var end = changes.end || data.end;
   -1   170     var allDay = changes.allDay || data.allDay;
   -1   171 
   -1   172     vevent.summary = title;
   -1   173     vevent.startDate = date2idate(start, allDay, data.extendedProps.offset);
   -1   174     vevent.endDate = date2idate(end || start, allDay, data.extendedProps.offset);
   -1   175 
   -1   176     return _fetch(groupId, {
  168   177         method: 'PUT',
  169   178         credentials: 'same-origin',
  170   179         body: comp.toString(),

diff --git a/main.js b/main.js

@@ -63,32 +63,39 @@ form.addEventListener('submit', function(e) {
   63    63             closeForm();
   64    64         });
   65    65     } else if (e.submitter.value === 'save') {
   66    -1         data.setProp('title', form.title.value);
   67    -1         data.setDates(
   68    -1             form.start.value,
   69    -1             form.end.value || null,
   70    -1             {allDay: form.allday.checked}
   71    -1         );
   72    -1 
   73    -1         if (form.calendar.value == data.source.id) {
   74    -1             dav.commitEvent(data);
   75    -1         } else {
   76    -1             var newSource = calendar.getEventSourceById(form.calendar.value);
   77    -1             var newData;
   78    -1 
   79    -1             calendar.getEvents()
   80    -1                 .filter(rel => rel.groupId === data.groupId)
   81    -1                 .forEach(rel => {
   82    -1                     var plain = rel.toPlainObject();
   83    -1                     plain.groupId = plain.groupId.replace(data.source.id, newSource.id);
   84    -1                     rel.remove();
   85    -1                     newData = calendar.addEvent(plain, newSource);
   86    -1                 });
   87    -1 
   88    -1             dav.commitEvent(newData);
   89    -1             dav.deleteEvent(data.groupId);
   90    -1         }
   91    -1         closeForm();
   -1    66         var newSource = calendar.getEventSourceById(form.calendar.value);
   -1    67         var oldGroupId = data.groupId;
   -1    68         var newGroupId = data.groupId.replace(data.source.id, newSource.id);
   -1    69 
   -1    70         dav.commitEvent(data, {
   -1    71             groupId: newGroupId,
   -1    72             title: form.title.value,
   -1    73             start: new Date(form.start.value),
   -1    74             end: form.end.value ? new Date(form.end.value) : null,
   -1    75             allDay: form.allday.checked,
   -1    76         }).then(() => {
   -1    77             if (newGroupId !== oldGroupId) {
   -1    78                 return dav.deleteEvent(oldGroupId);
   -1    79             }
   -1    80         }).then(() => {
   -1    81             data.setProp('title', form.title.value);
   -1    82             data.setDates(
   -1    83                 form.start.value,
   -1    84                 form.end.value || null,
   -1    85                 {allDay: form.allday.checked}
   -1    86             );
   -1    87             if (newGroupId !== oldGroupId) {
   -1    88                 calendar.getEvents()
   -1    89                     .filter(rel => rel.groupId === oldGroupId)
   -1    90                     .forEach(rel => {
   -1    91                         var plain = rel.toPlainObject();
   -1    92                         plain.groupId = newGroupId;
   -1    93                         rel.remove();
   -1    94                         calendar.addEvent(plain, newSource);
   -1    95                     });
   -1    96             }
   -1    97             closeForm();
   -1    98         });
   92    99     } else if (e.submitter.value === 'cancel') {
   93   100         closeForm();
   94   101     }