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..56b08ced 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,20 @@ class DeviceManagementBloc extends Bloc _onFetchDevices(FetchDevices event, Emitter emit) async { emit(DeviceManagementLoading()); try { - final devices = await DevicesManagementApi().fetchDevices(event.communityId, event.spaceId); + List devices = []; + _devices.clear(); + 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) { + devices.addAll(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/bloc/routine_bloc/routine_bloc.dart b/lib/pages/routines/bloc/routine_bloc/routine_bloc.dart index bc83c40f..b05229c4 100644 --- a/lib/pages/routines/bloc/routine_bloc/routine_bloc.dart +++ b/lib/pages/routines/bloc/routine_bloc/routine_bloc.dart @@ -816,7 +816,7 @@ class RoutineBloc extends Bloc { FutureOr _fetchDevices(FetchDevicesInRoutine event, Emitter emit) async { emit(state.copyWith(isLoading: true)); try { - final devices = await DevicesManagementApi().fetchDevices(communityId, spaceId); + final devices = await DevicesManagementApi().fetchDevices('', ''); emit(state.copyWith(isLoading: false, devices: devices)); } catch (e) { 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..6ac0c0d9 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 = 'aff21a57-2f91-4e5c-b99b-0182c3ab65a9'; + String selectedSpaceId = '25c96044-fadf-44bb-93c7-3c079e527ce6'; SpaceTreeBloc() : super(const SpaceTreeState()) { on(_fetchSpaces); @@ -87,6 +87,7 @@ class SpaceTreeBloc extends Bloc { List.from(state.selectedCommunities.toSet().toList()); List updatedSelectedSpaces = List.from(state.selectedSpaces.toSet().toList()); List updatedSoldChecks = List.from(state.soldCheck.toSet().toList()); + Map> communityAndSpaces = Map.from(state.selectedCommunityAndSpaces); List childrenIds = _getAllChildIds(event.children); @@ -101,10 +102,13 @@ class SpaceTreeBloc extends Bloc { updatedSoldChecks.removeWhere(childrenIds.contains); } + communityAndSpaces[event.communityId] = updatedSelectedSpaces; + emit(state.copyWith( selectedCommunities: updatedSelectedCommunities, selectedSpaces: updatedSelectedSpaces, - soldCheck: updatedSoldChecks)); + soldCheck: updatedSoldChecks, + selectedCommunityAndSpaces: communityAndSpaces)); } catch (e) { emit(const SpaceTreeErrorState('Something went wrong')); } @@ -116,6 +120,7 @@ class SpaceTreeBloc extends Bloc { List.from(state.selectedCommunities.toSet().toList()); List updatedSelectedSpaces = List.from(state.selectedSpaces.toSet().toList()); List updatedSoldChecks = List.from(state.soldCheck.toSet().toList()); + Map> communityAndSpaces = Map.from(state.selectedCommunityAndSpaces); List childrenIds = _getAllChildIds(event.children); bool isChildSelected = false; @@ -166,10 +171,13 @@ class SpaceTreeBloc extends Bloc { } } + communityAndSpaces[event.communityId] = updatedSelectedSpaces; + emit(state.copyWith( selectedCommunities: updatedSelectedCommunities, selectedSpaces: updatedSelectedSpaces, - soldCheck: updatedSoldChecks)); + soldCheck: updatedSoldChecks, + selectedCommunityAndSpaces: communityAndSpaces)); emit(state.copyWith(selectedSpaces: updatedSelectedSpaces)); } catch (e) { emit(const SpaceTreeErrorState('Something went wrong')); 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..6f7dcb90 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( @@ -72,6 +75,7 @@ class SpaceTreeView extends StatelessWidget { onItemSelected: () { context.read().add(OnSpaceSelected( community.uuid, space.uuid ?? '', space.children)); + onSelect(); }, onExpansionChanged: () { context.read().add( @@ -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 ?? '')); diff --git a/lib/services/devices_mang_api.dart b/lib/services/devices_mang_api.dart index cdddbbeb..1a8b979e 100644 --- a/lib/services/devices_mang_api.dart +++ b/lib/services/devices_mang_api.dart @@ -23,7 +23,8 @@ class DevicesManagementApi { : ApiEndpoints.getAllDevices, showServerMessage: true, expectedResponseModel: (json) { - List jsonData = json; + List jsonData = + communityId.isNotEmpty && spaceId.isNotEmpty ? json['data'] : json; List devicesList = jsonData.map((jsonItem) { return AllDevicesModel.fromJson(jsonItem); }).toList();