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 index f84e2bdd..244b2fa0 100644 --- 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 @@ -33,6 +33,9 @@ class AnalyticsDevicesBloc selectedDevice: devices.firstOrNull, ), ); + if (devices.isNotEmpty) { + event.onSuccess(devices.first); + } } catch (e) { emit( AnalyticsDevicesState( @@ -40,7 +43,7 @@ class AnalyticsDevicesBloc errorMessage: e.toString(), ), ); - } + } } void _onSelectAnalyticsDevice( 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 index 4a1f4eb0..fb61e73b 100644 --- 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 @@ -8,9 +8,10 @@ sealed class AnalyticsDevicesEvent extends Equatable { } final class LoadAnalyticsDevicesEvent extends AnalyticsDevicesEvent { - const LoadAnalyticsDevicesEvent(this.param); + const LoadAnalyticsDevicesEvent({required this.param, required this.onSuccess}); final GetAnalyticsDevicesParam param; + final void Function(AnalyticsDevice device) onSuccess; @override List get props => [param]; diff --git a/lib/pages/analytics/modules/energy_management/helpers/fetch_energy_management_data_helper.dart b/lib/pages/analytics/modules/energy_management/helpers/fetch_energy_management_data_helper.dart index b853a8b0..9346f66e 100644 --- a/lib/pages/analytics/modules/energy_management/helpers/fetch_energy_management_data_helper.dart +++ b/lib/pages/analytics/modules/energy_management/helpers/fetch_energy_management_data_helper.dart @@ -92,13 +92,15 @@ abstract final class FetchEnergyManagementDataHelper { } } - static void loadRealtimeDeviceChanges(BuildContext context) { + static void loadRealtimeDeviceChanges( + BuildContext context, { + String? deviceUuid, + }) { final selectedDevice = getSelectedDevice(context); - if (selectedDevice case final AnalyticsDevice device) { - context.read().add( - RealtimeDeviceChangesStarted(device.uuid), - ); - } + + context.read().add( + RealtimeDeviceChangesStarted(deviceUuid ?? selectedDevice?.uuid ?? ''), + ); } static void loadAnalyticsDevices( @@ -108,7 +110,15 @@ abstract final class FetchEnergyManagementDataHelper { }) { context.read().add( LoadAnalyticsDevicesEvent( - GetAnalyticsDevicesParam( + onSuccess: (device) { + context.read().add( + LoadPowerClampInfoEvent(device.uuid), + ); + context.read().add( + RealtimeDeviceChangesStarted(device.uuid), + ); + }, + param: GetAnalyticsDevicesParam( communityUuid: communityUuid, spaceUuid: spaceUuid, deviceTypes: ['PC'], @@ -119,13 +129,12 @@ abstract final class FetchEnergyManagementDataHelper { } static void clearAllData(BuildContext context) { - context.read().add( - const RealtimeDeviceChangesClosed(), - ); - context.read().add( const ClearPowerClampInfoEvent(), ); + context.read().add( + const RealtimeDeviceChangesClosed(), + ); context.read().add( const ClearEnergyConsumptionPerDeviceEvent(), diff --git a/lib/pages/analytics/modules/energy_management/widgets/power_clamp_energy_data_device_dropdown.dart b/lib/pages/analytics/modules/energy_management/widgets/power_clamp_energy_data_device_dropdown.dart index ac77890c..20227244 100644 --- a/lib/pages/analytics/modules/energy_management/widgets/power_clamp_energy_data_device_dropdown.dart +++ b/lib/pages/analytics/modules/energy_management/widgets/power_clamp_energy_data_device_dropdown.dart @@ -6,7 +6,12 @@ import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/extension/build_context_x.dart'; class PowerClampEnergyDataDeviceDropdown extends StatelessWidget { - const PowerClampEnergyDataDeviceDropdown({super.key}); + const PowerClampEnergyDataDeviceDropdown({ + required this.onChanged, + super.key, + }); + + final ValueChanged onChanged; @override Widget build(BuildContext context) { @@ -42,7 +47,7 @@ class PowerClampEnergyDataDeviceDropdown extends StatelessWidget { items: state.devices.map((e) { return DropdownMenuItem( value: e, - child: Text(e.uuid), + child: Text(e.name), ); }).toList(), onChanged: (value) { @@ -50,6 +55,7 @@ class PowerClampEnergyDataDeviceDropdown extends StatelessWidget { context.read().add( SelectAnalyticsDeviceEvent(device), ); + onChanged.call(device); } }, ), diff --git a/lib/pages/analytics/modules/energy_management/widgets/power_clamp_energy_data_widget.dart b/lib/pages/analytics/modules/energy_management/widgets/power_clamp_energy_data_widget.dart index 6bb56071..81cacd75 100644 --- a/lib/pages/analytics/modules/energy_management/widgets/power_clamp_energy_data_widget.dart +++ b/lib/pages/analytics/modules/energy_management/widgets/power_clamp_energy_data_widget.dart @@ -1,8 +1,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_web/pages/analytics/models/power_clamp_energy_status.dart'; +import 'package:syncrow_web/pages/analytics/modules/analytics/blocs/analytics_devices/analytics_devices_bloc.dart'; import 'package:syncrow_web/pages/analytics/modules/energy_management/blocs/power_clamp_info/power_clamp_info_bloc.dart'; import 'package:syncrow_web/pages/analytics/modules/energy_management/blocs/realtime_device_changes/realtime_device_changes_bloc.dart'; +import 'package:syncrow_web/pages/analytics/modules/energy_management/helpers/fetch_energy_management_data_helper.dart'; import 'package:syncrow_web/pages/analytics/modules/energy_management/widgets/energy_consumption_by_phases_chart_box.dart'; import 'package:syncrow_web/pages/analytics/modules/energy_management/widgets/power_clamp_energy_data_device_dropdown.dart'; import 'package:syncrow_web/pages/analytics/modules/energy_management/widgets/power_clamp_energy_status_widget.dart'; @@ -50,7 +52,8 @@ class PowerClampEnergyDataWidget extends StatelessWidget { ), const SizedBox(height: 6), SelectableText( - state.powerClampModel?.productUuid ?? 'N/A', + context.watch().state.selectedDevice?.uuid ?? + 'N/A', style: context.textTheme.bodySmall?.copyWith( color: ColorsManager.blackColor, fontWeight: FontWeight.w400, @@ -122,11 +125,18 @@ class PowerClampEnergyDataWidget extends StatelessWidget { ), ), const Spacer(), - const Expanded( + Expanded( child: FittedBox( fit: BoxFit.scaleDown, alignment: AlignmentDirectional.centerEnd, - child: PowerClampEnergyDataDeviceDropdown(), + child: PowerClampEnergyDataDeviceDropdown( + onChanged: (value) { + FetchEnergyManagementDataHelper.loadRealtimeDeviceChanges( + context, + deviceUuid: value.uuid, + ); + }, + ), ), ), ], diff --git a/lib/pages/analytics/modules/occupancy/helpers/fetch_occupancy_data_helper.dart b/lib/pages/analytics/modules/occupancy/helpers/fetch_occupancy_data_helper.dart index fb9ff34a..be21027b 100644 --- a/lib/pages/analytics/modules/occupancy/helpers/fetch_occupancy_data_helper.dart +++ b/lib/pages/analytics/modules/occupancy/helpers/fetch_occupancy_data_helper.dart @@ -20,6 +20,7 @@ abstract final class FetchOccupancyDataHelper { }) { if (communityId.isEmpty && spaceId.isEmpty) { clearAllData(context); + return; } final datePickerState = context.read().state; @@ -63,12 +64,17 @@ abstract final class FetchOccupancyDataHelper { }) { context.read().add( LoadAnalyticsDevicesEvent( - GetAnalyticsDevicesParam( + param: GetAnalyticsDevicesParam( communityUuid: communityUuid, spaceUuid: spaceUuid, deviceTypes: ['WPS', 'CPS'], requestType: AnalyticsDeviceRequestType.occupancy, ), + onSuccess: (device) { + context.read() + ..add(const RealtimeDeviceChangesClosed()) + ..add(RealtimeDeviceChangesStarted(device.uuid)); + }, ), ); } diff --git a/lib/pages/analytics/modules/occupancy/widgets/occupancy_end_side_bar.dart b/lib/pages/analytics/modules/occupancy/widgets/occupancy_end_side_bar.dart index 788d087e..5455a958 100644 --- a/lib/pages/analytics/modules/occupancy/widgets/occupancy_end_side_bar.dart +++ b/lib/pages/analytics/modules/occupancy/widgets/occupancy_end_side_bar.dart @@ -1,7 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_web/pages/analytics/models/power_clamp_energy_status.dart'; +import 'package:syncrow_web/pages/analytics/modules/analytics/blocs/analytics_devices/analytics_devices_bloc.dart'; import 'package:syncrow_web/pages/analytics/modules/energy_management/blocs/realtime_device_changes/realtime_device_changes_bloc.dart'; +import 'package:syncrow_web/pages/analytics/modules/energy_management/helpers/fetch_energy_management_data_helper.dart'; import 'package:syncrow_web/pages/analytics/modules/energy_management/widgets/power_clamp_energy_data_device_dropdown.dart'; import 'package:syncrow_web/pages/analytics/modules/energy_management/widgets/power_clamp_energy_status_widget.dart'; import 'package:syncrow_web/pages/device_managment/all_devices/models/device_status.dart'; @@ -9,7 +11,6 @@ import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/constants/assets.dart'; import 'package:syncrow_web/utils/extension/build_context_x.dart'; import 'package:syncrow_web/utils/style.dart'; -import 'package:uuid/uuid.dart'; class OccupancyEndSideBar extends StatelessWidget { const OccupancyEndSideBar({super.key}); @@ -37,7 +38,8 @@ class OccupancyEndSideBar extends StatelessWidget { ), const SizedBox(height: 6), SelectableText( - (const Uuid().v4()), + context.watch().state.selectedDevice?.uuid ?? + 'N/A', style: context.textTheme.bodySmall?.copyWith( color: ColorsManager.blackColor, fontWeight: FontWeight.w400, @@ -120,11 +122,17 @@ class OccupancyEndSideBar extends StatelessWidget { ), ), const Spacer(), - const Expanded( + Expanded( child: FittedBox( fit: BoxFit.scaleDown, alignment: AlignmentDirectional.centerEnd, - child: PowerClampEnergyDataDeviceDropdown(), + child: PowerClampEnergyDataDeviceDropdown( + onChanged: (value) => + FetchEnergyManagementDataHelper.loadRealtimeDeviceChanges( + context, + deviceUuid: value.uuid, + ), + ), ), ), ],