mirror of
https://github.com/Xevion/paperless-mobile.git
synced 2025-12-13 00:12:17 -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 storagePath;
|
||||||
final IdQueryParameter asnQuery;
|
final IdQueryParameter asnQuery;
|
||||||
final TagsQuery tags;
|
final TagsQuery tags;
|
||||||
final SortField sortField;
|
final SortField? sortField;
|
||||||
final SortOrder sortOrder;
|
final SortOrder sortOrder;
|
||||||
final DateRangeQuery created;
|
final DateRangeQuery created;
|
||||||
final DateRangeQuery added;
|
final DateRangeQuery added;
|
||||||
@@ -59,7 +59,6 @@ class DocumentFilter extends Equatable {
|
|||||||
List<MapEntry<String, dynamic>> params = [
|
List<MapEntry<String, dynamic>> params = [
|
||||||
MapEntry('page', '$page'),
|
MapEntry('page', '$page'),
|
||||||
MapEntry('page_size', '$pageSize'),
|
MapEntry('page_size', '$pageSize'),
|
||||||
MapEntry('ordering', '${sortOrder.queryString}${sortField.queryString}'),
|
|
||||||
...documentType.toQueryParameter('document_type').entries,
|
...documentType.toQueryParameter('document_type').entries,
|
||||||
...correspondent.toQueryParameter('correspondent').entries,
|
...correspondent.toQueryParameter('correspondent').entries,
|
||||||
...storagePath.toQueryParameter('storage_path').entries,
|
...storagePath.toQueryParameter('storage_path').entries,
|
||||||
@@ -70,6 +69,14 @@ class DocumentFilter extends Equatable {
|
|||||||
...modified.toQueryParameter(DateRangeQueryField.modified).entries,
|
...modified.toQueryParameter(DateRangeQueryField.modified).entries,
|
||||||
...query.toQueryParameter().entries,
|
...query.toQueryParameter().entries,
|
||||||
];
|
];
|
||||||
|
if (sortField != null) {
|
||||||
|
params.add(
|
||||||
|
MapEntry(
|
||||||
|
'ordering',
|
||||||
|
'${sortOrder.queryString}${sortField!.queryString}',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
// Reverse ordering can also be encoded using &reverse=1
|
// Reverse ordering can also be encoded using &reverse=1
|
||||||
// Merge query params
|
// Merge query params
|
||||||
final queryParams = groupBy(params, (e) => e.key).map(
|
final queryParams = groupBy(params, (e) => e.key).map(
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ Map<String, dynamic> _$DocumentFilterToJson(DocumentFilter instance) =>
|
|||||||
'storagePath': instance.storagePath.toJson(),
|
'storagePath': instance.storagePath.toJson(),
|
||||||
'asnQuery': instance.asnQuery.toJson(),
|
'asnQuery': instance.asnQuery.toJson(),
|
||||||
'tags': const TagsQueryJsonConverter().toJson(instance.tags),
|
'tags': const TagsQueryJsonConverter().toJson(instance.tags),
|
||||||
'sortField': _$SortFieldEnumMap[instance.sortField]!,
|
'sortField': _$SortFieldEnumMap[instance.sortField],
|
||||||
'sortOrder': _$SortOrderEnumMap[instance.sortOrder]!,
|
'sortOrder': _$SortOrderEnumMap[instance.sortOrder]!,
|
||||||
'created': const DateRangeQueryJsonConverter().toJson(instance.created),
|
'created': const DateRangeQueryJsonConverter().toJson(instance.created),
|
||||||
'added': const DateRangeQueryJsonConverter().toJson(instance.added),
|
'added': const DateRangeQueryJsonConverter().toJson(instance.added),
|
||||||
@@ -68,10 +68,10 @@ Map<String, dynamic> _$DocumentFilterToJson(DocumentFilter instance) =>
|
|||||||
};
|
};
|
||||||
|
|
||||||
const _$SortFieldEnumMap = {
|
const _$SortFieldEnumMap = {
|
||||||
SortField.archiveSerialNumber: 'archiveSerialNumber',
|
SortField.archiveSerialNumber: 'archive_serial_number',
|
||||||
SortField.correspondentName: 'correspondentName',
|
SortField.correspondentName: 'correspondent__name',
|
||||||
SortField.title: 'title',
|
SortField.title: 'title',
|
||||||
SortField.documentType: 'documentType',
|
SortField.documentType: 'document_type__name',
|
||||||
SortField.created: 'created',
|
SortField.created: 'created',
|
||||||
SortField.added: 'added',
|
SortField.added: 'added',
|
||||||
SortField.modified: 'modified',
|
SortField.modified: 'modified',
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import 'package:json_annotation/json_annotation.dart';
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
||||||
@JsonEnum()
|
@JsonEnum(valueField: 'queryString')
|
||||||
enum SortField {
|
enum SortField {
|
||||||
archiveSerialNumber("archive_serial_number"),
|
archiveSerialNumber("archive_serial_number"),
|
||||||
correspondentName("correspondent__name"),
|
correspondentName("correspondent__name"),
|
||||||
|
|||||||
@@ -1,9 +1,13 @@
|
|||||||
import 'package:equatable/equatable.dart';
|
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/document_filter.dart';
|
||||||
import 'package:paperless_api/src/models/filter_rule_model.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_field.dart';
|
||||||
import 'package:paperless_api/src/models/query_parameters/sort_order.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 {
|
class SavedView with EquatableMixin {
|
||||||
final int? id;
|
final int? id;
|
||||||
final String name;
|
final String name;
|
||||||
@@ -11,7 +15,7 @@ class SavedView with EquatableMixin {
|
|||||||
final bool showOnDashboard;
|
final bool showOnDashboard;
|
||||||
final bool showInSidebar;
|
final bool showInSidebar;
|
||||||
|
|
||||||
final SortField sortField;
|
final SortField? sortField;
|
||||||
final bool sortReverse;
|
final bool sortReverse;
|
||||||
final List<FilterRule> filterRules;
|
final List<FilterRule> filterRules;
|
||||||
|
|
||||||
@@ -20,7 +24,7 @@ class SavedView with EquatableMixin {
|
|||||||
required this.name,
|
required this.name,
|
||||||
required this.showOnDashboard,
|
required this.showOnDashboard,
|
||||||
required this.showInSidebar,
|
required this.showInSidebar,
|
||||||
required this.sortField,
|
this.sortField,
|
||||||
required this.sortReverse,
|
required this.sortReverse,
|
||||||
required this.filterRules,
|
required this.filterRules,
|
||||||
}) {
|
}) {
|
||||||
@@ -41,21 +45,10 @@ class SavedView with EquatableMixin {
|
|||||||
filterRules
|
filterRules
|
||||||
];
|
];
|
||||||
|
|
||||||
SavedView.fromJson(Map<String, dynamic> json)
|
factory SavedView.fromJson(Map<String, dynamic> json) =>
|
||||||
: this(
|
_$SavedViewFromJson(json);
|
||||||
id: json['id'],
|
|
||||||
name: json['name'],
|
Map<String, dynamic> toJson() => _$SavedViewToJson(this);
|
||||||
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(),
|
|
||||||
);
|
|
||||||
|
|
||||||
DocumentFilter toDocumentFilter() {
|
DocumentFilter toDocumentFilter() {
|
||||||
return filterRules.fold(
|
return filterRules.fold(
|
||||||
@@ -81,16 +74,4 @@ class SavedView with EquatableMixin {
|
|||||||
showOnDashboard: showOnDashboard,
|
showOnDashboard: showOnDashboard,
|
||||||
sortReverse: filter.sortOrder == SortOrder.descending,
|
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