feat: Re-implement set filters count

This commit is contained in:
Anton Stubenbord
2023-06-17 16:42:17 +02:00
parent 6017cda477
commit 28e9463b96
13 changed files with 320 additions and 256 deletions

View File

@@ -22,7 +22,6 @@ import 'package:paperless_mobile/features/saved_view/view/saved_view_list.dart';
import 'package:paperless_mobile/features/tasks/cubit/task_status_cubit.dart'; import 'package:paperless_mobile/features/tasks/cubit/task_status_cubit.dart';
import 'package:paperless_mobile/generated/l10n/app_localizations.dart'; import 'package:paperless_mobile/generated/l10n/app_localizations.dart';
import 'package:paperless_mobile/helpers/message_helpers.dart'; import 'package:paperless_mobile/helpers/message_helpers.dart';
import 'package:sliver_tools/sliver_tools.dart';
class DocumentFilterIntent { class DocumentFilterIntent {
final DocumentFilter? filter; final DocumentFilter? filter;
@@ -120,30 +119,60 @@ class _DocumentsPageState extends State<DocumentsPage>
builder: (context, state) { builder: (context, state) {
final appliedFiltersCount = state.filter.appliedFiltersCount; final appliedFiltersCount = state.filter.appliedFiltersCount;
final show = state.selection.isEmpty; final show = state.selection.isEmpty;
final canReset = state.filter.appliedFiltersCount > 0;
return AnimatedScale( return AnimatedScale(
scale: show ? 1 : 0, scale: show ? 1 : 0,
duration: const Duration(milliseconds: 200), duration: const Duration(milliseconds: 200),
curve: Curves.easeIn, curve: Curves.easeIn,
child: b.Badge( child: Column(
position: b.BadgePosition.topEnd(top: -12, end: -6), mainAxisAlignment: MainAxisAlignment.end,
showBadge: appliedFiltersCount > 0, children: [
badgeContent: Text( if (canReset)
'$appliedFiltersCount', Padding(
style: const TextStyle( padding: const EdgeInsets.all(8.0),
color: Colors.white, child: FloatingActionButton.small(
), key: UniqueKey(),
), backgroundColor: Theme.of(context)
animationType: b.BadgeAnimationType.fade, .colorScheme
badgeColor: Colors.red, .onPrimaryContainer,
child: _currentTab == 0 onPressed: () {
? FloatingActionButton( context.read<DocumentsCubit>().updateFilter();
child: const Icon(Icons.filter_alt_outlined), },
onPressed: _openDocumentFilter, child: Icon(
) Icons.refresh,
: FloatingActionButton( color: Theme.of(context)
child: const Icon(Icons.add), .colorScheme
onPressed: () => _onCreateSavedView(state.filter), .primaryContainer,
),
), ),
),
b.Badge(
position: b.BadgePosition.topEnd(top: -12, end: -6),
showBadge: appliedFiltersCount > 0,
badgeContent: Text(
'$appliedFiltersCount',
style: const TextStyle(
color: Colors.white,
),
),
animationType: b.BadgeAnimationType.fade,
badgeColor: Colors.red,
child: AnimatedSwitcher(
duration: const Duration(milliseconds: 250),
child: (_currentTab == 0)
? FloatingActionButton(
child:
const Icon(Icons.filter_alt_outlined),
onPressed: _openDocumentFilter,
)
: FloatingActionButton(
child: const Icon(Icons.add),
onPressed: () =>
_onCreateSavedView(state.filter),
),
),
),
],
), ),
); );
}, },

View File

@@ -1,5 +1,6 @@
import 'package:hive/hive.dart'; import 'package:hive/hive.dart';
import 'package:paperless_api/paperless_api.dart'; import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_api/src/models/query_parameters/date_range_queries/date_range_unit.dart';
class PaperlessApiHiveTypeIds { class PaperlessApiHiveTypeIds {
PaperlessApiHiveTypeIds._(); PaperlessApiHiveTypeIds._();

View File

@@ -3,6 +3,8 @@ import 'package:equatable/equatable.dart';
import 'package:hive/hive.dart'; import 'package:hive/hive.dart';
import 'package:json_annotation/json_annotation.dart'; import 'package:json_annotation/json_annotation.dart';
import 'package:paperless_api/paperless_api.dart'; import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_api/src/models/query_parameters/date_range_queries/date_range_query.dart';
import 'package:paperless_api/src/models/query_parameters/date_range_queries/date_range_query_field.dart';
part 'document_filter.g.dart'; part 'document_filter.g.dart';
@@ -187,16 +189,45 @@ class DocumentFilter extends Equatable {
} }
int get appliedFiltersCount => [ int get appliedFiltersCount => [
documentType != initial.documentType, documentType.maybeWhen(
correspondent != initial.correspondent, unset: () => 0,
storagePath != initial.storagePath, orElse: () => 1,
tags != initial.tags, ),
added != initial.added, correspondent.maybeWhen(
created != initial.created, unset: () => 0,
modified != initial.modified, orElse: () => 1,
asnQuery != initial.asnQuery, ),
((query.queryText ?? '') != (initial.query.queryText ?? '')), storagePath.maybeWhen(
].fold(0, (previousValue, element) => previousValue += element ? 1 : 0); unset: () => 0,
orElse: () => 1,
),
tags.maybeWhen(
ids: (include, exclude) => include.length + exclude.length,
anyAssigned: (tagIds) => tagIds.length,
notAssigned: () => 1,
orElse: () => 0,
),
switch (added) {
RelativeDateRangeQuery() => 1,
AbsoluteDateRangeQuery() => 1,
UnsetDateRangeQuery() => 0,
},
switch (created) {
RelativeDateRangeQuery() => 1,
AbsoluteDateRangeQuery() => 1,
UnsetDateRangeQuery() => 0,
},
switch (modified) {
RelativeDateRangeQuery() => 1,
AbsoluteDateRangeQuery() => 1,
UnsetDateRangeQuery() => 0,
},
asnQuery.maybeWhen(
unset: () => 0,
orElse: () => 1,
),
(query.queryText?.isNotEmpty ?? false) ? 1 : 0,
].fold(0, (previousValue, element) => previousValue + element);
@override @override
List<Object?> get props => [ List<Object?> get props => [

View File

@@ -5,6 +5,9 @@ import 'package:json_annotation/json_annotation.dart';
import 'package:paperless_api/paperless_api.dart'; import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_api/src/constants.dart'; import 'package:paperless_api/src/constants.dart';
import 'package:paperless_api/src/converters/local_date_time_json_converter.dart'; import 'package:paperless_api/src/converters/local_date_time_json_converter.dart';
import 'package:paperless_api/src/models/query_parameters/date_range_queries/date_range_query.dart';
import 'package:paperless_api/src/models/query_parameters/date_range_queries/date_range_query_field.dart';
import 'package:paperless_api/src/models/query_parameters/date_range_queries/date_range_unit.dart';
part 'filter_rule_model.g.dart'; part 'filter_rule_model.g.dart';
@@ -73,7 +76,9 @@ class FilterRule with EquatableMixin {
); );
case hasAnyTag: case hasAnyTag:
return filter.copyWith( return filter.copyWith(
tags: value == "true" ? const TagsQuery.anyAssigned() : const TagsQuery.notAssigned(), tags: value == "true"
? const TagsQuery.anyAssigned()
: const TagsQuery.notAssigned(),
); );
case includeTagsRule: case includeTagsRule:
assert(filter.tags is IdsTagsQuery); assert(filter.tags is IdsTagsQuery);
@@ -105,7 +110,8 @@ class FilterRule with EquatableMixin {
); );
} else { } else {
return filter.copyWith( return filter.copyWith(
created: AbsoluteDateRangeQuery(before: _dateTimeConverter.fromJson(value!)), created: AbsoluteDateRangeQuery(
before: _dateTimeConverter.fromJson(value!)),
); );
} }
case createdAfterRule: case createdAfterRule:
@@ -116,7 +122,8 @@ class FilterRule with EquatableMixin {
); );
} else { } else {
return filter.copyWith( return filter.copyWith(
created: AbsoluteDateRangeQuery(after: _dateTimeConverter.fromJson(value!)), created: AbsoluteDateRangeQuery(
after: _dateTimeConverter.fromJson(value!)),
); );
} }
case addedBeforeRule: case addedBeforeRule:
@@ -127,7 +134,8 @@ class FilterRule with EquatableMixin {
); );
} else { } else {
return filter.copyWith( return filter.copyWith(
added: AbsoluteDateRangeQuery(before: _dateTimeConverter.fromJson(value!)), added: AbsoluteDateRangeQuery(
before: _dateTimeConverter.fromJson(value!)),
); );
} }
case addedAfterRule: case addedAfterRule:
@@ -138,7 +146,8 @@ class FilterRule with EquatableMixin {
); );
} else { } else {
return filter.copyWith( return filter.copyWith(
added: AbsoluteDateRangeQuery(after: _dateTimeConverter.fromJson(value!)), added: AbsoluteDateRangeQuery(
after: _dateTimeConverter.fromJson(value!)),
); );
} }
case modifiedBeforeRule: case modifiedBeforeRule:
@@ -149,7 +158,8 @@ class FilterRule with EquatableMixin {
); );
} else { } else {
return filter.copyWith( return filter.copyWith(
modified: AbsoluteDateRangeQuery(before: _dateTimeConverter.fromJson(value!)), modified: AbsoluteDateRangeQuery(
before: _dateTimeConverter.fromJson(value!)),
); );
} }
case modifiedAfterRule: case modifiedAfterRule:
@@ -160,7 +170,8 @@ class FilterRule with EquatableMixin {
); );
} else { } else {
return filter.copyWith( return filter.copyWith(
added: AbsoluteDateRangeQuery(after: _dateTimeConverter.fromJson(value!)), added: AbsoluteDateRangeQuery(
after: _dateTimeConverter.fromJson(value!)),
); );
} }
case titleAndContentRule: case titleAndContentRule:
@@ -273,7 +284,8 @@ class FilterRule with EquatableMixin {
filterRules.add(FilterRule(titleRule, filter.query.queryText!)); filterRules.add(FilterRule(titleRule, filter.query.queryText!));
break; break;
case QueryType.titleAndContent: case QueryType.titleAndContent:
filterRules.add(FilterRule(titleAndContentRule, filter.query.queryText!)); filterRules
.add(FilterRule(titleAndContentRule, filter.query.queryText!));
break; break;
case QueryType.extended: case QueryType.extended:
filterRules.add(FilterRule(extendedRule, filter.query.queryText!)); filterRules.add(FilterRule(extendedRule, filter.query.queryText!));
@@ -299,8 +311,8 @@ class FilterRule with EquatableMixin {
} }
} else if (created is RelativeDateRangeQuery) { } else if (created is RelativeDateRangeQuery) {
filterRules.add( filterRules.add(
FilterRule( FilterRule(extendedRule,
extendedRule, created.toQueryParameter(DateRangeQueryField.created).values.first), created.toQueryParameter(DateRangeQueryField.created).values.first),
); );
} }
@@ -319,7 +331,8 @@ class FilterRule with EquatableMixin {
} }
} else if (added is RelativeDateRangeQuery) { } else if (added is RelativeDateRangeQuery) {
filterRules.add( filterRules.add(
FilterRule(extendedRule, added.toQueryParameter(DateRangeQueryField.added).values.first), FilterRule(extendedRule,
added.toQueryParameter(DateRangeQueryField.added).values.first),
); );
} }
@@ -333,18 +346,25 @@ class FilterRule with EquatableMixin {
} }
if (modified.before != null) { if (modified.before != null) {
filterRules.add( filterRules.add(
FilterRule(modifiedBeforeRule, apiDateFormat.format(modified.before!)), FilterRule(
modifiedBeforeRule, apiDateFormat.format(modified.before!)),
); );
} }
} else if (modified is RelativeDateRangeQuery) { } else if (modified is RelativeDateRangeQuery) {
filterRules.add( filterRules.add(
FilterRule( FilterRule(
extendedRule, modified.toQueryParameter(DateRangeQueryField.modified).values.first), extendedRule,
modified
.toQueryParameter(DateRangeQueryField.modified)
.values
.first),
); );
} }
//Join values of all extended filter rules if exist //Join values of all extended filter rules if exist
if (filterRules.where((e) => e.ruleType == FilterRule.extendedRule).isNotEmpty) { if (filterRules
.where((e) => e.ruleType == FilterRule.extendedRule)
.isNotEmpty) {
final mergedExtendedRule = filterRules final mergedExtendedRule = filterRules
.where((r) => r.ruleType == FilterRule.extendedRule) .where((r) => r.ruleType == FilterRule.extendedRule)
.map((e) => e.value) .map((e) => e.value)
@@ -368,5 +388,6 @@ class FilterRule with EquatableMixin {
Map<String, dynamic> toJson() => _$FilterRuleToJson(this); Map<String, dynamic> toJson() => _$FilterRuleToJson(this);
factory FilterRule.fromJson(Map<String, dynamic> json) => _$FilterRuleFromJson(json); factory FilterRule.fromJson(Map<String, dynamic> json) =>
_$FilterRuleFromJson(json);
} }

View File

@@ -1,32 +1,33 @@
export 'bulk_edit_model.dart';
export 'document_filter.dart';
export 'document_meta_data_model.dart';
export 'document_model.dart';
export 'field_suggestions.dart';
export 'filter_rule_model.dart';
export 'group_model.dart';
export 'labels/correspondent_model.dart'; export 'labels/correspondent_model.dart';
export 'labels/document_type_model.dart'; export 'labels/document_type_model.dart';
export 'labels/label_model.dart'; export 'labels/label_model.dart';
export 'labels/matching_algorithm.dart'; export 'labels/matching_algorithm.dart';
export 'labels/storage_path_model.dart'; export 'labels/storage_path_model.dart';
export 'labels/tag_model.dart'; export 'labels/tag_model.dart';
export 'query_parameters/id_query_parameter.dart';
export 'query_parameters/query_type.dart';
export 'query_parameters/sort_field.dart';
export 'query_parameters/sort_order.dart';
export 'query_parameters/date_range_queries/date_range_queries.dart';
export 'query_parameters/tags_query/tags_query.dart';
export 'query_parameters/text_query.dart';
export 'bulk_edit_model.dart';
export 'document_filter.dart';
export 'document_meta_data_model.dart';
export 'document_model.dart';
export 'filter_rule_model.dart';
export 'paged_search_result.dart'; export 'paged_search_result.dart';
export 'paperless_server_exception.dart'; export 'paperless_server_exception.dart';
export 'paperless_server_information_model.dart'; export 'paperless_server_information_model.dart';
export 'paperless_server_statistics_model.dart'; export 'paperless_server_statistics_model.dart';
export 'permissions/inherited_permissions.dart';
export 'permissions/permissions.dart';
export 'permissions/user_permission_extension.dart';
export 'permissions/user_permissions.dart';
export 'query_parameters/date_range_queries/date_range_query.dart';
export 'query_parameters/date_range_queries/date_range_unit.dart';
export 'query_parameters/id_query_parameter.dart';
export 'query_parameters/query_type.dart';
export 'query_parameters/sort_field.dart';
export 'query_parameters/sort_order.dart';
export 'query_parameters/tags_query/tags_query.dart';
export 'query_parameters/text_query.dart';
export 'saved_view_model.dart'; export 'saved_view_model.dart';
export 'task/task.dart'; export 'task/task.dart';
export 'task/task_status.dart'; export 'task/task_status.dart';
export 'field_suggestions.dart';
export 'permissions/permissions.dart';
export 'permissions/user_permissions.dart';
export 'permissions/inherited_permissions.dart';
export 'group_model.dart';
export 'user_model.dart'; export 'user_model.dart';
export 'permissions/user_permission_extension.dart';

View File

@@ -1,72 +0,0 @@
import 'package:hive/hive.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:paperless_api/config/hive/hive_type_ids.dart';
import 'package:paperless_api/src/constants.dart';
import 'package:paperless_api/src/converters/local_date_time_json_converter.dart';
import 'date_range_query.dart';
import 'date_range_query_field.dart';
part 'absolute_date_range_query.g.dart';
@JsonSerializable()
@HiveType(typeId: PaperlessApiHiveTypeIds.absoluteDateRangeQuery)
class AbsoluteDateRangeQuery extends DateRangeQuery {
@LocalDateTimeJsonConverter()
@HiveField(0)
final DateTime? after;
@LocalDateTimeJsonConverter()
@HiveField(1)
final DateTime? before;
const AbsoluteDateRangeQuery({this.after, this.before});
@override
List<Object?> get props => [after, before];
@override
Map<String, String> toQueryParameter(DateRangeQueryField field) {
final Map<String, String> params = {};
// Add/subtract one day in the following because paperless uses gt/lt not gte/lte
if (after != null) {
params.putIfAbsent('${field.name}__date__gt',
() => apiDateFormat.format(after!.subtract(const Duration(days: 1))));
}
if (before != null) {
params.putIfAbsent('${field.name}__date__lt',
() => apiDateFormat.format(before!.add(const Duration(days: 1))));
}
return params;
}
AbsoluteDateRangeQuery copyWith({
DateTime? before,
DateTime? after,
}) {
return AbsoluteDateRangeQuery(
before: before ?? this.before,
after: after ?? this.after,
);
}
factory AbsoluteDateRangeQuery.fromJson(json) => _$AbsoluteDateRangeQueryFromJson(json);
@override
Map<String, dynamic> toJson() => _$AbsoluteDateRangeQueryToJson(this);
@override
bool matches(DateTime dt) {
//TODO: Check if after and before are inclusive or exclusive definitions.
bool matches = true;
if (after != null) {
matches &= dt.isAfter(after!) || dt == after;
}
if (before != null) {
matches &= dt.isBefore(before!) || dt == before;
}
return matches;
}
}

View File

@@ -1,6 +0,0 @@
export 'date_range_query.dart';
export 'unset_date_range_query.dart';
export 'absolute_date_range_query.dart';
export 'relative_date_range_query.dart';
export 'date_range_unit.dart';
export 'date_range_query_field.dart';

View File

@@ -1,8 +1,17 @@
import 'package:equatable/equatable.dart'; import 'package:equatable/equatable.dart';
import 'package:hive/hive.dart';
import 'package:jiffy/jiffy.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:paperless_api/config/hive/hive_type_ids.dart';
import 'package:paperless_api/src/constants.dart';
import 'package:paperless_api/src/converters/local_date_time_json_converter.dart';
import 'date_range_query_field.dart'; import 'date_range_query_field.dart';
import 'date_range_unit.dart';
abstract class DateRangeQuery extends Equatable { part 'date_range_query.g.dart';
sealed class DateRangeQuery extends Equatable {
const DateRangeQuery(); const DateRangeQuery();
Map<String, String> toQueryParameter(DateRangeQueryField field); Map<String, String> toQueryParameter(DateRangeQueryField field);
@@ -11,3 +20,166 @@ abstract class DateRangeQuery extends Equatable {
bool matches(DateTime dt); bool matches(DateTime dt);
} }
class UnsetDateRangeQuery extends DateRangeQuery {
const UnsetDateRangeQuery();
@override
List<Object?> get props => [];
@override
Map<String, String> toQueryParameter(DateRangeQueryField field) => const {};
@override
Map<String, dynamic> toJson() => const {};
@override
bool matches(DateTime dt) => true;
}
@JsonSerializable()
@HiveType(typeId: PaperlessApiHiveTypeIds.relativeDateRangeQuery)
class RelativeDateRangeQuery extends DateRangeQuery {
@HiveField(0)
final int offset;
@HiveField(1)
final DateRangeUnit unit;
const RelativeDateRangeQuery([
this.offset = 1,
this.unit = DateRangeUnit.day,
]);
@override
List<Object?> get props => [offset, unit];
@override
Map<String, String> toQueryParameter(DateRangeQueryField field) {
return {
'query': '${field.name}:[-$offset ${unit.name} to now]',
};
}
RelativeDateRangeQuery copyWith({
int? offset,
DateRangeUnit? unit,
}) {
return RelativeDateRangeQuery(
offset ?? this.offset,
unit ?? this.unit,
);
}
/// Returns the datetime when subtracting the offset given the unit from now.
DateTime get dateTime {
switch (unit) {
case DateRangeUnit.day:
return Jiffy().subtract(days: offset).dateTime;
case DateRangeUnit.week:
return Jiffy().subtract(weeks: offset).dateTime;
case DateRangeUnit.month:
return Jiffy().subtract(months: offset).dateTime;
case DateRangeUnit.year:
return Jiffy().subtract(years: offset).dateTime;
}
}
@override
Map<String, dynamic> toJson() => _$RelativeDateRangeQueryToJson(this);
factory RelativeDateRangeQuery.fromJson(Map<String, dynamic> json) =>
_$RelativeDateRangeQueryFromJson(json);
@override
bool matches(DateTime dt) {
return dt.isAfter(dateTime) || dt == dateTime;
}
}
@JsonSerializable()
@HiveType(typeId: PaperlessApiHiveTypeIds.absoluteDateRangeQuery)
class AbsoluteDateRangeQuery extends DateRangeQuery {
@LocalDateTimeJsonConverter()
@HiveField(0)
final DateTime? after;
@LocalDateTimeJsonConverter()
@HiveField(1)
final DateTime? before;
const AbsoluteDateRangeQuery({this.after, this.before});
@override
List<Object?> get props => [after, before];
@override
Map<String, String> toQueryParameter(DateRangeQueryField field) {
final Map<String, String> params = {};
// Add/subtract one day in the following because paperless uses gt/lt not gte/lte
if (after != null) {
params.putIfAbsent('${field.name}__date__gt',
() => apiDateFormat.format(after!.subtract(const Duration(days: 1))));
}
if (before != null) {
params.putIfAbsent('${field.name}__date__lt',
() => apiDateFormat.format(before!.add(const Duration(days: 1))));
}
return params;
}
AbsoluteDateRangeQuery copyWith({
DateTime? before,
DateTime? after,
}) {
return AbsoluteDateRangeQuery(
before: before ?? this.before,
after: after ?? this.after,
);
}
factory AbsoluteDateRangeQuery.fromJson(json) =>
_$AbsoluteDateRangeQueryFromJson(json);
@override
Map<String, dynamic> toJson() => _$AbsoluteDateRangeQueryToJson(this);
@override
bool matches(DateTime dt) {
//TODO: Check if after and before are inclusive or exclusive definitions.
bool matches = true;
if (after != null) {
matches &= dt.isAfter(after!) || dt == after;
}
if (before != null) {
matches &= dt.isBefore(before!) || dt == before;
}
return matches;
}
}
class UnsetDateRangeQueryAdapter extends TypeAdapter<UnsetDateRangeQuery> {
@override
final int typeId = 113;
@override
UnsetDateRangeQuery read(BinaryReader reader) {
// reader.readByte();
return const UnsetDateRangeQuery();
}
@override
void write(BinaryWriter writer, UnsetDateRangeQuery obj) {
writer.writeByte(0);
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is UnsetDateRangeQueryAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}

View File

@@ -1,68 +0,0 @@
import 'package:hive/hive.dart';
import 'package:jiffy/jiffy.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:paperless_api/config/hive/hive_type_ids.dart';
import 'date_range_query.dart';
import 'date_range_query_field.dart';
import 'date_range_unit.dart';
part 'relative_date_range_query.g.dart';
@JsonSerializable()
@HiveType(typeId: PaperlessApiHiveTypeIds.relativeDateRangeQuery)
class RelativeDateRangeQuery extends DateRangeQuery {
@HiveField(0)
final int offset;
@HiveField(1)
final DateRangeUnit unit;
const RelativeDateRangeQuery([
this.offset = 1,
this.unit = DateRangeUnit.day,
]);
@override
List<Object?> get props => [offset, unit];
@override
Map<String, String> toQueryParameter(DateRangeQueryField field) {
return {
'query': '${field.name}:[-$offset ${unit.name} to now]',
};
}
RelativeDateRangeQuery copyWith({
int? offset,
DateRangeUnit? unit,
}) {
return RelativeDateRangeQuery(
offset ?? this.offset,
unit ?? this.unit,
);
}
/// Returns the datetime when subtracting the offset given the unit from now.
DateTime get dateTime {
switch (unit) {
case DateRangeUnit.day:
return Jiffy().subtract(days: offset).dateTime;
case DateRangeUnit.week:
return Jiffy().subtract(weeks: offset).dateTime;
case DateRangeUnit.month:
return Jiffy().subtract(months: offset).dateTime;
case DateRangeUnit.year:
return Jiffy().subtract(years: offset).dateTime;
}
}
@override
Map<String, dynamic> toJson() => _$RelativeDateRangeQueryToJson(this);
factory RelativeDateRangeQuery.fromJson(Map<String, dynamic> json) =>
_$RelativeDateRangeQueryFromJson(json);
@override
bool matches(DateTime dt) {
return dt.isAfter(dateTime) || dt == dateTime;
}
}

View File

@@ -2,44 +2,3 @@ import 'package:hive/hive.dart';
import 'package:paperless_api/src/models/query_parameters/date_range_queries/date_range_query_field.dart'; import 'package:paperless_api/src/models/query_parameters/date_range_queries/date_range_query_field.dart';
import 'date_range_query.dart'; import 'date_range_query.dart';
class UnsetDateRangeQuery extends DateRangeQuery {
const UnsetDateRangeQuery();
@override
List<Object?> get props => [];
@override
Map<String, String> toQueryParameter(DateRangeQueryField field) => const {};
@override
Map<String, dynamic> toJson() => const {};
@override
bool matches(DateTime dt) => true;
}
class UnsetDateRangeQueryAdapter extends TypeAdapter<UnsetDateRangeQuery> {
@override
final int typeId = 113;
@override
UnsetDateRangeQuery read(BinaryReader reader) {
reader.readByte();
return const UnsetDateRangeQuery();
}
@override
void write(BinaryWriter writer, UnsetDateRangeQuery obj) {
writer.writeByte(0);
}
@override
int get hashCode => typeId.hashCode;
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is UnsetDateRangeQueryAdapter &&
runtimeType == other.runtimeType &&
typeId == other.typeId;
}

View File

@@ -23,9 +23,6 @@ dependencies:
freezed_annotation: ^2.2.0 freezed_annotation: ^2.2.0
hive: ^2.2.3 hive: ^2.2.3
dependency_overrides:
graphs: 2.2.0
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:
sdk: flutter sdk: flutter

View File

@@ -761,7 +761,7 @@ packages:
source: hosted source: hosted
version: "2.1.2" version: "2.1.2"
graphs: graphs:
dependency: "direct overridden" dependency: transitive
description: description:
name: graphs name: graphs
sha256: f9e130f3259f52d26f0cfc0e964513796dafed572fa52e45d2f8d6ca14db39b2 sha256: f9e130f3259f52d26f0cfc0e964513796dafed572fa52e45d2f8d6ca14db39b2

View File

@@ -93,7 +93,6 @@ dependencies:
dependency_overrides: dependency_overrides:
intl: ^0.18.0 intl: ^0.18.0
graphs: 2.2.0
http: ^1.0.0 http: ^1.0.0