From 28e9463b9629eb0a7d5ddefeced4940be0e31350 Mon Sep 17 00:00:00 2001 From: Anton Stubenbord Date: Sat, 17 Jun 2023 16:42:17 +0200 Subject: [PATCH] feat: Re-implement set filters count --- .../documents/view/pages/documents_page.dart | 69 +++++-- .../lib/config/hive/hive_type_ids.dart | 1 + .../lib/src/models/document_filter.dart | 51 ++++- .../lib/src/models/filter_rule_model.dart | 51 +++-- .../paperless_api/lib/src/models/models.dart | 37 ++-- .../absolute_date_range_query.dart | 72 -------- .../date_range_queries.dart | 6 - .../date_range_queries/date_range_query.dart | 174 +++++++++++++++++- .../relative_date_range_query.dart | 68 ------- .../unset_date_range_query.dart | 41 ----- packages/paperless_api/pubspec.yaml | 3 - pubspec.lock | 2 +- pubspec.yaml | 1 - 13 files changed, 320 insertions(+), 256 deletions(-) delete mode 100644 packages/paperless_api/lib/src/models/query_parameters/date_range_queries/absolute_date_range_query.dart delete mode 100644 packages/paperless_api/lib/src/models/query_parameters/date_range_queries/date_range_queries.dart delete mode 100644 packages/paperless_api/lib/src/models/query_parameters/date_range_queries/relative_date_range_query.dart diff --git a/lib/features/documents/view/pages/documents_page.dart b/lib/features/documents/view/pages/documents_page.dart index 18ed339..25fc0e7 100644 --- a/lib/features/documents/view/pages/documents_page.dart +++ b/lib/features/documents/view/pages/documents_page.dart @@ -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/generated/l10n/app_localizations.dart'; import 'package:paperless_mobile/helpers/message_helpers.dart'; -import 'package:sliver_tools/sliver_tools.dart'; class DocumentFilterIntent { final DocumentFilter? filter; @@ -120,30 +119,60 @@ class _DocumentsPageState extends State builder: (context, state) { final appliedFiltersCount = state.filter.appliedFiltersCount; final show = state.selection.isEmpty; + final canReset = state.filter.appliedFiltersCount > 0; return AnimatedScale( scale: show ? 1 : 0, duration: const Duration(milliseconds: 200), curve: Curves.easeIn, - child: 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: _currentTab == 0 - ? FloatingActionButton( - child: const Icon(Icons.filter_alt_outlined), - onPressed: _openDocumentFilter, - ) - : FloatingActionButton( - child: const Icon(Icons.add), - onPressed: () => _onCreateSavedView(state.filter), + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + if (canReset) + Padding( + padding: const EdgeInsets.all(8.0), + child: FloatingActionButton.small( + key: UniqueKey(), + backgroundColor: Theme.of(context) + .colorScheme + .onPrimaryContainer, + onPressed: () { + context.read().updateFilter(); + }, + child: Icon( + Icons.refresh, + color: Theme.of(context) + .colorScheme + .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), + ), + ), + ), + ], ), ); }, diff --git a/packages/paperless_api/lib/config/hive/hive_type_ids.dart b/packages/paperless_api/lib/config/hive/hive_type_ids.dart index a931473..59b11b5 100644 --- a/packages/paperless_api/lib/config/hive/hive_type_ids.dart +++ b/packages/paperless_api/lib/config/hive/hive_type_ids.dart @@ -1,5 +1,6 @@ import 'package:hive/hive.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 { PaperlessApiHiveTypeIds._(); diff --git a/packages/paperless_api/lib/src/models/document_filter.dart b/packages/paperless_api/lib/src/models/document_filter.dart index 6da3db9..ca2becd 100644 --- a/packages/paperless_api/lib/src/models/document_filter.dart +++ b/packages/paperless_api/lib/src/models/document_filter.dart @@ -3,6 +3,8 @@ import 'package:equatable/equatable.dart'; import 'package:hive/hive.dart'; import 'package:json_annotation/json_annotation.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'; @@ -187,16 +189,45 @@ class DocumentFilter extends Equatable { } int get appliedFiltersCount => [ - documentType != initial.documentType, - correspondent != initial.correspondent, - storagePath != initial.storagePath, - tags != initial.tags, - added != initial.added, - created != initial.created, - modified != initial.modified, - asnQuery != initial.asnQuery, - ((query.queryText ?? '') != (initial.query.queryText ?? '')), - ].fold(0, (previousValue, element) => previousValue += element ? 1 : 0); + documentType.maybeWhen( + unset: () => 0, + orElse: () => 1, + ), + correspondent.maybeWhen( + unset: () => 0, + orElse: () => 1, + ), + storagePath.maybeWhen( + 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 List get props => [ diff --git a/packages/paperless_api/lib/src/models/filter_rule_model.dart b/packages/paperless_api/lib/src/models/filter_rule_model.dart index d211434..450b81e 100644 --- a/packages/paperless_api/lib/src/models/filter_rule_model.dart +++ b/packages/paperless_api/lib/src/models/filter_rule_model.dart @@ -5,6 +5,9 @@ import 'package:json_annotation/json_annotation.dart'; import 'package:paperless_api/paperless_api.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/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'; @@ -73,7 +76,9 @@ class FilterRule with EquatableMixin { ); case hasAnyTag: return filter.copyWith( - tags: value == "true" ? const TagsQuery.anyAssigned() : const TagsQuery.notAssigned(), + tags: value == "true" + ? const TagsQuery.anyAssigned() + : const TagsQuery.notAssigned(), ); case includeTagsRule: assert(filter.tags is IdsTagsQuery); @@ -105,7 +110,8 @@ class FilterRule with EquatableMixin { ); } else { return filter.copyWith( - created: AbsoluteDateRangeQuery(before: _dateTimeConverter.fromJson(value!)), + created: AbsoluteDateRangeQuery( + before: _dateTimeConverter.fromJson(value!)), ); } case createdAfterRule: @@ -116,7 +122,8 @@ class FilterRule with EquatableMixin { ); } else { return filter.copyWith( - created: AbsoluteDateRangeQuery(after: _dateTimeConverter.fromJson(value!)), + created: AbsoluteDateRangeQuery( + after: _dateTimeConverter.fromJson(value!)), ); } case addedBeforeRule: @@ -127,7 +134,8 @@ class FilterRule with EquatableMixin { ); } else { return filter.copyWith( - added: AbsoluteDateRangeQuery(before: _dateTimeConverter.fromJson(value!)), + added: AbsoluteDateRangeQuery( + before: _dateTimeConverter.fromJson(value!)), ); } case addedAfterRule: @@ -138,7 +146,8 @@ class FilterRule with EquatableMixin { ); } else { return filter.copyWith( - added: AbsoluteDateRangeQuery(after: _dateTimeConverter.fromJson(value!)), + added: AbsoluteDateRangeQuery( + after: _dateTimeConverter.fromJson(value!)), ); } case modifiedBeforeRule: @@ -149,7 +158,8 @@ class FilterRule with EquatableMixin { ); } else { return filter.copyWith( - modified: AbsoluteDateRangeQuery(before: _dateTimeConverter.fromJson(value!)), + modified: AbsoluteDateRangeQuery( + before: _dateTimeConverter.fromJson(value!)), ); } case modifiedAfterRule: @@ -160,7 +170,8 @@ class FilterRule with EquatableMixin { ); } else { return filter.copyWith( - added: AbsoluteDateRangeQuery(after: _dateTimeConverter.fromJson(value!)), + added: AbsoluteDateRangeQuery( + after: _dateTimeConverter.fromJson(value!)), ); } case titleAndContentRule: @@ -273,7 +284,8 @@ class FilterRule with EquatableMixin { filterRules.add(FilterRule(titleRule, filter.query.queryText!)); break; case QueryType.titleAndContent: - filterRules.add(FilterRule(titleAndContentRule, filter.query.queryText!)); + filterRules + .add(FilterRule(titleAndContentRule, filter.query.queryText!)); break; case QueryType.extended: filterRules.add(FilterRule(extendedRule, filter.query.queryText!)); @@ -299,8 +311,8 @@ class FilterRule with EquatableMixin { } } else if (created is RelativeDateRangeQuery) { filterRules.add( - FilterRule( - extendedRule, created.toQueryParameter(DateRangeQueryField.created).values.first), + FilterRule(extendedRule, + created.toQueryParameter(DateRangeQueryField.created).values.first), ); } @@ -319,7 +331,8 @@ class FilterRule with EquatableMixin { } } else if (added is RelativeDateRangeQuery) { 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) { filterRules.add( - FilterRule(modifiedBeforeRule, apiDateFormat.format(modified.before!)), + FilterRule( + modifiedBeforeRule, apiDateFormat.format(modified.before!)), ); } } else if (modified is RelativeDateRangeQuery) { filterRules.add( FilterRule( - extendedRule, modified.toQueryParameter(DateRangeQueryField.modified).values.first), + extendedRule, + modified + .toQueryParameter(DateRangeQueryField.modified) + .values + .first), ); } //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 .where((r) => r.ruleType == FilterRule.extendedRule) .map((e) => e.value) @@ -368,5 +388,6 @@ class FilterRule with EquatableMixin { Map toJson() => _$FilterRuleToJson(this); - factory FilterRule.fromJson(Map json) => _$FilterRuleFromJson(json); + factory FilterRule.fromJson(Map json) => + _$FilterRuleFromJson(json); } diff --git a/packages/paperless_api/lib/src/models/models.dart b/packages/paperless_api/lib/src/models/models.dart index 73637bd..a48ce1f 100644 --- a/packages/paperless_api/lib/src/models/models.dart +++ b/packages/paperless_api/lib/src/models/models.dart @@ -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/document_type_model.dart'; export 'labels/label_model.dart'; export 'labels/matching_algorithm.dart'; export 'labels/storage_path_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 'paperless_server_exception.dart'; export 'paperless_server_information_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 'task/task.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 'permissions/user_permission_extension.dart'; diff --git a/packages/paperless_api/lib/src/models/query_parameters/date_range_queries/absolute_date_range_query.dart b/packages/paperless_api/lib/src/models/query_parameters/date_range_queries/absolute_date_range_query.dart deleted file mode 100644 index 777a9d2..0000000 --- a/packages/paperless_api/lib/src/models/query_parameters/date_range_queries/absolute_date_range_query.dart +++ /dev/null @@ -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 get props => [after, before]; - - @override - Map toQueryParameter(DateRangeQueryField field) { - final Map 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 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; - } -} diff --git a/packages/paperless_api/lib/src/models/query_parameters/date_range_queries/date_range_queries.dart b/packages/paperless_api/lib/src/models/query_parameters/date_range_queries/date_range_queries.dart deleted file mode 100644 index 81391b9..0000000 --- a/packages/paperless_api/lib/src/models/query_parameters/date_range_queries/date_range_queries.dart +++ /dev/null @@ -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'; diff --git a/packages/paperless_api/lib/src/models/query_parameters/date_range_queries/date_range_query.dart b/packages/paperless_api/lib/src/models/query_parameters/date_range_queries/date_range_query.dart index 3410eca..0982267 100644 --- a/packages/paperless_api/lib/src/models/query_parameters/date_range_queries/date_range_query.dart +++ b/packages/paperless_api/lib/src/models/query_parameters/date_range_queries/date_range_query.dart @@ -1,8 +1,17 @@ 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_unit.dart'; -abstract class DateRangeQuery extends Equatable { +part 'date_range_query.g.dart'; + +sealed class DateRangeQuery extends Equatable { const DateRangeQuery(); Map toQueryParameter(DateRangeQueryField field); @@ -11,3 +20,166 @@ abstract class DateRangeQuery extends Equatable { bool matches(DateTime dt); } + +class UnsetDateRangeQuery extends DateRangeQuery { + const UnsetDateRangeQuery(); + @override + List get props => []; + + @override + Map toQueryParameter(DateRangeQueryField field) => const {}; + + @override + Map 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 get props => [offset, unit]; + + @override + Map 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 toJson() => _$RelativeDateRangeQueryToJson(this); + + factory RelativeDateRangeQuery.fromJson(Map 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 get props => [after, before]; + + @override + Map toQueryParameter(DateRangeQueryField field) { + final Map 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 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 { + @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; +} diff --git a/packages/paperless_api/lib/src/models/query_parameters/date_range_queries/relative_date_range_query.dart b/packages/paperless_api/lib/src/models/query_parameters/date_range_queries/relative_date_range_query.dart deleted file mode 100644 index 32b8410..0000000 --- a/packages/paperless_api/lib/src/models/query_parameters/date_range_queries/relative_date_range_query.dart +++ /dev/null @@ -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 get props => [offset, unit]; - - @override - Map 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 toJson() => _$RelativeDateRangeQueryToJson(this); - - factory RelativeDateRangeQuery.fromJson(Map json) => - _$RelativeDateRangeQueryFromJson(json); - - @override - bool matches(DateTime dt) { - return dt.isAfter(dateTime) || dt == dateTime; - } -} diff --git a/packages/paperless_api/lib/src/models/query_parameters/date_range_queries/unset_date_range_query.dart b/packages/paperless_api/lib/src/models/query_parameters/date_range_queries/unset_date_range_query.dart index 438c9d7..c6d52cf 100644 --- a/packages/paperless_api/lib/src/models/query_parameters/date_range_queries/unset_date_range_query.dart +++ b/packages/paperless_api/lib/src/models/query_parameters/date_range_queries/unset_date_range_query.dart @@ -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 'date_range_query.dart'; - -class UnsetDateRangeQuery extends DateRangeQuery { - const UnsetDateRangeQuery(); - @override - List get props => []; - - @override - Map toQueryParameter(DateRangeQueryField field) => const {}; - - @override - Map toJson() => const {}; - - @override - bool matches(DateTime dt) => true; -} - -class UnsetDateRangeQueryAdapter extends TypeAdapter { - @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; -} diff --git a/packages/paperless_api/pubspec.yaml b/packages/paperless_api/pubspec.yaml index 3254983..3aa2823 100644 --- a/packages/paperless_api/pubspec.yaml +++ b/packages/paperless_api/pubspec.yaml @@ -23,9 +23,6 @@ dependencies: freezed_annotation: ^2.2.0 hive: ^2.2.3 -dependency_overrides: - graphs: 2.2.0 - dev_dependencies: flutter_test: sdk: flutter diff --git a/pubspec.lock b/pubspec.lock index ba45969..eeb8838 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -761,7 +761,7 @@ packages: source: hosted version: "2.1.2" graphs: - dependency: "direct overridden" + dependency: transitive description: name: graphs sha256: f9e130f3259f52d26f0cfc0e964513796dafed572fa52e45d2f8d6ca14db39b2 diff --git a/pubspec.yaml b/pubspec.yaml index 2006864..e57f281 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -93,7 +93,6 @@ dependencies: dependency_overrides: intl: ^0.18.0 - graphs: 2.2.0 http: ^1.0.0