timetable performance optimization
This commit is contained in:
@@ -7,6 +7,7 @@ import '../../../../../api/marianumconnect/queries/timetable_get_subjects/timeta
|
||||
import '../../../../../api/marianumconnect/queries/timetable_get_timegrid/timetable_get_timegrid_response.dart';
|
||||
import '../../../../../api/marianumconnect/queries/timetable_get_week/timetable_get_week_response.dart';
|
||||
import '../../../../../api/mhsl/custom_timetable_event/get/get_custom_timetable_event_response.dart';
|
||||
import 'week_cache.dart';
|
||||
|
||||
part 'timetable_state.freezed.dart';
|
||||
part 'timetable_state.g.dart';
|
||||
@@ -40,6 +41,23 @@ abstract class TimetableState with _$TimetableState {
|
||||
Iterable<McTimetableEntry> getAllKnownLessons() =>
|
||||
weekCache.values.expand((response) => response.entries);
|
||||
|
||||
/// This state with [week] cached, or `this` when its content is unchanged
|
||||
/// (so the emit is dropped as equal).
|
||||
TimetableState withFetchedWeek(
|
||||
DateTime weekStart,
|
||||
TimetableGetWeekResponse week,
|
||||
) {
|
||||
final updated = mergeWeekIntoCache(
|
||||
weekCache,
|
||||
weekStart,
|
||||
week,
|
||||
viewedWeekStart: startDate,
|
||||
now: DateTime.now(),
|
||||
);
|
||||
if (updated == null) return this;
|
||||
return copyWith(weekCache: updated, dataVersion: dataVersion + 1);
|
||||
}
|
||||
|
||||
bool get hasReferenceData =>
|
||||
rooms != null &&
|
||||
subjects != null &&
|
||||
|
||||
Reference in New Issue
Block a user