diff --git a/lib/pages/analytics/modules/energy_management/blocs/energy_consumption_by_phases/energy_consumption_by_phases_bloc.dart b/lib/pages/analytics/modules/energy_management/blocs/energy_consumption_by_phases/energy_consumption_by_phases_bloc.dart new file mode 100644 index 00000000..2711e304 --- /dev/null +++ b/lib/pages/analytics/modules/energy_management/blocs/energy_consumption_by_phases/energy_consumption_by_phases_bloc.dart @@ -0,0 +1,42 @@ +import 'package:bloc/bloc.dart'; +import 'package:equatable/equatable.dart'; +import 'package:syncrow_web/pages/analytics/models/phases_energy_consumption.dart'; +import 'package:syncrow_web/pages/analytics/params/get_energy_consumption_by_phases_param.dart'; +import 'package:syncrow_web/pages/analytics/services/energy_consumption_by_phases/energy_consumption_by_phases_service.dart'; + +part 'energy_consumption_by_phases_event.dart'; +part 'energy_consumption_by_phases_state.dart'; + +class EnergyConsumptionByPhasesBloc + extends Bloc { + EnergyConsumptionByPhasesBloc( + this._energyConsumptionByPhasesService, + ) : super(const EnergyConsumptionByPhasesState()) { + on(_onLoadEnergyConsumptionByPhasesEvent); + } + + final EnergyConsumptionByPhasesService _energyConsumptionByPhasesService; + + Future _onLoadEnergyConsumptionByPhasesEvent( + LoadEnergyConsumptionByPhasesEvent event, + Emitter emit, + ) async { + emit(state.copyWith(status: EnergyConsumptionByPhasesStatus.loading)); + try { + final chartData = await _energyConsumptionByPhasesService.load(event.param); + emit( + state.copyWith( + status: EnergyConsumptionByPhasesStatus.loaded, + chartData: chartData, + ), + ); + } catch (e) { + emit( + state.copyWith( + status: EnergyConsumptionByPhasesStatus.failure, + errorMessage: e.toString(), + ), + ); + } + } +} diff --git a/lib/pages/analytics/modules/energy_management/blocs/energy_consumption_by_phases/energy_consumption_by_phases_event.dart b/lib/pages/analytics/modules/energy_management/blocs/energy_consumption_by_phases/energy_consumption_by_phases_event.dart new file mode 100644 index 00000000..1886e422 --- /dev/null +++ b/lib/pages/analytics/modules/energy_management/blocs/energy_consumption_by_phases/energy_consumption_by_phases_event.dart @@ -0,0 +1,19 @@ +part of 'energy_consumption_by_phases_bloc.dart'; + +sealed class EnergyConsumptionByPhasesEvent extends Equatable { + const EnergyConsumptionByPhasesEvent(); + + @override + List get props => []; +} + +class LoadEnergyConsumptionByPhasesEvent extends EnergyConsumptionByPhasesEvent { + const LoadEnergyConsumptionByPhasesEvent({ + required this.param, + }); + + final GetEnergyConsumptionByPhasesParam param; + + @override + List get props => [param]; +} diff --git a/lib/pages/analytics/modules/energy_management/blocs/energy_consumption_by_phases/energy_consumption_by_phases_state.dart b/lib/pages/analytics/modules/energy_management/blocs/energy_consumption_by_phases/energy_consumption_by_phases_state.dart new file mode 100644 index 00000000..b6dd5890 --- /dev/null +++ b/lib/pages/analytics/modules/energy_management/blocs/energy_consumption_by_phases/energy_consumption_by_phases_state.dart @@ -0,0 +1,35 @@ +part of 'energy_consumption_by_phases_bloc.dart'; + +enum EnergyConsumptionByPhasesStatus { + initial, + loading, + loaded, + failure, +} + +final class EnergyConsumptionByPhasesState extends Equatable { + const EnergyConsumptionByPhasesState({ + this.status = EnergyConsumptionByPhasesStatus.initial, + this.chartData = const [], + this.errorMessage, + }); + + final List chartData; + final EnergyConsumptionByPhasesStatus status; + final String? errorMessage; + + EnergyConsumptionByPhasesState copyWith({ + List? chartData, + EnergyConsumptionByPhasesStatus? status, + String? errorMessage, + }) { + return EnergyConsumptionByPhasesState( + chartData: chartData ?? this.chartData, + status: status ?? this.status, + errorMessage: errorMessage ?? this.errorMessage, + ); + } + + @override + List get props => [chartData, status, errorMessage]; +}