mirror of
https://github.com/SyncrowIOT/web.git
synced 2025-08-26 04:29:41 +00:00
Refactor calendar event loading: replace parameters with LoadEventsParam class and implement memory caching for improved performance
This commit is contained in:
@ -2,8 +2,10 @@ import 'dart:async';
|
||||
import 'package:bloc/bloc.dart';
|
||||
import 'package:calendar_view/calendar_view.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:syncrow_web/pages/access_management/booking_system/domain/LoadEventsParam.dart';
|
||||
import 'package:syncrow_web/pages/access_management/booking_system/domain/models/calendar_event_booking.dart';
|
||||
import 'package:syncrow_web/pages/access_management/booking_system/domain/services/calendar_system_service.dart';
|
||||
import 'package:syncrow_web/pages/access_management/booking_system/presentation/model/memory_bookable_space_service.dart';
|
||||
part 'events_event.dart';
|
||||
part 'events_state.dart';
|
||||
|
||||
@ -11,12 +13,14 @@ class CalendarEventsBloc extends Bloc<CalendarEventsEvent, CalendarEventState> {
|
||||
final EventController eventController = EventController();
|
||||
final CalendarSystemService calendarService;
|
||||
final Map<String, List<CalendarEventData>> _eventsCache = {};
|
||||
final MemoryBookableSpaceService memoryService;
|
||||
|
||||
String? _lastSpaceId;
|
||||
int? _lastMonth;
|
||||
int? _lastYear;
|
||||
|
||||
CalendarEventsBloc({required this.calendarService}) : super(EventsInitial()) {
|
||||
|
||||
CalendarEventsBloc({
|
||||
required this.calendarService,
|
||||
required this.memoryService,
|
||||
}) : super(EventsInitial()) {
|
||||
on<LoadEvents>(_onLoadEvents);
|
||||
on<AddEvent>(_onAddEvent);
|
||||
on<DisposeResources>(_onDisposeResources);
|
||||
@ -26,45 +30,32 @@ class CalendarEventsBloc extends Bloc<CalendarEventsEvent, CalendarEventState> {
|
||||
LoadEvents event,
|
||||
Emitter<CalendarEventState> emit,
|
||||
) async {
|
||||
final month = event.weekEnd.month;
|
||||
final year = event.weekEnd.year;
|
||||
final cacheKey =
|
||||
'${event.spaceId}-$year-${month.toString().padLeft(2, '0')}';
|
||||
|
||||
if (_eventsCache.containsKey(cacheKey)) {
|
||||
final cachedEvents = _eventsCache[cacheKey]!;
|
||||
final param = event.param;
|
||||
final month = param.endDate.month;
|
||||
final year = param.endDate.year;
|
||||
final spaceId = param.id;
|
||||
final cachedEvents = memoryService.getEvents(spaceId, year, month);
|
||||
if (cachedEvents != null) {
|
||||
eventController.addAll(cachedEvents);
|
||||
emit(EventsLoaded(
|
||||
events: cachedEvents,
|
||||
spaceId: event.spaceId,
|
||||
spaceId: spaceId,
|
||||
month: month,
|
||||
year: year,
|
||||
));
|
||||
return;
|
||||
}
|
||||
if (_lastSpaceId == event.spaceId &&
|
||||
_lastMonth == month &&
|
||||
_lastYear == year) {
|
||||
return;
|
||||
}
|
||||
|
||||
emit(EventsLoading());
|
||||
try {
|
||||
final response = await calendarService.getCalendarEvents(
|
||||
month: month.toString().padLeft(2, '0'),
|
||||
year: year.toString(),
|
||||
spaceId: event.spaceId,
|
||||
);
|
||||
final response = await calendarService.getCalendarEvents(params: param);
|
||||
|
||||
final events = response.data.map(_toCalendarEventData).toList();
|
||||
_eventsCache[cacheKey] = events;
|
||||
memoryService.setEvents(spaceId, year, month, events);
|
||||
eventController.addAll(events);
|
||||
_lastSpaceId = event.spaceId;
|
||||
_lastMonth = month;
|
||||
_lastYear = year;
|
||||
emit(EventsLoaded(
|
||||
events: events,
|
||||
spaceId: event.spaceId,
|
||||
spaceId: spaceId,
|
||||
month: month,
|
||||
year: year,
|
||||
));
|
||||
|
@ -6,17 +6,11 @@ abstract class CalendarEventsEvent {
|
||||
}
|
||||
|
||||
class LoadEvents extends CalendarEventsEvent {
|
||||
final String spaceId;
|
||||
final DateTime weekStart;
|
||||
final DateTime weekEnd;
|
||||
|
||||
const LoadEvents({
|
||||
required this.spaceId,
|
||||
required this.weekStart,
|
||||
required this.weekEnd,
|
||||
});
|
||||
final LoadEventsParam param;
|
||||
const LoadEvents(this.param);
|
||||
}
|
||||
|
||||
|
||||
class AddEvent extends CalendarEventsEvent {
|
||||
final CalendarEventData event;
|
||||
const AddEvent(this.event);
|
||||
|
Reference in New Issue
Block a user