import '../../../../../api/marianumconnect/models/mc_holiday.dart'; import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc.dart'; import '../../../infrastructure/utility_widgets/loadable_hydrated_bloc/loadable_hydrated_bloc_event.dart'; import '../repository/holidays_repository.dart'; import 'holidays_event.dart'; import 'holidays_state.dart'; class HolidaysBloc extends LoadableHydratedBloc { HolidaysBloc() { on( (event, emit) => add( Emit( (state) => state.copyWith(showPastHolidays: event.shouldBeVisible), ), ), ); on( (event, emit) => add(Emit((state) => state.copyWith(showDisclaimer: false))), ); } bool showPastHolidays() => innerState?.showPastHolidays ?? false; bool showDisclaimerOnEntry() => innerState?.showDisclaimer ?? false; List getHolidays() { final now = DateTime.now(); return innerState?.holidays .where((h) => showPastHolidays() || h.endDate.isAfter(now)) .toList() ?? []; } @override HolidaysState fromNothing() => const HolidaysState( showPastHolidays: false, holidays: [], showDisclaimer: true, ); @override HolidaysState fromStorage(Map json) => HolidaysState.fromJson(json); @override Future gatherData() async { var holidays = await repo.getHolidays(); add(DataGathered((state) => state.copyWith(holidays: holidays))); } @override HolidaysRepository repository() => HolidaysRepository(); @override Map? toStorage(state) => state.toJson(); }