mirror of
https://github.com/Xevion/paperless-mobile.git
synced 2025-12-09 10:08:00 -06:00
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:
@@ -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(
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
@JsonEnum()
|
||||
@JsonEnum(valueField: 'queryString')
|
||||
enum SortField {
|
||||
archiveSerialNumber("archive_serial_number"),
|
||||
correspondentName("correspondent__name"),
|
||||
|
||||
@@ -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(),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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',
|
||||
};
|
||||
Reference in New Issue
Block a user