mirror of
https://github.com/Dr-Blank/Vaani.git
synced 2026-04-17 11:49:38 +00:00
feat: implement filtered book navigation and improve author sorting
- Sort authors by surname (last word in name) instead of first name - Create FilteredLibraryItemsPage to display books filtered by author/genre/series - Add navigation from authors/genres/series pages to filtered book lists - Use AuthorFilter, GenreFilter, and SeriesFilter from shelfsdk - Add libraryFiltered route with filter parameter support Users can now: - Browse authors sorted by surname - Tap on an author to see all their books - Tap on a genre to see all books in that genre - Tap on a series to see all books in that series
This commit is contained in:
parent
f60ea72659
commit
43712643a2
6 changed files with 275 additions and 20 deletions
|
|
@ -101,6 +101,12 @@ class Routes {
|
|||
parentRoute: libraryBrowser,
|
||||
);
|
||||
|
||||
static const libraryFiltered = _SimpleRoute(
|
||||
pathName: 'filtered',
|
||||
name: 'libraryFiltered',
|
||||
parentRoute: libraryBrowser,
|
||||
);
|
||||
|
||||
// you page for the user
|
||||
static const you = _SimpleRoute(
|
||||
pathName: 'you',
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import 'package:vaani/features/downloads/view/downloads_page.dart';
|
|||
import 'package:vaani/features/explore/view/explore_page.dart';
|
||||
import 'package:vaani/features/explore/view/search_result_page.dart';
|
||||
import 'package:vaani/features/item_viewer/view/library_item_page.dart';
|
||||
import 'package:vaani/features/library_browser/view/filtered_library_items_page.dart';
|
||||
import 'package:vaani/features/library_browser/view/library_authors_page.dart';
|
||||
import 'package:vaani/features/library_browser/view/library_browser_page.dart';
|
||||
import 'package:vaani/features/library_browser/view/library_genres_page.dart';
|
||||
|
|
@ -140,6 +141,31 @@ class MyAppRouter {
|
|||
name: Routes.librarySeries.name,
|
||||
pageBuilder: defaultPageBuilder(const LibrarySeriesPage()),
|
||||
),
|
||||
GoRoute(
|
||||
path: Routes.libraryFiltered.pathName,
|
||||
name: Routes.libraryFiltered.name,
|
||||
pageBuilder: (context, state) {
|
||||
final extra = state.extra as Map<String, dynamic>?;
|
||||
final filter = extra?['filter'] as Filter?;
|
||||
final title = extra?['title'] as String? ?? 'Filtered Items';
|
||||
if (filter == null) {
|
||||
return MaterialPage(
|
||||
child: Scaffold(
|
||||
appBar: AppBar(title: const Text('Error')),
|
||||
body: const Center(
|
||||
child: Text('Invalid filter'),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
return MaterialPage(
|
||||
child: FilteredLibraryItemsPage(
|
||||
filter: filter,
|
||||
title: title,
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue