|
@@ -46,7 +46,13 @@ class CalendarBloc extends Bloc<CalendarEvent, CalendarState> {
|
|
emit(state.copyWith(database: Some(database)));
|
|
emit(state.copyWith(database: Some(database)));
|
|
},
|
|
},
|
|
didLoadAllEvents: (events) {
|
|
didLoadAllEvents: (events) {
|
|
- emit(state.copyWith(initialEvents: events, allEvents: events));
|
|
|
|
|
|
+ final calenderEvents = _calendarEventDataFromEventPBs(events);
|
|
|
|
+ emit(
|
|
|
|
+ state.copyWith(
|
|
|
|
+ initialEvents: calenderEvents,
|
|
|
|
+ allEvents: calenderEvents,
|
|
|
|
+ ),
|
|
|
|
+ );
|
|
},
|
|
},
|
|
didReceiveNewLayoutField: (CalendarLayoutSettingsPB layoutSettings) {
|
|
didReceiveNewLayoutField: (CalendarLayoutSettingsPB layoutSettings) {
|
|
_loadAllEvents();
|
|
_loadAllEvents();
|
|
@@ -57,9 +63,7 @@ class CalendarBloc extends Bloc<CalendarEvent, CalendarState> {
|
|
},
|
|
},
|
|
didCreateEvent: (CalendarEventData<CalendarDayEvent> event) {
|
|
didCreateEvent: (CalendarEventData<CalendarDayEvent> event) {
|
|
emit(
|
|
emit(
|
|
- state.copyWith(
|
|
|
|
- createdEvent: event,
|
|
|
|
- ),
|
|
|
|
|
|
+ state.copyWith(editEvent: event),
|
|
);
|
|
);
|
|
},
|
|
},
|
|
updateCalendarLayoutSetting:
|
|
updateCalendarLayoutSetting:
|
|
@@ -69,7 +73,7 @@ class CalendarBloc extends Bloc<CalendarEvent, CalendarState> {
|
|
didUpdateEvent: (CalendarEventData<CalendarDayEvent> eventData) {
|
|
didUpdateEvent: (CalendarEventData<CalendarDayEvent> eventData) {
|
|
var allEvents = [...state.allEvents];
|
|
var allEvents = [...state.allEvents];
|
|
final index = allEvents.indexWhere(
|
|
final index = allEvents.indexWhere(
|
|
- (element) => element.event!.cellId == eventData.event!.cellId,
|
|
|
|
|
|
+ (element) => element.event!.eventId == eventData.event!.eventId,
|
|
);
|
|
);
|
|
if (index != -1) {
|
|
if (index != -1) {
|
|
allEvents[index] = eventData;
|
|
allEvents[index] = eventData;
|
|
@@ -83,7 +87,7 @@ class CalendarBloc extends Bloc<CalendarEvent, CalendarState> {
|
|
didDeleteEvents: (List<String> deletedRowIds) {
|
|
didDeleteEvents: (List<String> deletedRowIds) {
|
|
var events = [...state.allEvents];
|
|
var events = [...state.allEvents];
|
|
events.retainWhere(
|
|
events.retainWhere(
|
|
- (element) => !deletedRowIds.contains(element.event!.cellId.rowId),
|
|
|
|
|
|
+ (element) => !deletedRowIds.contains(element.event!.eventId),
|
|
);
|
|
);
|
|
emit(
|
|
emit(
|
|
state.copyWith(
|
|
state.copyWith(
|
|
@@ -208,15 +212,7 @@ class CalendarBloc extends Bloc<CalendarEvent, CalendarState> {
|
|
result.fold(
|
|
result.fold(
|
|
(events) {
|
|
(events) {
|
|
if (!isClosed) {
|
|
if (!isClosed) {
|
|
- final calendarEvents = <CalendarEventData<CalendarDayEvent>>[];
|
|
|
|
- for (final eventPB in events.items) {
|
|
|
|
- final calendarEvent = _calendarEventDataFromEventPB(eventPB);
|
|
|
|
- if (calendarEvent != null) {
|
|
|
|
- calendarEvents.add(calendarEvent);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- add(CalendarEvent.didLoadAllEvents(calendarEvents));
|
|
|
|
|
|
+ add(CalendarEvent.didLoadAllEvents(events.items));
|
|
}
|
|
}
|
|
},
|
|
},
|
|
(r) => Log.error(r),
|
|
(r) => Log.error(r),
|
|
@@ -224,20 +220,28 @@ class CalendarBloc extends Bloc<CalendarEvent, CalendarState> {
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ List<CalendarEventData<CalendarDayEvent>> _calendarEventDataFromEventPBs(
|
|
|
|
+ List<CalendarEventPB> eventPBs,
|
|
|
|
+ ) {
|
|
|
|
+ final calendarEvents = <CalendarEventData<CalendarDayEvent>>[];
|
|
|
|
+ for (final eventPB in eventPBs) {
|
|
|
|
+ final event = _calendarEventDataFromEventPB(eventPB);
|
|
|
|
+ if (event != null) {
|
|
|
|
+ calendarEvents.add(event);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return calendarEvents;
|
|
|
|
+ }
|
|
|
|
+
|
|
CalendarEventData<CalendarDayEvent>? _calendarEventDataFromEventPB(
|
|
CalendarEventData<CalendarDayEvent>? _calendarEventDataFromEventPB(
|
|
CalendarEventPB eventPB,
|
|
CalendarEventPB eventPB,
|
|
) {
|
|
) {
|
|
- final fieldInfo = fieldInfoByFieldId[eventPB.titleFieldId];
|
|
|
|
|
|
+ final fieldInfo = fieldInfoByFieldId[eventPB.dateFieldId];
|
|
if (fieldInfo != null) {
|
|
if (fieldInfo != null) {
|
|
- final cellId = CellIdentifier(
|
|
|
|
- viewId: viewId,
|
|
|
|
- rowId: eventPB.rowId,
|
|
|
|
- fieldInfo: fieldInfo,
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
final eventData = CalendarDayEvent(
|
|
final eventData = CalendarDayEvent(
|
|
event: eventPB,
|
|
event: eventPB,
|
|
- cellId: cellId,
|
|
|
|
|
|
+ eventId: eventPB.rowId,
|
|
|
|
+ dateFieldId: eventPB.dateFieldId,
|
|
);
|
|
);
|
|
|
|
|
|
// The timestamp is using UTC in the backend, so we need to convert it
|
|
// The timestamp is using UTC in the backend, so we need to convert it
|
|
@@ -266,25 +270,29 @@ class CalendarBloc extends Bloc<CalendarEvent, CalendarState> {
|
|
for (var fieldInfo in fieldInfos) fieldInfo.field.id: fieldInfo
|
|
for (var fieldInfo in fieldInfos) fieldInfo.field.id: fieldInfo
|
|
};
|
|
};
|
|
},
|
|
},
|
|
- onRowsChanged: ((onRowsChanged, rowByRowId, reason) {}),
|
|
|
|
- onRowsCreated: ((ids) async {
|
|
|
|
- for (final id in ids) {
|
|
|
|
|
|
+ onRowsCreated: ((rowIds) async {
|
|
|
|
+ for (final id in rowIds) {
|
|
final event = await _loadEvent(id);
|
|
final event = await _loadEvent(id);
|
|
if (event != null && !isClosed) {
|
|
if (event != null && !isClosed) {
|
|
add(CalendarEvent.didReceiveEvent(event));
|
|
add(CalendarEvent.didReceiveEvent(event));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}),
|
|
}),
|
|
- onRowsDeleted: (ids) {
|
|
|
|
|
|
+ onRowsDeleted: (rowIds) {
|
|
if (isClosed) return;
|
|
if (isClosed) return;
|
|
- add(CalendarEvent.didDeleteEvents(ids));
|
|
|
|
|
|
+ add(CalendarEvent.didDeleteEvents(rowIds));
|
|
},
|
|
},
|
|
- onRowsUpdated: (ids) async {
|
|
|
|
|
|
+ onRowsUpdated: (rowIds) async {
|
|
if (isClosed) return;
|
|
if (isClosed) return;
|
|
- for (final id in ids) {
|
|
|
|
|
|
+ for (final id in rowIds) {
|
|
final event = await _loadEvent(id);
|
|
final event = await _loadEvent(id);
|
|
- if (event != null) {
|
|
|
|
- add(CalendarEvent.didUpdateEvent(event));
|
|
|
|
|
|
+ if (event != null && isEventDayChanged(event)) {
|
|
|
|
+ if (isEventDayChanged(event)) {
|
|
|
|
+ add(CalendarEvent.didDeleteEvents([id]));
|
|
|
|
+ add(CalendarEvent.didReceiveEvent(event));
|
|
|
|
+ } else {
|
|
|
|
+ add(CalendarEvent.didUpdateEvent(event));
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
},
|
|
@@ -319,6 +327,19 @@ class CalendarBloc extends Bloc<CalendarEvent, CalendarState> {
|
|
add(CalendarEvent.didReceiveNewLayoutField(layoutSetting.calendar));
|
|
add(CalendarEvent.didReceiveNewLayoutField(layoutSetting.calendar));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ bool isEventDayChanged(
|
|
|
|
+ CalendarEventData<CalendarDayEvent> event,
|
|
|
|
+ ) {
|
|
|
|
+ final index = state.allEvents.indexWhere(
|
|
|
|
+ (element) => element.event!.eventId == event.event!.eventId,
|
|
|
|
+ );
|
|
|
|
+ if (index != -1) {
|
|
|
|
+ return state.allEvents[index].date.day != event.date.day;
|
|
|
|
+ } else {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
typedef Events = List<CalendarEventData<CalendarDayEvent>>;
|
|
typedef Events = List<CalendarEventData<CalendarDayEvent>>;
|
|
@@ -333,7 +354,7 @@ class CalendarEvent with _$CalendarEvent {
|
|
) = _ReceiveCalendarSettings;
|
|
) = _ReceiveCalendarSettings;
|
|
|
|
|
|
// Called after loading all the current evnets
|
|
// Called after loading all the current evnets
|
|
- const factory CalendarEvent.didLoadAllEvents(Events events) =
|
|
|
|
|
|
+ const factory CalendarEvent.didLoadAllEvents(List<CalendarEventPB> events) =
|
|
_ReceiveCalendarEvents;
|
|
_ReceiveCalendarEvents;
|
|
|
|
|
|
// Called when specific event was updated
|
|
// Called when specific event was updated
|
|
@@ -376,9 +397,10 @@ class CalendarEvent with _$CalendarEvent {
|
|
class CalendarState with _$CalendarState {
|
|
class CalendarState with _$CalendarState {
|
|
const factory CalendarState({
|
|
const factory CalendarState({
|
|
required Option<DatabasePB> database,
|
|
required Option<DatabasePB> database,
|
|
|
|
+ // events by row id
|
|
required Events allEvents,
|
|
required Events allEvents,
|
|
required Events initialEvents,
|
|
required Events initialEvents,
|
|
- CalendarEventData<CalendarDayEvent>? createdEvent,
|
|
|
|
|
|
+ CalendarEventData<CalendarDayEvent>? editEvent,
|
|
CalendarEventData<CalendarDayEvent>? newEvent,
|
|
CalendarEventData<CalendarDayEvent>? newEvent,
|
|
required List<String> deleteEventIds,
|
|
required List<String> deleteEventIds,
|
|
required Option<CalendarLayoutSettingsPB> settings,
|
|
required Option<CalendarLayoutSettingsPB> settings,
|
|
@@ -417,9 +439,12 @@ class CalendarEditingRow {
|
|
|
|
|
|
class CalendarDayEvent {
|
|
class CalendarDayEvent {
|
|
final CalendarEventPB event;
|
|
final CalendarEventPB event;
|
|
- final CellIdentifier cellId;
|
|
|
|
|
|
+ final String dateFieldId;
|
|
|
|
+ final String eventId;
|
|
|
|
|
|
- String get eventId => cellId.rowId;
|
|
|
|
- String get fieldId => cellId.fieldId;
|
|
|
|
- CalendarDayEvent({required this.cellId, required this.event});
|
|
|
|
|
|
+ CalendarDayEvent({
|
|
|
|
+ required this.dateFieldId,
|
|
|
|
+ required this.eventId,
|
|
|
|
+ required this.event,
|
|
|
|
+ });
|
|
}
|
|
}
|