order most frequent bangs first for site search

This commit is contained in:
Fabian Freund
2024-06-16 20:55:58 +02:00
parent f50391d1da
commit ed8c176286
7 changed files with 41 additions and 10 deletions
@@ -33,6 +33,7 @@ class BangDao extends DatabaseAccessor<BangDatabase> with _$BangDaoMixin {
String? domain,
String? category,
String? subCategory,
bool? orderMostFrequentFirst,
}) {
final selectable = select(db.bangDataView);
if (groups != null) {
@@ -49,7 +50,10 @@ class BangDao extends DatabaseAccessor<BangDatabase> with _$BangDaoMixin {
}
}
selectable.orderBy([(t) => OrderingTerm.asc(t.websiteName)]);
selectable.orderBy([
if (orderMostFrequentFirst == true) (t) => OrderingTerm.desc(t.frequency),
(t) => OrderingTerm.asc(t.websiteName),
]);
return selectable;
}
@@ -31,6 +31,7 @@ Stream<List<BangData>> bangDataList(
Iterable<BangGroup>? groups,
String? domain,
({String category, String? subCategory})? categoryFilter,
bool? orderMostFrequentFirst,
})? filter,
}) {
final repository = ref.watch(bangDataRepositoryProvider.notifier);
@@ -38,6 +39,7 @@ Stream<List<BangData>> bangDataList(
groups: filter?.groups,
domain: filter?.domain,
categoryFilter: filter?.categoryFilter,
orderMostFrequentFirst: filter?.orderMostFrequentFirst,
);
}
+11 -6
View File
@@ -187,7 +187,7 @@ final bangCategoriesProvider =
typedef BangCategoriesRef
= AutoDisposeStreamProviderRef<Map<String, List<String>>>;
String _$bangDataListHash() => r'64c3a3c55c481bf97f291f3befd8f958007daac6';
String _$bangDataListHash() => r'c4fbc1676be933b29ec88f503110c119fe8b6d86';
/// See also [bangDataList].
@ProviderFor(bangDataList)
@@ -203,7 +203,8 @@ class BangDataListFamily extends Family<AsyncValue<List<BangData>>> {
({
({String category, String? subCategory})? categoryFilter,
String? domain,
Iterable<BangGroup>? groups
Iterable<BangGroup>? groups,
bool? orderMostFrequentFirst
})? filter,
}) {
return BangDataListProvider(
@@ -242,7 +243,8 @@ class BangDataListProvider extends AutoDisposeStreamProvider<List<BangData>> {
({
({String category, String? subCategory})? categoryFilter,
String? domain,
Iterable<BangGroup>? groups
Iterable<BangGroup>? groups,
bool? orderMostFrequentFirst
})? filter,
}) : this._internal(
(ref) => bangDataList(
@@ -274,7 +276,8 @@ class BangDataListProvider extends AutoDisposeStreamProvider<List<BangData>> {
final ({
({String category, String? subCategory})? categoryFilter,
String? domain,
Iterable<BangGroup>? groups
Iterable<BangGroup>? groups,
bool? orderMostFrequentFirst
})? filter;
@override
@@ -319,7 +322,8 @@ mixin BangDataListRef on AutoDisposeStreamProviderRef<List<BangData>> {
({
({String category, String? subCategory})? categoryFilter,
String? domain,
Iterable<BangGroup>? groups
Iterable<BangGroup>? groups,
bool? orderMostFrequentFirst
})? get filter;
}
@@ -332,7 +336,8 @@ class _BangDataListProviderElement
({
({String category, String? subCategory})? categoryFilter,
String? domain,
Iterable<BangGroup>? groups
Iterable<BangGroup>? groups,
bool? orderMostFrequentFirst
})? get filter => (origin as BangDataListProvider).filter;
}
@@ -47,6 +47,7 @@ class BangDataRepository extends _$BangDataRepository {
Iterable<BangGroup>? groups,
String? domain,
({String category, String? subCategory})? categoryFilter,
bool? orderMostFrequentFirst,
}) {
return _db.bangDao
.getBangDataList(
@@ -54,6 +55,7 @@ class BangDataRepository extends _$BangDataRepository {
domain: domain,
category: categoryFilter?.category,
subCategory: categoryFilter?.subCategory,
orderMostFrequentFirst: orderMostFrequentFirst,
)
.watch();
}
@@ -7,7 +7,7 @@ part of 'data.dart';
// **************************************************************************
String _$bangDataRepositoryHash() =>
r'f23e81e45a69d5b5b9158b6601c3724d1b316715';
r'369790e5e6b9c70daa04a898c40f0bed5e008400';
/// See also [BangDataRepository].
@ProviderFor(BangDataRepository)
@@ -24,7 +24,8 @@ class BangListScreen extends HookConsumerWidget {
? (category: category!, subCategory: subCategory)
: null,
domain: null,
groups: null
groups: null,
orderMostFrequentFirst: null,
),
),
);
@@ -6,6 +6,7 @@ import 'package:bang_navigator/features/search_browser/domain/providers.dart';
import 'package:bang_navigator/features/web_view/presentation/controllers/switch_new_tab.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_material_design_icons/flutter_material_design_icons.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
class SiteSearch extends HookConsumerWidget {
@@ -19,7 +20,12 @@ class SiteSearch extends HookConsumerWidget {
final availableBangsAsync = ref.watch(
bangDataListProvider(
filter: (domain: domain, groups: null, categoryFilter: null),
filter: (
domain: domain,
groups: null,
categoryFilter: null,
orderMostFrequentFirst: true,
),
),
);
final availableBangCount = availableBangsAsync.valueOrNull?.length ?? 0;
@@ -92,6 +98,17 @@ class SiteSearch extends HookConsumerWidget {
await submitSearch();
},
),
const SizedBox(
height: 12,
),
SizedBox(
width: double.infinity,
child: FilledButton.icon(
onPressed: submitSearch,
label: const Text('Search on Site'),
icon: const Icon(MdiIcons.invoiceTextSend),
),
),
],
),
);