- commit
- f3fe2da589eb0d83cac2757c8cd0ce1c141eafaf
- parent
- 0aac555d56b3406b2cbb86ef9f72aa3668623e68
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2022-02-11 07:35
Merge branch 'sync'
Diffstat
| M | dav.js | 23 | ++++++++++++++++------- |
| M | main.js | 77 | +++++++++++++++++++++++++++++++++++-------------------------- |
2 files changed, 60 insertions, 40 deletions
diff --git a/dav.js b/dav.js
@@ -158,21 +158,30 @@ 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(),
171 180 });
172 181 };
173 182
174 -1 export var deleteEvent = function(data) {
175 -1 return _fetch(data.groupId, {
-1 183 export var deleteEvent = function(url) {
-1 184 return _fetch(url, {
176 185 method: 'DELETE',
177 186 credentials: 'same-origin',
178 187 });
diff --git a/main.js b/main.js
@@ -50,44 +50,55 @@ form.querySelectorAll('[data-translate]').forEach(el => {
50 50
51 51 form.addEventListener('submit', function(e) {
52 52 e.preventDefault();
-1 53 var data = selectedEvent; // selectedEvent could be reset in the meantime
53 54
54 55 if (e.submitter.value === 'delete') {
55 56 if (!confirm(_('Are you sure you want to delete this?'))) {
56 57 return;
57 58 }
58 -1 calendar.getEvents()
59 -1 .filter(rel => rel.groupId === selectedEvent.groupId)
60 -1 .forEach(rel => rel.remove());
61 -1 dav.deleteEvent(selectedEvent);
62 -1 } else if (e.submitter.value === 'save') {
63 -1 selectedEvent.setProp('title', form.title.value);
64 -1 selectedEvent.setDates(
65 -1 form.start.value,
66 -1 form.end.value || null,
67 -1 {allDay: form.allday.checked}
68 -1 );
69 -1
70 -1 if (form.calendar.value == selectedEvent.source.id) {
71 -1 dav.commitEvent(selectedEvent);
72 -1 } else {
73 -1 var newSource = calendar.getEventSourceById(form.calendar.value);
74 -1 var newData;
75 -1
-1 59 dav.deleteEvent(data.groupId).then(() => {
76 60 calendar.getEvents()
77 -1 .filter(rel => rel.groupId === selectedEvent.groupId)
78 -1 .forEach(rel => {
79 -1 var plain = rel.toPlainObject();
80 -1 plain.groupId = plain.groupId.replace(selectedEvent.source.id, newSource.id);
81 -1 rel.remove();
82 -1 newData = calendar.addEvent(plain, newSource);
83 -1 });
84 -1
85 -1 dav.commitEvent(newData);
86 -1 dav.deleteEvent(selectedEvent); // CAREFUL: must be called before selectedEvent is reset
87 -1 }
-1 61 .filter(rel => rel.groupId === data.groupId)
-1 62 .forEach(rel => rel.remove());
-1 63 closeForm();
-1 64 });
-1 65 } else if (e.submitter.value === 'save') {
-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 });
-1 99 } else if (e.submitter.value === 'cancel') {
-1 100 closeForm();
88 101 }
89 -1
90 -1 closeForm();
91 102 });
92 103
93 104 var calendar = new FullCalendar.Calendar(
@@ -118,11 +129,11 @@ var calendar = new FullCalendar.Calendar(
118 129 })(),
119 130 eventDrop: info => {
120 131 closeForm();
121 -1 dav.commitEvent(info.event);
-1 132 dav.commitEvent(info.event).catch(() => info.revert());
122 133 },
123 134 eventResize: info => {
124 135 closeForm();
125 -1 dav.commitEvent(info.event);
-1 136 dav.commitEvent(info.event).catch(() => info.revert());
126 137 },
127 138 eventDidMount: info => {
128 139 info.el.title = info.event.title;