From 401d0a97888fe13ec24b066dcf42e862d388c6bc Mon Sep 17 00:00:00 2001 From: Faris Armoush Date: Wed, 14 May 2025 12:41:44 +0300 Subject: [PATCH] Created `AnalyticsDevicesBloc`. --- .../analytics_devices_bloc.dart | 42 +++++++++++++++++++ .../analytics_devices_event.dart | 17 ++++++++ .../analytics_devices_state.dart | 18 ++++++++ 3 files changed, 77 insertions(+) create mode 100644 lib/pages/analytics/modules/analytics/blocs/analytics_devices/analytics_devices_bloc.dart create mode 100644 lib/pages/analytics/modules/analytics/blocs/analytics_devices/analytics_devices_event.dart create mode 100644 lib/pages/analytics/modules/analytics/blocs/analytics_devices/analytics_devices_state.dart diff --git a/lib/pages/analytics/modules/analytics/blocs/analytics_devices/analytics_devices_bloc.dart b/lib/pages/analytics/modules/analytics/blocs/analytics_devices/analytics_devices_bloc.dart new file mode 100644 index 00000000..1f2c84ed --- /dev/null +++ b/lib/pages/analytics/modules/analytics/blocs/analytics_devices/analytics_devices_bloc.dart @@ -0,0 +1,42 @@ +import 'package:bloc/bloc.dart'; +import 'package:equatable/equatable.dart'; +import 'package:syncrow_web/pages/analytics/models/analytics_device.dart'; +import 'package:syncrow_web/pages/analytics/params/get_analytics_devices_param.dart'; +import 'package:syncrow_web/pages/analytics/services/analytics_devices/analytics_devices_service.dart'; + +part 'analytics_devices_event.dart'; +part 'analytics_devices_state.dart'; + +class AnalyticsDevicesBloc + extends Bloc { + AnalyticsDevicesBloc( + this._analyticsDevicesService, + ) : super(const AnalyticsDevicesState()) { + on(_onLoadAnalyticsDevices); + } + final AnalyticsDevicesService _analyticsDevicesService; + + Future _onLoadAnalyticsDevices( + LoadAnalyticsDevicesEvent event, + Emitter emit, + ) async { + emit(const AnalyticsDevicesState(status: AnalyticsDevicesStatus.loading)); + + try { + final devices = await _analyticsDevicesService.getDevices(event.param); + emit( + AnalyticsDevicesState( + status: AnalyticsDevicesStatus.loaded, + devices: devices, + ), + ); + } catch (e) { + emit( + AnalyticsDevicesState( + status: AnalyticsDevicesStatus.failure, + errorMessage: e.toString(), + ), + ); + } + } +} diff --git a/lib/pages/analytics/modules/analytics/blocs/analytics_devices/analytics_devices_event.dart b/lib/pages/analytics/modules/analytics/blocs/analytics_devices/analytics_devices_event.dart new file mode 100644 index 00000000..10e0b55c --- /dev/null +++ b/lib/pages/analytics/modules/analytics/blocs/analytics_devices/analytics_devices_event.dart @@ -0,0 +1,17 @@ +part of 'analytics_devices_bloc.dart'; + +sealed class AnalyticsDevicesEvent extends Equatable { + const AnalyticsDevicesEvent(); + + @override + List get props => []; +} + +final class LoadAnalyticsDevicesEvent extends AnalyticsDevicesEvent { + const LoadAnalyticsDevicesEvent(this.param); + + final GetAnalyticsDevicesParam param; + + @override + List get props => [param]; +} diff --git a/lib/pages/analytics/modules/analytics/blocs/analytics_devices/analytics_devices_state.dart b/lib/pages/analytics/modules/analytics/blocs/analytics_devices/analytics_devices_state.dart new file mode 100644 index 00000000..02a6765c --- /dev/null +++ b/lib/pages/analytics/modules/analytics/blocs/analytics_devices/analytics_devices_state.dart @@ -0,0 +1,18 @@ +part of 'analytics_devices_bloc.dart'; + +enum AnalyticsDevicesStatus { initial, loading, loaded, failure } + +final class AnalyticsDevicesState extends Equatable { + const AnalyticsDevicesState({ + this.status = AnalyticsDevicesStatus.initial, + this.devices = const [], + this.errorMessage, + }); + + final AnalyticsDevicesStatus status; + final List devices; + final String? errorMessage; + + @override + List get props => [status, devices, errorMessage]; +}