diff --git a/mobile/lib/ui/viewer/gallery/state/search_filter_data_provider.dart b/mobile/lib/ui/viewer/gallery/state/search_filter_data_provider.dart index a3c1477271..c18e31cb6a 100644 --- a/mobile/lib/ui/viewer/gallery/state/search_filter_data_provider.dart +++ b/mobile/lib/ui/viewer/gallery/state/search_filter_data_provider.dart @@ -15,29 +15,24 @@ class SearchFilterDataProvider { List get appliedFilters => _appliedFiltersNotifier.appliedFilters; - void addRecommendations(List filters) { - _recommendedFiltersNotifier.addFilters( - filters, - initialGalleryFilter: initialGalleryFilter, - ); + void clearAndAddRecommendations(List filters) { + _recommendedFiltersNotifier.clearFilters(); + _safelyAddToRecommended(filters); } void applyFilters(List filters) { + _recommendedFiltersNotifier.removeFilters(filters); if (!_isSearching) { _isSearching = true; _appliedFiltersNotifier.addFilters([initialGalleryFilter!, ...filters]); } else { _appliedFiltersNotifier.addFilters(filters); } - _recommendedFiltersNotifier.removeFilters(filters); } void removeAppliedFilters(List filters) { _appliedFiltersNotifier.removeFilters(filters); - _recommendedFiltersNotifier.addFilters( - filters, - initialGalleryFilter: initialGalleryFilter, - ); + _safelyAddToRecommended(filters); } void clearRecommendations() { @@ -75,6 +70,17 @@ class SearchFilterDataProvider { _recommendedFiltersNotifier.removeListener(listener); } } + + void _safelyAddToRecommended(List filters) { + _recommendedFiltersNotifier.addFilters( + filters, + filtersToAvoid: [ + initialGalleryFilter!, + ...appliedFilters, + ...recommendations, + ], + ); + } } class _AppliedFiltersNotifier extends ChangeNotifier { @@ -100,23 +106,24 @@ class _RecommendedFiltersNotifier extends ChangeNotifier { void addFilters( List filters, { - required HierarchicalSearchFilter? initialGalleryFilter, + ///This is to ensure that the filters that are being added are not already + ///already in recommendations or applied filters + required List filtersToAvoid, }) { - if (initialGalleryFilter != null) { - for (HierarchicalSearchFilter filter in filters) { - if (filter.isSameFilter(initialGalleryFilter)) { - continue; + for (HierarchicalSearchFilter filter in filters) { + bool avoidFilter = false; + for (HierarchicalSearchFilter filterToAvoid in filtersToAvoid) { + if (filter.isSameFilter(filterToAvoid)) { + avoidFilter = true; + break; } - _recommendedFilters.add(filter); } - } else { - //To check if such cases come up during development of hierarchical search - assert( - false, - "Initial gallery filter not provided", - ); - _recommendedFilters.addAll(filters); + if (avoidFilter) { + continue; + } + _recommendedFilters.add(filter); } + notifyListeners(); } diff --git a/mobile/lib/utils/hierarchical_search_util.dart b/mobile/lib/utils/hierarchical_search_util.dart index a3a29139d6..633acf04c8 100644 --- a/mobile/lib/utils/hierarchical_search_util.dart +++ b/mobile/lib/utils/hierarchical_search_util.dart @@ -37,5 +37,5 @@ void curateAlbumFilters( ); } - searchFilterDataProvider.addRecommendations(albumFilters); + searchFilterDataProvider.clearAndAddRecommendations(albumFilters); }