order most frequent bangs first for site search
This commit is contained in:
@@ -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,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -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),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user