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 05e82f1f..98b0c195 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 @@ -40,17 +40,18 @@ class DeviceManagementBloc List devices = []; _devices.clear(); var spaceBloc = event.context.read(); - final projectUuid = await ProjectManager.getProjectUUID() ?? ''; + final projectUuid = await ProjectManager.getProjectUUID() ?? ''; if (spaceBloc.state.selectedCommunities.isEmpty) { - devices = await DevicesManagementApi().fetchDevices('', '', projectUuid); + devices = + await DevicesManagementApi().fetchDevices('', '', projectUuid); } 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, projectUuid)); + devices.addAll(await DevicesManagementApi() + .fetchDevices(community, space, projectUuid)); } } } @@ -100,7 +101,7 @@ class DeviceManagementBloc )); if (currentProductName.isNotEmpty) { - add(SearchDevices(productName: currentProductName)); + add(SearchDevices(deviceNameOrProductName: currentProductName)); } } } @@ -269,34 +270,41 @@ class DeviceManagementBloc return 'All'; } } - void _onSearchDevices( SearchDevices event, Emitter emit) { if ((event.community == null || event.community!.isEmpty) && (event.unitName == null || event.unitName!.isEmpty) && - (event.productName == null || event.productName!.isEmpty)) { + (event.deviceNameOrProductName == null || + event.deviceNameOrProductName!.isEmpty)) { currentProductName = ''; - if (state is DeviceManagementFiltered) { - add(FilterDevices(_getFilterFromIndex(_selectedIndex))); - } else { - return; - } + _filteredDevices = List.from(_devices); + emit(DeviceManagementLoaded( + devices: _devices, + selectedIndex: _selectedIndex, + onlineCount: _onlineCount, + offlineCount: _offlineCount, + lowBatteryCount: _lowBatteryCount, + selectedDevice: null, + isControlButtonEnabled: false, + )); + return; } - - if (event.productName == currentProductName && + if (event.deviceNameOrProductName == currentProductName && event.community == currentCommunity && event.unitName == currentUnitName && event.searchField) { return; } - currentProductName = event.productName ?? ''; + currentProductName = event.deviceNameOrProductName ?? ''; currentCommunity = event.community; currentUnitName = event.unitName; - List devicesToSearch = _filteredDevices; + List devicesToSearch = _devices; if (devicesToSearch.isNotEmpty) { + final searchText = event.deviceNameOrProductName?.toLowerCase() ?? ''; + final filteredDevices = devicesToSearch.where((device) { final matchesCommunity = event.community == null || event.community!.isEmpty || @@ -304,31 +312,25 @@ class DeviceManagementBloc ?.toLowerCase() .contains(event.community!.toLowerCase()) ?? false); + final matchesUnit = event.unitName == null || event.unitName!.isEmpty || (device.spaces != null && - device.spaces!.isNotEmpty && - device.spaces![0].spaceName! - .toLowerCase() - .contains(event.unitName!.toLowerCase())); - final matchesProductName = event.productName == null || - event.productName!.isEmpty || - (device.name - ?.toLowerCase() - .contains(event.productName!.toLowerCase()) ?? - false); - final matchesDeviceName = event.productName == null || - event.productName!.isEmpty || - (device.categoryName - ?.toLowerCase() - .contains(event.productName!.toLowerCase()) ?? - false); + device.spaces!.any((space) => + space.spaceName != null && + space.spaceName! + .toLowerCase() + .contains(event.unitName!.toLowerCase()))); - return matchesCommunity && - matchesUnit && - (matchesProductName || matchesDeviceName); + final matchesSearchText = searchText.isEmpty || + (device.name?.toLowerCase().contains(searchText) ?? false) || + (device.productName?.toLowerCase().contains(searchText) ?? false); + + return matchesCommunity && matchesUnit && matchesSearchText; }).toList(); + _filteredDevices = filteredDevices; + emit(DeviceManagementFiltered( filteredDevices: filteredDevices, selectedIndex: _selectedIndex, 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 9928c50e..5292de0e 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 @@ -38,18 +38,18 @@ class SelectedFilterChanged extends DeviceManagementEvent { class SearchDevices extends DeviceManagementEvent { final String? community; final String? unitName; - final String? productName; + final String? deviceNameOrProductName; final bool searchField; const SearchDevices({ this.community, this.unitName, - this.productName, + this.deviceNameOrProductName, this.searchField = false, }); @override - List get props => [community, unitName, productName]; + List get props => [community, unitName, deviceNameOrProductName]; } class SelectDevice extends DeviceManagementEvent { 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 6440d18f..7e998ed6 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 @@ -53,7 +53,7 @@ class _DeviceSearchFiltersState extends State controller: controller, onSubmitted: () { final searchDevicesEvent = SearchDevices( - productName: _productNameController.text, + deviceNameOrProductName: _productNameController.text, unitName: _unitNameController.text, searchField: true, ); @@ -68,7 +68,7 @@ class _DeviceSearchFiltersState extends State onSearch: () => context.read().add( SearchDevices( unitName: _unitNameController.text, - productName: _productNameController.text, + deviceNameOrProductName: _productNameController.text, searchField: true, ), ),