diff --git a/lib/pages/analytics/modules/energy_management/blocs/total_energy_consumption/total_energy_consumption_bloc.dart b/lib/pages/analytics/modules/energy_management/blocs/total_energy_consumption/total_energy_consumption_bloc.dart new file mode 100644 index 00000000..7382edd1 --- /dev/null +++ b/lib/pages/analytics/modules/energy_management/blocs/total_energy_consumption/total_energy_consumption_bloc.dart @@ -0,0 +1,42 @@ +import 'package:bloc/bloc.dart'; +import 'package:equatable/equatable.dart'; +import 'package:syncrow_web/pages/analytics/models/energy_data_model.dart'; +import 'package:syncrow_web/pages/analytics/params/get_total_energy_consumption_param.dart'; +import 'package:syncrow_web/pages/analytics/services/total_energy_consumption/total_energy_consumption_service.dart'; + +part 'total_energy_consumption_event.dart'; +part 'total_energy_consumption_state.dart'; + +class TotalEnergyConsumptionBloc + extends Bloc { + TotalEnergyConsumptionBloc( + this._totalEnergyConsumptionService, + ) : super(const TotalEnergyConsumptionState()) { + on(_onTotalEnergyConsumptionLoadEvent); + } + + final TotalEnergyConsumptionService _totalEnergyConsumptionService; + + Future _onTotalEnergyConsumptionLoadEvent( + TotalEnergyConsumptionLoadEvent event, + Emitter emit, + ) async { + emit(state.copyWith(status: TotalEnergyConsumptionStatus.loading)); + try { + final chartData = await _totalEnergyConsumptionService.load(event.param); + emit( + state.copyWith( + chartData: chartData, + status: TotalEnergyConsumptionStatus.loaded, + ), + ); + } catch (e) { + emit( + state.copyWith( + errorMessage: e.toString(), + status: TotalEnergyConsumptionStatus.failure, + ), + ); + } + } +} diff --git a/lib/pages/analytics/modules/energy_management/blocs/total_energy_consumption/total_energy_consumption_event.dart b/lib/pages/analytics/modules/energy_management/blocs/total_energy_consumption/total_energy_consumption_event.dart new file mode 100644 index 00000000..8cc9f7df --- /dev/null +++ b/lib/pages/analytics/modules/energy_management/blocs/total_energy_consumption/total_energy_consumption_event.dart @@ -0,0 +1,17 @@ +part of 'total_energy_consumption_bloc.dart'; + +sealed class TotalEnergyConsumptionEvent extends Equatable { + const TotalEnergyConsumptionEvent(); + + @override + List get props => []; +} + +final class TotalEnergyConsumptionLoadEvent extends TotalEnergyConsumptionEvent { + const TotalEnergyConsumptionLoadEvent({required this.param}); + + final GetTotalEnergyConsumptionParam param ; + + @override + List get props => [param]; +} diff --git a/lib/pages/analytics/modules/energy_management/blocs/total_energy_consumption/total_energy_consumption_state.dart b/lib/pages/analytics/modules/energy_management/blocs/total_energy_consumption/total_energy_consumption_state.dart new file mode 100644 index 00000000..832fd2fc --- /dev/null +++ b/lib/pages/analytics/modules/energy_management/blocs/total_energy_consumption/total_energy_consumption_state.dart @@ -0,0 +1,35 @@ +part of 'total_energy_consumption_bloc.dart'; + +enum TotalEnergyConsumptionStatus { + initial, + loading, + loaded, + failure, +} + +final class TotalEnergyConsumptionState extends Equatable { + const TotalEnergyConsumptionState({ + this.status = TotalEnergyConsumptionStatus.initial, + this.chartData = const [], + this.errorMessage, + }); + + final List chartData; + final TotalEnergyConsumptionStatus status; + final String? errorMessage; + + TotalEnergyConsumptionState copyWith({ + List? chartData, + TotalEnergyConsumptionStatus? status, + String? errorMessage, + }) { + return TotalEnergyConsumptionState( + chartData: chartData ?? this.chartData, + status: status ?? this.status, + errorMessage: errorMessage ?? this.errorMessage, + ); + } + + @override + List get props => [chartData, status, errorMessage]; +}