From 506531e16a480c5339c59f5b728d92acf337095b Mon Sep 17 00:00:00 2001 From: Abdullah Alassaf Date: Mon, 3 Feb 2025 11:15:36 +0300 Subject: [PATCH] Fetch devices based on selection --- .../device_mgmt_bloc/device_managment_bloc.dart | 16 +++++++++++++++- .../device_mgmt_bloc/device_managment_event.dart | 9 +++++---- .../all_devices/view/device_managment_page.dart | 2 +- .../widgets/device_managment_body.dart | 12 ++++++------ .../widgets/device_search_filters.dart | 2 +- lib/pages/routines/view/routines_view.dart | 6 ++++-- lib/pages/space_tree/bloc/space_tree_bloc.dart | 4 ++-- lib/pages/space_tree/bloc/space_tree_state.dart | 13 +++++++++---- lib/pages/space_tree/view/space_tree_view.dart | 7 ++++++- 9 files changed, 49 insertions(+), 22 deletions(-) diff --git a/lib/pages/device_managment/all_devices/bloc/device_mgmt_bloc/device_managment_bloc.dart b/lib/pages/device_managment/all_devices/bloc/device_mgmt_bloc/device_managment_bloc.dart index db1dd2c7..6df5a780 100644 --- a/lib/pages/device_managment/all_devices/bloc/device_mgmt_bloc/device_managment_bloc.dart +++ b/lib/pages/device_managment/all_devices/bloc/device_mgmt_bloc/device_managment_bloc.dart @@ -1,6 +1,8 @@ import 'package:equatable/equatable.dart'; +import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:syncrow_web/pages/device_managment/all_devices/models/devices_model.dart'; +import 'package:syncrow_web/pages/space_tree/bloc/space_tree_bloc.dart'; import 'package:syncrow_web/services/devices_mang_api.dart'; part 'device_managment_event.dart'; @@ -32,7 +34,19 @@ class DeviceManagementBloc extends Bloc _onFetchDevices(FetchDevices event, Emitter emit) async { emit(DeviceManagementLoading()); try { - final devices = await DevicesManagementApi().fetchDevices(event.communityId, event.spaceId); + List devices = []; + var spaceBloc = event.context.read(); + if (spaceBloc.state.selectedCommunities.isEmpty) { + devices = await DevicesManagementApi().fetchDevices('', ''); + } else { + for (var community in spaceBloc.state.selectedCommunities) { + List spacesList = spaceBloc.state.selectedCommunityAndSpaces[community] ?? []; + for (var space in spacesList) { + await DevicesManagementApi().fetchDevices(community, space); + } + } + } + _selectedDevices.clear(); _devices = devices; _filteredDevices = devices; diff --git a/lib/pages/device_managment/all_devices/bloc/device_mgmt_bloc/device_managment_event.dart b/lib/pages/device_managment/all_devices/bloc/device_mgmt_bloc/device_managment_event.dart index da52249c..9928c50e 100644 --- a/lib/pages/device_managment/all_devices/bloc/device_mgmt_bloc/device_managment_event.dart +++ b/lib/pages/device_managment/all_devices/bloc/device_mgmt_bloc/device_managment_event.dart @@ -8,12 +8,13 @@ abstract class DeviceManagementEvent extends Equatable { } class FetchDevices extends DeviceManagementEvent { - final String communityId; - final String spaceId; + // final Map> selectedCommunitiesSpaces; + // final String spaceId; + final BuildContext context; - const FetchDevices(this.communityId, this.spaceId); + const FetchDevices(this.context); @override - List get props => [communityId, spaceId]; + List get props => [context]; } class FilterDevices extends DeviceManagementEvent { diff --git a/lib/pages/device_managment/all_devices/view/device_managment_page.dart b/lib/pages/device_managment/all_devices/view/device_managment_page.dart index 114c1fac..d29246ad 100644 --- a/lib/pages/device_managment/all_devices/view/device_managment_page.dart +++ b/lib/pages/device_managment/all_devices/view/device_managment_page.dart @@ -19,7 +19,7 @@ class DeviceManagementPage extends StatelessWidget with HelperResponsiveLayout { return MultiBlocProvider( providers: [ BlocProvider( - create: (context) => DeviceManagementBloc()..add(const FetchDevices('', '')), + create: (context) => DeviceManagementBloc()..add(FetchDevices(context)), ), ], child: WebScaffold( diff --git a/lib/pages/device_managment/all_devices/widgets/device_managment_body.dart b/lib/pages/device_managment/all_devices/widgets/device_managment_body.dart index 6e833787..11c692fe 100644 --- a/lib/pages/device_managment/all_devices/widgets/device_managment_body.dart +++ b/lib/pages/device_managment/all_devices/widgets/device_managment_body.dart @@ -8,6 +8,7 @@ import 'package:syncrow_web/pages/device_managment/all_devices/models/devices_mo import 'package:syncrow_web/pages/device_managment/all_devices/widgets/device_search_filters.dart'; import 'package:syncrow_web/pages/device_managment/shared/device_batch_control_dialog.dart'; import 'package:syncrow_web/pages/device_managment/shared/device_control_dialog.dart'; +import 'package:syncrow_web/pages/space_tree/bloc/space_tree_bloc.dart'; import 'package:syncrow_web/pages/space_tree/view/space_tree_view.dart'; import 'package:syncrow_web/utils/format_date_time.dart'; import 'package:syncrow_web/utils/helpers/responsice_layout_helper/responsive_layout_helper.dart'; @@ -62,12 +63,11 @@ class DeviceManagementBody extends StatelessWidget with HelperResponsiveLayout { return Row( children: [ - const Expanded( - child: SpaceTreeView( - // onSelectAction: (String communityId, String spaceId) { - // context.read().add(FetchDevices(communityId, spaceId)); - // }, - )), + Expanded(child: SpaceTreeView( + onSelect: () { + context.read().add(FetchDevices(context)); + }, + )), Expanded( flex: 3, child: state is DeviceManagementLoading diff --git a/lib/pages/device_managment/all_devices/widgets/device_search_filters.dart b/lib/pages/device_managment/all_devices/widgets/device_search_filters.dart index 0f86ef15..650c0d21 100644 --- a/lib/pages/device_managment/all_devices/widgets/device_search_filters.dart +++ b/lib/pages/device_managment/all_devices/widgets/device_search_filters.dart @@ -85,7 +85,7 @@ class _DeviceSearchFiltersState extends State with HelperRe productNameController.clear(); context.read() ..add(ResetFilters()) - ..add(const FetchDevices('', '')); + ..add(FetchDevices(context)); }, ); } diff --git a/lib/pages/routines/view/routines_view.dart b/lib/pages/routines/view/routines_view.dart index 8485cfca..2f7daff8 100644 --- a/lib/pages/routines/view/routines_view.dart +++ b/lib/pages/routines/view/routines_view.dart @@ -32,7 +32,7 @@ class _RoutinesViewState extends State { } return Row( children: [ - const Expanded( + Expanded( child: // SideSpacesView( // onSelectAction: (String communityId, String spaceId) { @@ -41,7 +41,9 @@ class _RoutinesViewState extends State { // // ..add(LoadAutomation(spaceId)); // }, // ) - SpaceTreeView()), + SpaceTreeView( + onSelect: () {}, + )), Expanded( flex: 3, child: Padding( diff --git a/lib/pages/space_tree/bloc/space_tree_bloc.dart b/lib/pages/space_tree/bloc/space_tree_bloc.dart index 120ce274..75aa58ce 100644 --- a/lib/pages/space_tree/bloc/space_tree_bloc.dart +++ b/lib/pages/space_tree/bloc/space_tree_bloc.dart @@ -6,8 +6,8 @@ import 'package:syncrow_web/pages/spaces_management/all_spaces/model/space_model import 'package:syncrow_web/services/space_mana_api.dart'; class SpaceTreeBloc extends Bloc { - String selectedCommunityId = ''; - String selectedSpaceId = ''; + String selectedCommunityId = '9cb9da1f-adbe-4688-bf55-29e7584007a7'; + String selectedSpaceId = '68dd94cf-0240-4ccf-8c26-df506246a0dd'; SpaceTreeBloc() : super(const SpaceTreeState()) { on(_fetchSpaces); diff --git a/lib/pages/space_tree/bloc/space_tree_state.dart b/lib/pages/space_tree/bloc/space_tree_state.dart index b5c987ef..1abd7455 100644 --- a/lib/pages/space_tree/bloc/space_tree_state.dart +++ b/lib/pages/space_tree/bloc/space_tree_state.dart @@ -2,6 +2,7 @@ import 'package:equatable/equatable.dart'; import 'package:syncrow_web/pages/spaces_management/all_spaces/model/community_model.dart'; class SpaceTreeState extends Equatable { + final Map> selectedCommunityAndSpaces; final List communityList; final List filteredCommunity; final List expandedCommunities; @@ -19,7 +20,8 @@ class SpaceTreeState extends Equatable { this.selectedCommunities = const [], this.selectedSpaces = const [], this.soldCheck = const [], - this.isSearching = false}); + this.isSearching = false, + this.selectedCommunityAndSpaces = const {}}); SpaceTreeState copyWith( {List? communitiesList, @@ -29,7 +31,8 @@ class SpaceTreeState extends Equatable { List? selectedCommunities, List? selectedSpaces, List? soldCheck, - bool? isSearching}) { + bool? isSearching, + Map>? selectedCommunityAndSpaces}) { return SpaceTreeState( communityList: communitiesList ?? this.communityList, filteredCommunity: filteredCommunity ?? this.filteredCommunity, @@ -38,7 +41,8 @@ class SpaceTreeState extends Equatable { selectedCommunities: selectedCommunities ?? this.selectedCommunities, selectedSpaces: selectedSpaces ?? this.selectedSpaces, soldCheck: soldCheck ?? this.soldCheck, - isSearching: isSearching ?? this.isSearching); + isSearching: isSearching ?? this.isSearching, + selectedCommunityAndSpaces: selectedCommunityAndSpaces ?? this.selectedCommunityAndSpaces); } @override @@ -50,7 +54,8 @@ class SpaceTreeState extends Equatable { selectedCommunities, selectedSpaces, soldCheck, - isSearching + isSearching, + selectedCommunityAndSpaces ]; } diff --git a/lib/pages/space_tree/view/space_tree_view.dart b/lib/pages/space_tree/view/space_tree_view.dart index f5dfbc84..1fcc63b0 100644 --- a/lib/pages/space_tree/view/space_tree_view.dart +++ b/lib/pages/space_tree/view/space_tree_view.dart @@ -11,7 +11,8 @@ import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/style.dart'; class SpaceTreeView extends StatelessWidget { - const SpaceTreeView({super.key}); + final Function onSelect; + const SpaceTreeView({required this.onSelect, super.key}); @override Widget build(BuildContext context) { @@ -64,6 +65,8 @@ class SpaceTreeView extends StatelessWidget { onItemSelected: () { context.read().add( OnCommunitySelected(community.uuid, community.spaces)); + + onSelect(); }, children: community.spaces.map((space) { return CustomExpansionTileSpaceTree( @@ -76,6 +79,7 @@ class SpaceTreeView extends StatelessWidget { onExpansionChanged: () { context.read().add( OnSpaceExpanded(community.uuid, space.uuid ?? '')); + onSelect(); }, isSelected: state.selectedSpaces.contains(space.uuid) || state.soldCheck.contains(space.uuid), @@ -109,6 +113,7 @@ class SpaceTreeView extends StatelessWidget { context .read() .add(OnSpaceSelected(communityId, child.uuid ?? '', child.children)); + onSelect(); }, onExpansionChanged: () { context.read().add(OnSpaceExpanded(communityId, child.uuid ?? ''));