Skip to content

Commit e2d8661

Browse files
Eoicclaude
andcommitted
fix: Clear shelf and topic filters when search bar is cleared
clearSearch() only reset the query text, leaving selectedShelf, selectedTopic and their active filter types intact. Also, the search bar's clear button called setSearchQuery('') instead of clearSearch(). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 3a3c004 commit e2d8661

3 files changed

Lines changed: 61 additions & 5 deletions

File tree

client/lib/pages/library_page.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,11 @@ class _LibraryPageState extends State<LibraryPage> {
356356
initialQuery: libraryProvider.searchQuery,
357357
activeFilterCount: activeFilters.length,
358358
onQueryChanged: (query) {
359-
libraryProvider.setSearchQuery(query);
359+
if (query.isEmpty) {
360+
libraryProvider.clearSearch();
361+
} else {
362+
libraryProvider.setSearchQuery(query);
363+
}
360364
},
361365
onFilterTap: () => isDesktop
362366
? _showFilterDialog(context)

client/lib/providers/library_provider.dart

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -184,12 +184,17 @@ class LibraryProvider extends ChangeNotifier {
184184
}
185185
}
186186

187-
/// Clear the search query.
187+
/// Clear the search query and associated shelf/topic filters.
188188
void clearSearch() {
189-
if (_searchQuery.isNotEmpty) {
190-
_searchQuery = '';
191-
notifyListeners();
189+
_searchQuery = '';
190+
_selectedShelf = null;
191+
_selectedTopic = null;
192+
_activeFilters.remove(LibraryFilterType.shelves);
193+
_activeFilters.remove(LibraryFilterType.topics);
194+
if (_activeFilters.isEmpty) {
195+
_activeFilters.add(LibraryFilterType.all);
192196
}
197+
notifyListeners();
193198
}
194199

195200
/// Select a shelf for filtering.

client/test/providers/library_provider_test.dart

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,53 @@ void main() {
123123
provider.setSearchQuery('author:tolkien');
124124
expect(provider.hasActiveAdvancedFilters, true);
125125
});
126+
127+
test('should clear shelf and topic filters when clearing search', () {
128+
// Simulate applying filters via the filter dialog:
129+
// shelf filter sets selectedShelf + shelves filter type + query
130+
provider.selectShelf('Fiction');
131+
provider.setSearchQuery('shelf:"Fiction"');
132+
133+
// Simulate pressing the "X" clear button on the search bar
134+
provider.clearSearch();
135+
136+
expect(provider.searchQuery, '');
137+
expect(provider.selectedShelf, isNull);
138+
expect(provider.isFilterActive(LibraryFilterType.shelves), false);
139+
expect(provider.isFilterActive(LibraryFilterType.all), true);
140+
});
141+
142+
test('should clear topic filter when clearing search', () {
143+
provider.selectTopic('Science');
144+
provider.setSearchQuery('topic:"Science"');
145+
146+
provider.clearSearch();
147+
148+
expect(provider.searchQuery, '');
149+
expect(provider.selectedTopic, isNull);
150+
expect(provider.isFilterActive(LibraryFilterType.topics), false);
151+
expect(provider.isFilterActive(LibraryFilterType.all), true);
152+
});
153+
154+
test('should clear all filter state when clearing search', () {
155+
// Set up shelf/topic filters then add a quick filter chip on top
156+
provider.selectShelf('Fiction');
157+
provider.selectTopic('Science');
158+
provider.addFilter(LibraryFilterType.reading);
159+
provider.setSearchQuery(
160+
'author:tolkien shelf:"Fiction" topic:"Science"',
161+
);
162+
163+
provider.clearSearch();
164+
165+
expect(provider.searchQuery, '');
166+
expect(provider.selectedShelf, isNull);
167+
expect(provider.selectedTopic, isNull);
168+
expect(provider.isFilterActive(LibraryFilterType.shelves), false);
169+
expect(provider.isFilterActive(LibraryFilterType.topics), false);
170+
// Reading filter was set via chip, not search — should be preserved
171+
expect(provider.isFilterActive(LibraryFilterType.reading), true);
172+
});
126173
});
127174

128175
group('shelf and topic selection', () {

0 commit comments

Comments
 (0)