From e792dbd72f73c0d65dc10276a16ced48d951b3e0 Mon Sep 17 00:00:00 2001 From: Faris Armoush Date: Thu, 22 May 2025 14:58:42 +0300 Subject: [PATCH] SP-1591/ Implement business logic in `AirQualityDataLoadingStrategy` for community structure loading strategy. --- .../fetch_air_quality_data_helper.dart | 10 ++-- .../air_quality_data_loading_strategy.dart | 55 +++++++++++++++++-- 2 files changed, 55 insertions(+), 10 deletions(-) diff --git a/lib/pages/analytics/modules/air_quality/helpers/fetch_air_quality_data_helper.dart b/lib/pages/analytics/modules/air_quality/helpers/fetch_air_quality_data_helper.dart index 722b9210..aa2da2da 100644 --- a/lib/pages/analytics/modules/air_quality/helpers/fetch_air_quality_data_helper.dart +++ b/lib/pages/analytics/modules/air_quality/helpers/fetch_air_quality_data_helper.dart @@ -1,15 +1,13 @@ import 'package:flutter/material.dart'; -import 'package:syncrow_web/pages/spaces_management/all_spaces/model/community_model.dart'; -import 'package:syncrow_web/pages/spaces_management/all_spaces/model/space_model.dart'; abstract final class FetchAirQualityDataHelper { const FetchAirQualityDataHelper._(); static void loadAirQualityData( - BuildContext context, - CommunityModel community, - SpaceModel space, - ) { + BuildContext context, { + required String communityUuid, + required String spaceUuid, + }) { // TODO: implement loadAirQualityData } diff --git a/lib/pages/analytics/modules/analytics/strategies/air_quality_data_loading_strategy.dart b/lib/pages/analytics/modules/analytics/strategies/air_quality_data_loading_strategy.dart index 636bc53d..af355e6d 100644 --- a/lib/pages/analytics/modules/analytics/strategies/air_quality_data_loading_strategy.dart +++ b/lib/pages/analytics/modules/analytics/strategies/air_quality_data_loading_strategy.dart @@ -1,5 +1,9 @@ import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:syncrow_web/pages/analytics/modules/air_quality/helpers/fetch_air_quality_data_helper.dart'; import 'package:syncrow_web/pages/analytics/modules/analytics/strategies/analytics_data_loading_strategy.dart'; +import 'package:syncrow_web/pages/space_tree/bloc/space_tree_bloc.dart'; +import 'package:syncrow_web/pages/space_tree/bloc/space_tree_event.dart'; import 'package:syncrow_web/pages/spaces_management/all_spaces/model/community_model.dart'; import 'package:syncrow_web/pages/spaces_management/all_spaces/model/space_model.dart'; @@ -10,7 +14,24 @@ final class AirQualityDataLoadingStrategy implements AnalyticsDataLoadingStrateg CommunityModel community, List spaces, ) { - // TODO: implement onCommunitySelected + context.read().add( + OnCommunitySelected( + community.uuid, + spaces.isNotEmpty ? [spaces.first] : [], + ), + ); + + final spaceTreeState = context.read().state; + if (spaceTreeState.selectedCommunities.contains(community.uuid)) { + clearData(context); + return; + } + + FetchAirQualityDataHelper.loadAirQualityData( + context, + communityUuid: community.uuid, + spaceUuid: spaces.isNotEmpty ? (spaces.first.uuid ?? '') : '', + ); } @override @@ -19,7 +40,32 @@ final class AirQualityDataLoadingStrategy implements AnalyticsDataLoadingStrateg CommunityModel community, SpaceModel space, ) { - // TODO: implement onSpaceSelected + final spaceTreeBloc = context.read(); + final selectedSpacesIds = spaceTreeBloc.state.selectedSpaces; + final isSpaceSelected = selectedSpacesIds.contains(space.uuid); + + if (selectedSpacesIds.isEmpty) { + spaceTreeBloc.add(OnCommunitySelected(community.uuid, [space])); + } else if (isSpaceSelected) { + spaceTreeBloc.add(const SpaceTreeClearSelectionEvent()); + } else { + spaceTreeBloc + ..add(const SpaceTreeClearSelectionEvent()) + ..add(OnSpaceSelected(community, space.uuid ?? '', [])); + } + + final spaceTreeState = context.read().state; + if (spaceTreeState.selectedCommunities.contains(community.uuid) || + spaceTreeState.selectedSpaces.contains(space.uuid)) { + clearData(context); + return; + } + + FetchAirQualityDataHelper.loadAirQualityData( + context, + communityUuid: community.uuid, + spaceUuid: space.uuid ?? '', + ); } @override @@ -28,11 +74,12 @@ final class AirQualityDataLoadingStrategy implements AnalyticsDataLoadingStrateg CommunityModel community, SpaceModel child, ) { - // TODO: implement onChildSpaceSelected + // Do nothing } @override void clearData(BuildContext context) { - // TODO: implement clearData + context.read().add(const SpaceTreeClearSelectionEvent()); + FetchAirQualityDataHelper.clearAllData(context); } }