maintenance improvements

This commit is contained in:
Stefan Hardegger
2025-09-26 21:41:33 +02:00
parent 74cdd5dc57
commit 5325169495
10 changed files with 377 additions and 65 deletions

View File

@@ -35,30 +35,31 @@ export default function AuthorsPage() {
} else {
setSearchLoading(true);
}
const searchResults = await authorApi.getAuthors({
// Use Solr search for all queries (including empty search)
const searchResults = await authorApi.searchAuthors({
query: searchQuery || '*', // Use '*' for all authors when no search query
page: currentPage,
size: ITEMS_PER_PAGE,
sortBy: sortBy,
sortDir: sortOrder
});
if (currentPage === 0) {
// First page - replace all results
setAuthors(searchResults.content || []);
setFilteredAuthors(searchResults.content || []);
setAuthors(searchResults.results || []);
setFilteredAuthors(searchResults.results || []);
} else {
// Subsequent pages - append results
setAuthors(prev => [...prev, ...(searchResults.content || [])]);
setFilteredAuthors(prev => [...prev, ...(searchResults.content || [])]);
setAuthors(prev => [...prev, ...(searchResults.results || [])]);
setFilteredAuthors(prev => [...prev, ...(searchResults.results || [])]);
}
setTotalHits(searchResults.totalElements || 0);
setHasMore(searchResults.content.length === ITEMS_PER_PAGE && (currentPage + 1) * ITEMS_PER_PAGE < (searchResults.totalElements || 0));
setTotalHits(searchResults.totalHits || 0);
setHasMore((searchResults.results || []).length === ITEMS_PER_PAGE && (currentPage + 1) * ITEMS_PER_PAGE < (searchResults.totalHits || 0));
} catch (error) {
console.error('Failed to load authors:', error);
// Error handling for API failures
console.error('Failed to load authors:', error);
console.error('Failed to search authors:', error);
} finally {
setLoading(false);
setSearchLoading(false);
@@ -84,17 +85,7 @@ export default function AuthorsPage() {
}
};
// Client-side filtering for search query when using regular API
useEffect(() => {
if (searchQuery) {
const filtered = authors.filter(author =>
author.name.toLowerCase().includes(searchQuery.toLowerCase())
);
setFilteredAuthors(filtered);
} else {
setFilteredAuthors(authors);
}
}, [authors, searchQuery]);
// No longer needed - Solr search handles filtering directly
// Note: We no longer have individual story ratings in the author list
// Average rating would need to be calculated on backend if needed
@@ -117,9 +108,8 @@ export default function AuthorsPage() {
<div>
<h1 className="text-3xl font-bold theme-header">Authors</h1>
<p className="theme-text mt-1">
{searchQuery ? `${filteredAuthors.length} of ${authors.length}` : filteredAuthors.length} {(searchQuery ? authors.length : filteredAuthors.length) === 1 ? 'author' : 'authors'}
{searchQuery ? ` found` : ` in your library`}
{!searchQuery && hasMore && ` (showing first ${filteredAuthors.length})`}
{searchQuery ? `${totalHits} authors found` : `${totalHits} authors in your library`}
{hasMore && ` (showing first ${filteredAuthors.length})`}
</p>
</div>
@@ -226,7 +216,7 @@ export default function AuthorsPage() {
className="px-8 py-3"
loading={loading}
>
{loading ? 'Loading...' : `Load More Authors (${totalHits - authors.length} remaining)`}
{loading ? 'Loading...' : `Load More Authors (${totalHits - filteredAuthors.length} remaining)`}
</Button>
</div>
)}