From a5e19fc0b45c85c2dc4f10a3a390a660a1a827bc Mon Sep 17 00:00:00 2001 From: Anton Stubenbord Date: Sat, 21 Jan 2023 22:33:13 +0100 Subject: [PATCH] Fixed saved view model, slightly changed sorting dialog, fixed open document in system viewer not working because file has folder-like structure. --- .../lib/src/models/document_filter.dart | 11 +++++- .../lib/src/models/document_filter.g.dart | 8 ++-- .../models/query_parameters/sort_field.dart | 2 +- .../lib/src/models/saved_view_model.dart | 39 +++++-------------- .../lib/src/models/saved_view_model.g.dart | 39 +++++++++++++++++++ 5 files changed, 63 insertions(+), 36 deletions(-) create mode 100644 packages/paperless_api/lib/src/models/saved_view_model.g.dart diff --git a/packages/paperless_api/lib/src/models/document_filter.dart b/packages/paperless_api/lib/src/models/document_filter.dart index a2b5363..4027ca2 100644 --- a/packages/paperless_api/lib/src/models/document_filter.dart +++ b/packages/paperless_api/lib/src/models/document_filter.dart @@ -26,7 +26,7 @@ class DocumentFilter extends Equatable { final IdQueryParameter storagePath; final IdQueryParameter asnQuery; final TagsQuery tags; - final SortField sortField; + final SortField? sortField; final SortOrder sortOrder; final DateRangeQuery created; final DateRangeQuery added; @@ -59,7 +59,6 @@ class DocumentFilter extends Equatable { List> params = [ MapEntry('page', '$page'), MapEntry('page_size', '$pageSize'), - MapEntry('ordering', '${sortOrder.queryString}${sortField.queryString}'), ...documentType.toQueryParameter('document_type').entries, ...correspondent.toQueryParameter('correspondent').entries, ...storagePath.toQueryParameter('storage_path').entries, @@ -70,6 +69,14 @@ class DocumentFilter extends Equatable { ...modified.toQueryParameter(DateRangeQueryField.modified).entries, ...query.toQueryParameter().entries, ]; + if (sortField != null) { + params.add( + MapEntry( + 'ordering', + '${sortOrder.queryString}${sortField!.queryString}', + ), + ); + } // Reverse ordering can also be encoded using &reverse=1 // Merge query params final queryParams = groupBy(params, (e) => e.key).map( diff --git a/packages/paperless_api/lib/src/models/document_filter.g.dart b/packages/paperless_api/lib/src/models/document_filter.g.dart index 073c517..8c0b89d 100644 --- a/packages/paperless_api/lib/src/models/document_filter.g.dart +++ b/packages/paperless_api/lib/src/models/document_filter.g.dart @@ -59,7 +59,7 @@ Map _$DocumentFilterToJson(DocumentFilter instance) => 'storagePath': instance.storagePath.toJson(), 'asnQuery': instance.asnQuery.toJson(), 'tags': const TagsQueryJsonConverter().toJson(instance.tags), - 'sortField': _$SortFieldEnumMap[instance.sortField]!, + 'sortField': _$SortFieldEnumMap[instance.sortField], 'sortOrder': _$SortOrderEnumMap[instance.sortOrder]!, 'created': const DateRangeQueryJsonConverter().toJson(instance.created), 'added': const DateRangeQueryJsonConverter().toJson(instance.added), @@ -68,10 +68,10 @@ Map _$DocumentFilterToJson(DocumentFilter instance) => }; const _$SortFieldEnumMap = { - SortField.archiveSerialNumber: 'archiveSerialNumber', - SortField.correspondentName: 'correspondentName', + SortField.archiveSerialNumber: 'archive_serial_number', + SortField.correspondentName: 'correspondent__name', SortField.title: 'title', - SortField.documentType: 'documentType', + SortField.documentType: 'document_type__name', SortField.created: 'created', SortField.added: 'added', SortField.modified: 'modified', diff --git a/packages/paperless_api/lib/src/models/query_parameters/sort_field.dart b/packages/paperless_api/lib/src/models/query_parameters/sort_field.dart index cd337b5..7eec450 100644 --- a/packages/paperless_api/lib/src/models/query_parameters/sort_field.dart +++ b/packages/paperless_api/lib/src/models/query_parameters/sort_field.dart @@ -1,6 +1,6 @@ import 'package:json_annotation/json_annotation.dart'; -@JsonEnum() +@JsonEnum(valueField: 'queryString') enum SortField { archiveSerialNumber("archive_serial_number"), correspondentName("correspondent__name"), diff --git a/packages/paperless_api/lib/src/models/saved_view_model.dart b/packages/paperless_api/lib/src/models/saved_view_model.dart index 4dfeda0..ae89590 100644 --- a/packages/paperless_api/lib/src/models/saved_view_model.dart +++ b/packages/paperless_api/lib/src/models/saved_view_model.dart @@ -1,9 +1,13 @@ import 'package:equatable/equatable.dart'; +import 'package:json_annotation/json_annotation.dart'; import 'package:paperless_api/src/models/document_filter.dart'; import 'package:paperless_api/src/models/filter_rule_model.dart'; import 'package:paperless_api/src/models/query_parameters/sort_field.dart'; import 'package:paperless_api/src/models/query_parameters/sort_order.dart'; +part 'saved_view_model.g.dart'; + +@JsonSerializable(fieldRename: FieldRename.snake) class SavedView with EquatableMixin { final int? id; final String name; @@ -11,7 +15,7 @@ class SavedView with EquatableMixin { final bool showOnDashboard; final bool showInSidebar; - final SortField sortField; + final SortField? sortField; final bool sortReverse; final List filterRules; @@ -20,7 +24,7 @@ class SavedView with EquatableMixin { required this.name, required this.showOnDashboard, required this.showInSidebar, - required this.sortField, + this.sortField, required this.sortReverse, required this.filterRules, }) { @@ -41,21 +45,10 @@ class SavedView with EquatableMixin { filterRules ]; - SavedView.fromJson(Map json) - : this( - id: json['id'], - name: json['name'], - showOnDashboard: json['show_on_dashboard'], - showInSidebar: json['show_in_sidebar'], - sortField: SortField.values - .where((order) => order.queryString == json['sort_field']) - .first, - sortReverse: json['sort_reverse'], - filterRules: (json['filter_rules'] as List) - .cast>() - .map(FilterRule.fromJson) - .toList(), - ); + factory SavedView.fromJson(Map json) => + _$SavedViewFromJson(json); + + Map toJson() => _$SavedViewToJson(this); DocumentFilter toDocumentFilter() { return filterRules.fold( @@ -81,16 +74,4 @@ class SavedView with EquatableMixin { showOnDashboard: showOnDashboard, sortReverse: filter.sortOrder == SortOrder.descending, ); - - Map toJson() { - return { - 'id': id, - 'name': name, - 'show_on_dashboard': showOnDashboard, - 'show_in_sidebar': showInSidebar, - 'sort_reverse': sortReverse, - 'sort_field': sortField.queryString, - 'filter_rules': filterRules.map((rule) => rule.toJson()).toList(), - }; - } } diff --git a/packages/paperless_api/lib/src/models/saved_view_model.g.dart b/packages/paperless_api/lib/src/models/saved_view_model.g.dart new file mode 100644 index 0000000..012143a --- /dev/null +++ b/packages/paperless_api/lib/src/models/saved_view_model.g.dart @@ -0,0 +1,39 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'saved_view_model.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +SavedView _$SavedViewFromJson(Map json) => SavedView( + id: json['id'] as int?, + name: json['name'] as String, + showOnDashboard: json['show_on_dashboard'] as bool, + showInSidebar: json['show_in_sidebar'] as bool, + sortField: $enumDecodeNullable(_$SortFieldEnumMap, json['sort_field']), + sortReverse: json['sort_reverse'] as bool, + filterRules: (json['filter_rules'] as List) + .map((e) => FilterRule.fromJson(e as Map)) + .toList(), + ); + +Map _$SavedViewToJson(SavedView instance) => { + 'id': instance.id, + 'name': instance.name, + 'show_on_dashboard': instance.showOnDashboard, + 'show_in_sidebar': instance.showInSidebar, + 'sort_field': _$SortFieldEnumMap[instance.sortField], + 'sort_reverse': instance.sortReverse, + 'filter_rules': instance.filterRules, + }; + +const _$SortFieldEnumMap = { + SortField.archiveSerialNumber: 'archive_serial_number', + SortField.correspondentName: 'correspondent__name', + SortField.title: 'title', + SortField.documentType: 'document_type__name', + SortField.created: 'created', + SortField.added: 'added', + SortField.modified: 'modified', +};