diff --git a/lib/pages/analytics/modules/energy_management/blocs/energy_consumption_per_device/energy_consumption_per_device_bloc.dart b/lib/pages/analytics/modules/energy_management/blocs/energy_consumption_per_device/energy_consumption_per_device_bloc.dart new file mode 100644 index 00000000..b1e021d9 --- /dev/null +++ b/lib/pages/analytics/modules/energy_management/blocs/energy_consumption_per_device/energy_consumption_per_device_bloc.dart @@ -0,0 +1,42 @@ +import 'package:bloc/bloc.dart'; +import 'package:equatable/equatable.dart'; +import 'package:syncrow_web/pages/analytics/models/device_energy_data_model.dart'; +import 'package:syncrow_web/pages/analytics/params/get_energy_consumption_per_device_param.dart'; +import 'package:syncrow_web/pages/analytics/services/energy_consumption_per_device/energy_consumption_per_device_service.dart'; + +part 'energy_consumption_per_device_event.dart'; +part 'energy_consumption_per_device_state.dart'; + +class EnergyConsumptionPerDeviceBloc + extends Bloc { + EnergyConsumptionPerDeviceBloc( + this._energyConsumptionPerDeviceService, + ) : super(const EnergyConsumptionPerDeviceState()) { + on(_onLoadEnergyConsumptionPerDeviceEvent); + } + + final EnergyConsumptionPerDeviceService _energyConsumptionPerDeviceService; + + Future _onLoadEnergyConsumptionPerDeviceEvent( + LoadEnergyConsumptionPerDeviceEvent event, + Emitter emit, + ) async { + emit(state.copyWith(status: EnergyConsumptionPerDeviceStatus.loading)); + try { + final chartData = await _energyConsumptionPerDeviceService.load(event.param); + emit( + state.copyWith( + status: EnergyConsumptionPerDeviceStatus.loaded, + chartData: chartData, + ), + ); + } on Exception catch (e) { + emit( + state.copyWith( + status: EnergyConsumptionPerDeviceStatus.failure, + errorMessage: e.toString(), + ), + ); + } + } +} diff --git a/lib/pages/analytics/modules/energy_management/blocs/energy_consumption_per_device/energy_consumption_per_device_event.dart b/lib/pages/analytics/modules/energy_management/blocs/energy_consumption_per_device/energy_consumption_per_device_event.dart new file mode 100644 index 00000000..a17cdab3 --- /dev/null +++ b/lib/pages/analytics/modules/energy_management/blocs/energy_consumption_per_device/energy_consumption_per_device_event.dart @@ -0,0 +1,18 @@ +part of 'energy_consumption_per_device_bloc.dart'; + +sealed class EnergyConsumptionPerDeviceEvent extends Equatable { + const EnergyConsumptionPerDeviceEvent(); + + @override + List get props => []; +} + +final class LoadEnergyConsumptionPerDeviceEvent + extends EnergyConsumptionPerDeviceEvent { + const LoadEnergyConsumptionPerDeviceEvent(this.param); + + final GetEnergyConsumptionPerDeviceParam param; + + @override + List get props => [param]; +} diff --git a/lib/pages/analytics/modules/energy_management/blocs/energy_consumption_per_device/energy_consumption_per_device_state.dart b/lib/pages/analytics/modules/energy_management/blocs/energy_consumption_per_device/energy_consumption_per_device_state.dart new file mode 100644 index 00000000..9ea7bd82 --- /dev/null +++ b/lib/pages/analytics/modules/energy_management/blocs/energy_consumption_per_device/energy_consumption_per_device_state.dart @@ -0,0 +1,30 @@ +part of 'energy_consumption_per_device_bloc.dart'; + +enum EnergyConsumptionPerDeviceStatus { initial, loading, loaded, failure } + +final class EnergyConsumptionPerDeviceState extends Equatable { + const EnergyConsumptionPerDeviceState({ + this.status = EnergyConsumptionPerDeviceStatus.initial, + this.chartData = const [], + this.errorMessage, + }); + + final List chartData; + final EnergyConsumptionPerDeviceStatus status; + final String? errorMessage; + + EnergyConsumptionPerDeviceState copyWith({ + List? chartData, + EnergyConsumptionPerDeviceStatus? status, + String? errorMessage, + }) { + return EnergyConsumptionPerDeviceState( + chartData: chartData ?? this.chartData, + status: status ?? this.status, + errorMessage: errorMessage ?? this.errorMessage, + ); + } + + @override + List get props => [chartData, status, errorMessage]; +}