Fixed saved view model, slightly changed sorting dialog, fixed open document in system viewer not working because file has folder-like structure.

This commit is contained in:
Anton Stubenbord
2023-01-21 22:33:13 +01:00
parent 00b8f317c5
commit a5e19fc0b4
5 changed files with 63 additions and 36 deletions

View File

@@ -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<MapEntry<String, dynamic>> 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(

View File

@@ -59,7 +59,7 @@ Map<String, dynamic> _$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<String, dynamic> _$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',

View File

@@ -1,6 +1,6 @@
import 'package:json_annotation/json_annotation.dart';
@JsonEnum()
@JsonEnum(valueField: 'queryString')
enum SortField {
archiveSerialNumber("archive_serial_number"),
correspondentName("correspondent__name"),

View File

@@ -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<FilterRule> 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<String, dynamic> 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<String, dynamic>>()
.map(FilterRule.fromJson)
.toList(),
);
factory SavedView.fromJson(Map<String, dynamic> json) =>
_$SavedViewFromJson(json);
Map<String, dynamic> toJson() => _$SavedViewToJson(this);
DocumentFilter toDocumentFilter() {
return filterRules.fold(
@@ -81,16 +74,4 @@ class SavedView with EquatableMixin {
showOnDashboard: showOnDashboard,
sortReverse: filter.sortOrder == SortOrder.descending,
);
Map<String, dynamic> 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(),
};
}
}

View File

@@ -0,0 +1,39 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'saved_view_model.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
SavedView _$SavedViewFromJson(Map<String, dynamic> 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<dynamic>)
.map((e) => FilterRule.fromJson(e as Map<String, dynamic>))
.toList(),
);
Map<String, dynamic> _$SavedViewToJson(SavedView instance) => <String, dynamic>{
'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',
};