mirror of
https://github.com/Xevion/paperless-mobile.git
synced 2025-12-09 10:08:00 -06:00
Fixed wrong parsing logic for document filters/saved views
This commit is contained in:
@@ -43,7 +43,7 @@ class DocumentFilter with EquatableMixin {
|
||||
this.correspondent = const CorrespondentQuery.unset(),
|
||||
this.storagePath = const StoragePathQuery.unset(),
|
||||
this.asn = const AsnQuery.unset(),
|
||||
this.tags = const IdsTagsQuery.unset(),
|
||||
this.tags = const IdsTagsQuery(),
|
||||
this.sortField = SortField.created,
|
||||
this.sortOrder = SortOrder.descending,
|
||||
this.page = 1,
|
||||
|
||||
@@ -14,7 +14,7 @@ class FilterRule with EquatableMixin {
|
||||
static const int correspondentRule = 3;
|
||||
static const int documentTypeRule = 4;
|
||||
static const int includeTagsRule = 6;
|
||||
static const int hasAnyTag = 7; // Corresponds to Not assigned
|
||||
static const int hasAnyTag = 7; // true = any tag, false = not assigned
|
||||
static const int createdBeforeRule = 8;
|
||||
static const int createdAfterRule = 9;
|
||||
static const int addedBeforeRule = 13;
|
||||
@@ -85,32 +85,36 @@ class FilterRule with EquatableMixin {
|
||||
case includeTagsRule:
|
||||
assert(filter.tags is IdsTagsQuery);
|
||||
return filter.copyWith(
|
||||
tags: (filter.tags as IdsTagsQuery).withIdQueriesAdded([
|
||||
IncludeTagIdQuery(int.parse(value!)),
|
||||
]),
|
||||
tags: (filter.tags as IdsTagsQuery)
|
||||
.withIdQueriesAdded([IncludeTagIdQuery(int.parse(value!))]),
|
||||
);
|
||||
case excludeTagsRule:
|
||||
assert(filter.tags is IdsTagsQuery);
|
||||
return filter.copyWith(
|
||||
tags: (filter.tags as IdsTagsQuery).withIdQueriesAdded([
|
||||
ExcludeTagIdQuery(int.parse(value!)),
|
||||
]),
|
||||
tags: (filter.tags as IdsTagsQuery)
|
||||
.withIdQueriesAdded([ExcludeTagIdQuery(int.parse(value!))]),
|
||||
);
|
||||
case createdBeforeRule:
|
||||
return filter.copyWith(
|
||||
createdDateBefore: value == null ? null : DateTime.parse(value!));
|
||||
createdDateBefore: value == null ? null : DateTime.parse(value!),
|
||||
);
|
||||
case createdAfterRule:
|
||||
return filter.copyWith(
|
||||
createdDateAfter: value == null ? null : DateTime.parse(value!));
|
||||
createdDateAfter: value == null ? null : DateTime.parse(value!),
|
||||
);
|
||||
case addedBeforeRule:
|
||||
return filter.copyWith(
|
||||
addedDateBefore: value == null ? null : DateTime.parse(value!));
|
||||
addedDateBefore: value == null ? null : DateTime.parse(value!),
|
||||
);
|
||||
case addedAfterRule:
|
||||
return filter.copyWith(
|
||||
addedDateAfter: value == null ? null : DateTime.parse(value!));
|
||||
addedDateAfter: value == null ? null : DateTime.parse(value!),
|
||||
);
|
||||
case titleAndContentRule:
|
||||
return filter.copyWith(
|
||||
queryText: value, queryType: QueryType.titleAndContent);
|
||||
queryText: value,
|
||||
queryType: QueryType.titleAndContent,
|
||||
);
|
||||
case extendedRule:
|
||||
return filter.copyWith(queryText: value, queryType: QueryType.extended);
|
||||
//TODO: Add currently unused rules
|
||||
@@ -146,10 +150,10 @@ class FilterRule with EquatableMixin {
|
||||
.add(FilterRule(storagePathRule, filter.storagePath.id!.toString()));
|
||||
}
|
||||
if (filter.tags is OnlyNotAssignedTagsQuery) {
|
||||
filterRules.add(FilterRule(hasAnyTag, "false"));
|
||||
filterRules.add(FilterRule(hasAnyTag, false.toString()));
|
||||
}
|
||||
if (filter.tags is AnyAssignedTagsQuery) {
|
||||
filterRules.add(FilterRule(hasAnyTag, "true"));
|
||||
filterRules.add(FilterRule(hasAnyTag, true.toString()));
|
||||
}
|
||||
if (filter.tags is IdsTagsQuery) {
|
||||
filterRules.addAll((filter.tags as IdsTagsQuery)
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:paperless_mobile/extensions/dart_extensions.dart';
|
||||
|
||||
abstract class TagsQuery with EquatableMixin {
|
||||
const TagsQuery();
|
||||
@@ -33,8 +32,6 @@ class IdsTagsQuery extends TagsQuery {
|
||||
|
||||
const IdsTagsQuery([this._idQueries = const []]);
|
||||
|
||||
const IdsTagsQuery.unset() : _idQueries = const [];
|
||||
|
||||
IdsTagsQuery.included(Iterable<int> ids)
|
||||
: _idQueries = ids.map((id) => IncludeTagIdQuery(id));
|
||||
|
||||
@@ -44,13 +41,14 @@ class IdsTagsQuery extends TagsQuery {
|
||||
: _idQueries = ids.map((id) => ExcludeTagIdQuery(id));
|
||||
|
||||
IdsTagsQuery withIdQueriesAdded(Iterable<TagIdQuery> idQueries) {
|
||||
final intersection = _idQueries
|
||||
final intersection = idQueries
|
||||
.map((idQ) => idQ.id)
|
||||
.toSet()
|
||||
.intersection(_idQueries.map((idQ) => idQ.id).toSet());
|
||||
return IdsTagsQuery(
|
||||
final res = IdsTagsQuery(
|
||||
[...withIdsRemoved(intersection).queries, ...idQueries],
|
||||
);
|
||||
return res;
|
||||
}
|
||||
|
||||
IdsTagsQuery withIdsRemoved(Iterable<int> ids) {
|
||||
|
||||
@@ -52,9 +52,9 @@ class SavedView with EquatableMixin {
|
||||
.where((order) => order.queryString == json['sort_field'])
|
||||
.first,
|
||||
sortReverse: json['sort_reverse'],
|
||||
filterRules: json['filter_rules']
|
||||
filterRules: (json['filter_rules'] as List)
|
||||
.cast<JSON>()
|
||||
.map<FilterRule>(FilterRule.fromJson)
|
||||
.map(FilterRule.fromJson)
|
||||
.toList(),
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user