mirror of
https://gitlab.com/mysocialportal/relatica
synced 2024-10-18 11:13:31 +00:00
Add ability to toggle filters on/off
This commit is contained in:
parent
1474bbc69a
commit
55052b0852
4 changed files with 33 additions and 1 deletions
|
@ -38,6 +38,7 @@ class TimelineEntryFilter {
|
|||
final String id;
|
||||
final TimelineEntryFilterAction action;
|
||||
final String name;
|
||||
final bool enabled;
|
||||
final List<StringFilter> authorFilters;
|
||||
final List<StringFilter> domainFilters;
|
||||
final List<StringFilter> keywordFilters;
|
||||
|
@ -47,16 +48,39 @@ class TimelineEntryFilter {
|
|||
required this.id,
|
||||
required this.action,
|
||||
required this.name,
|
||||
required this.enabled,
|
||||
required this.authorFilters,
|
||||
required this.domainFilters,
|
||||
required this.keywordFilters,
|
||||
required this.hashtagFilters,
|
||||
});
|
||||
|
||||
TimelineEntryFilter copy({
|
||||
String? id,
|
||||
TimelineEntryFilterAction? action,
|
||||
String? name,
|
||||
bool? enabled,
|
||||
List<StringFilter>? authorFilters,
|
||||
List<StringFilter>? domainFilters,
|
||||
List<StringFilter>? keywordFilters,
|
||||
List<StringFilter>? hashtagFilters,
|
||||
}) =>
|
||||
TimelineEntryFilter(
|
||||
id: id ?? this.id,
|
||||
action: action ?? this.action,
|
||||
name: name ?? this.name,
|
||||
enabled: enabled ?? this.enabled,
|
||||
authorFilters: authorFilters ?? this.authorFilters,
|
||||
domainFilters: domainFilters ?? this.domainFilters,
|
||||
keywordFilters: keywordFilters ?? this.keywordFilters,
|
||||
hashtagFilters: hashtagFilters ?? this.hashtagFilters,
|
||||
);
|
||||
|
||||
factory TimelineEntryFilter.create({
|
||||
String? id,
|
||||
required TimelineEntryFilterAction action,
|
||||
required String name,
|
||||
required bool enabled,
|
||||
List<Connection> authors = const [],
|
||||
List<String> domains = const [],
|
||||
List<String> keywords = const [],
|
||||
|
@ -66,6 +90,7 @@ class TimelineEntryFilter {
|
|||
id: id ?? const Uuid().v4(),
|
||||
action: action,
|
||||
name: name,
|
||||
enabled: enabled,
|
||||
authorFilters: authors
|
||||
.map((a) =>
|
||||
StringFilter(filterString: a.id, type: ComparisonType.equals))
|
||||
|
@ -106,6 +131,7 @@ class TimelineEntryFilter {
|
|||
'id': id,
|
||||
'action': action.name,
|
||||
'name': name,
|
||||
'enabled': enabled,
|
||||
'authorFilters': authorFilters.map((f) => f.toJson()).toList(),
|
||||
'domainFilters': domainFilters.map((f) => f.toJson()).toList(),
|
||||
'keywordFilters': keywordFilters.map((f) => f.toJson()).toList(),
|
||||
|
@ -117,6 +143,7 @@ class TimelineEntryFilter {
|
|||
id: json['id'],
|
||||
action: TimelineEntryFilterAction.parse(json['action']),
|
||||
name: json['name'],
|
||||
enabled: json['enabled'] ?? true,
|
||||
authorFilters: (json['authorFilters'] as List<dynamic>)
|
||||
.map((json) => StringFilter.fromJson(json))
|
||||
.toList(),
|
||||
|
|
|
@ -335,6 +335,7 @@ class _FilterEditorScreenState extends State<FilterEditorScreen> {
|
|||
id: widget.id.isNotEmpty ? widget.id : null,
|
||||
action: action,
|
||||
name: nameController.text,
|
||||
enabled: true,
|
||||
authors: filteredAuthors,
|
||||
hashtags: filteredHashtags,
|
||||
keywords: filteredKeywords,
|
||||
|
|
|
@ -52,6 +52,10 @@ class FiltersScreen extends StatelessWidget {
|
|||
Widget buildFilterSummary(BuildContext context, TimelineEntryFilter filter,
|
||||
TimelineEntryFilterService service) {
|
||||
return ListTile(
|
||||
leading: Checkbox(
|
||||
onChanged: (value) => service.upsertFilter(filter.copy(enabled: value)),
|
||||
value: filter.enabled,
|
||||
),
|
||||
title: Text('${filter.action.toVerb()} Filter: ${filter.name}'),
|
||||
subtitle: Text(
|
||||
filter.toSummaryText(),
|
||||
|
|
|
@ -45,7 +45,7 @@ FilterResult runFilters(
|
|||
var isFiltered = false;
|
||||
var action = TimelineEntryFilterAction.warn;
|
||||
var trippingFilterName = '';
|
||||
for (final filter in filters) {
|
||||
for (final filter in filters.where((f) => f.enabled)) {
|
||||
if (filter.isFiltered(entry)) {
|
||||
isFiltered = true;
|
||||
if (trippingFilterName.isEmpty) {
|
||||
|
|
Loading…
Reference in a new issue