|
@@ -279,41 +279,45 @@ var AgendaView = FC.AgendaView = View.extend({
|
|
|
------------------------------------------------------------------------------------------------------------------*/
|
|
------------------------------------------------------------------------------------------------------------------*/
|
|
|
|
|
|
|
|
|
|
|
|
|
- handleEventsChanged: function(eventChangeset) {
|
|
|
|
|
- var allDayChangeset = new EventInstanceChangeset();
|
|
|
|
|
- var timedChangeset = new EventInstanceChangeset();
|
|
|
|
|
|
|
+ setEventDataSourceInChildren: function(eventDataSource) {
|
|
|
|
|
+ var allDayEventSource = new EventInstanceDataSource();
|
|
|
|
|
+ var timedEventSource = new EventInstanceDataSource();
|
|
|
|
|
|
|
|
- if (eventChangeset.isClear) {
|
|
|
|
|
- allDayChangeset.isClear = true;
|
|
|
|
|
- timedChangeset.isClear = true;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // reference dateProfile.isAllDay() instead of the eventDef
|
|
|
|
|
- // because eventDef might have updated
|
|
|
|
|
|
|
+ function processChangeset(changeset, isInitial) {
|
|
|
|
|
+ var split = splitEventChangesetByAllDay(changeset);
|
|
|
|
|
|
|
|
- eventChangeset.removalsRepo.iterEventInstances(function(instance) {
|
|
|
|
|
- if (instance.dateProfile.isAllDay()) {
|
|
|
|
|
- allDayChangeset.removalsRepo.addEventInstance(instance);
|
|
|
|
|
|
|
+ if (isInitial || !split.allDay.isEmpty()) {
|
|
|
|
|
+ allDayEventSource.addChangeset(split.allDay);
|
|
|
}
|
|
}
|
|
|
- else {
|
|
|
|
|
- timedChangeset.removalsRepo.addEventInstance(instance);
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
|
|
|
|
|
- eventChangeset.additionsRepo.iterEventInstances(function(instance) {
|
|
|
|
|
- if (instance.dateProfile.isAllDay()) {
|
|
|
|
|
- allDayChangeset.additionsRepo.addEventInstance(instance);
|
|
|
|
|
|
|
+ if (isInitial || !split.timed.isEmpty()) {
|
|
|
|
|
+ timedEventSource.addChangeset(split.timed);
|
|
|
}
|
|
}
|
|
|
- else {
|
|
|
|
|
- timedChangeset.additionsRepo.addEventInstance(instance);
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- this.timeGrid.handleEventsChanged(timedChangeset);
|
|
|
|
|
|
|
+ // initial event instances. simulate a changeset
|
|
|
|
|
+ if (eventDataSource.isFinalized()) {
|
|
|
|
|
+ processChangeset(
|
|
|
|
|
+ new EventInstanceChangeset(false, null, eventDataSource.instanceRepo),
|
|
|
|
|
+ true // isInitial=true
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // listen for further changes
|
|
|
|
|
+ this.listenTo(eventDataSource, 'receive', processChangeset);
|
|
|
|
|
|
|
|
|
|
+ // finally, install into the children...
|
|
|
if (this.dayGrid) {
|
|
if (this.dayGrid) {
|
|
|
- this.dayGrid.handleEventsChanged(allDayChangeset);
|
|
|
|
|
|
|
+ this.dayGrid.set('eventDataSource', allDayEventSource);
|
|
|
}
|
|
}
|
|
|
|
|
+ this.timeGrid.set('eventDataSource', timedEventSource);
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ unsetEventDataSourceInChildren: function(eventDataSource) {
|
|
|
|
|
+ this.stopListeningTo(eventDataSource);
|
|
|
|
|
+
|
|
|
|
|
+ View.prototype.unsetEventDataSourceInChildren.apply(this, arguments);
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
@@ -440,6 +444,40 @@ var agendaDayGridMethods = {
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+function splitEventChangesetByAllDay(eventChangeset) {
|
|
|
|
|
+ var allDayChangeset = new EventInstanceChangeset();
|
|
|
|
|
+ var timedChangeset = new EventInstanceChangeset();
|
|
|
|
|
+
|
|
|
|
|
+ if (eventChangeset.isClear) {
|
|
|
|
|
+ allDayChangeset.isClear = true;
|
|
|
|
|
+ timedChangeset.isClear = true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // reference dateProfile.isAllDay() instead of the eventDef
|
|
|
|
|
+ // because eventDef might have updated
|
|
|
|
|
+
|
|
|
|
|
+ eventChangeset.removalsRepo.iterEventInstances(function(instance) {
|
|
|
|
|
+ if (instance.dateProfile.isAllDay()) {
|
|
|
|
|
+ allDayChangeset.removalsRepo.addEventInstance(instance);
|
|
|
|
|
+ }
|
|
|
|
|
+ else {
|
|
|
|
|
+ timedChangeset.removalsRepo.addEventInstance(instance);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ eventChangeset.additionsRepo.iterEventInstances(function(instance) {
|
|
|
|
|
+ if (instance.dateProfile.isAllDay()) {
|
|
|
|
|
+ allDayChangeset.additionsRepo.addEventInstance(instance);
|
|
|
|
|
+ }
|
|
|
|
|
+ else {
|
|
|
|
|
+ timedChangeset.additionsRepo.addEventInstance(instance);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ return { allDay: allDayChangeset, timed: timedChangeset };
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
function groupEventFootprintsByAllDay(eventFootprints) {
|
|
function groupEventFootprintsByAllDay(eventFootprints) {
|
|
|
var allDay = [];
|
|
var allDay = [];
|
|
|
var timed = [];
|
|
var timed = [];
|