mirror of
https://github.com/Xevion/paperless-mobile.git
synced 2025-12-07 11:15:49 -06:00
98 lines
2.8 KiB
Dart
98 lines
2.8 KiB
Dart
import 'package:equatable/equatable.dart';
|
|
import 'package:paperless_mobile/core/type/types.dart';
|
|
import 'package:paperless_mobile/features/documents/model/document_filter.dart';
|
|
import 'package:paperless_mobile/features/documents/model/filter_rule.model.dart';
|
|
import 'package:paperless_mobile/features/documents/model/query_parameters/sort_field.dart';
|
|
import 'package:paperless_mobile/features/documents/model/query_parameters/sort_order.dart';
|
|
|
|
class SavedView with EquatableMixin {
|
|
final int? id;
|
|
final String name;
|
|
|
|
final bool showOnDashboard;
|
|
final bool showInSidebar;
|
|
|
|
final SortField sortField;
|
|
final bool sortReverse;
|
|
final List<FilterRule> filterRules;
|
|
|
|
SavedView({
|
|
this.id,
|
|
required this.name,
|
|
required this.showOnDashboard,
|
|
required this.showInSidebar,
|
|
required this.sortField,
|
|
required this.sortReverse,
|
|
required this.filterRules,
|
|
}) {
|
|
filterRules.sort(
|
|
(a, b) => (a.ruleType.compareTo(b.ruleType) != 0
|
|
? a.ruleType.compareTo(b.ruleType)
|
|
: a.value?.compareTo(b.value ?? "") ?? -1),
|
|
);
|
|
}
|
|
|
|
@override
|
|
List<Object?> get props => [
|
|
name,
|
|
showOnDashboard,
|
|
showInSidebar,
|
|
sortField,
|
|
sortReverse,
|
|
filterRules
|
|
];
|
|
|
|
SavedView.fromJson(JSON 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<JSON>()
|
|
.map(FilterRule.fromJson)
|
|
.toList(),
|
|
);
|
|
|
|
DocumentFilter toDocumentFilter() {
|
|
return filterRules.fold(
|
|
DocumentFilter(
|
|
sortOrder: sortReverse ? SortOrder.descending : SortOrder.ascending,
|
|
sortField: sortField,
|
|
),
|
|
(filter, filterRule) => filterRule.applyToFilter(filter),
|
|
);
|
|
}
|
|
|
|
SavedView.fromDocumentFilter(
|
|
DocumentFilter filter, {
|
|
required String name,
|
|
required bool showInSidebar,
|
|
required bool showOnDashboard,
|
|
}) : this(
|
|
id: null,
|
|
name: name,
|
|
filterRules: FilterRule.fromFilter(filter),
|
|
sortField: filter.sortField,
|
|
showInSidebar: showInSidebar,
|
|
showOnDashboard: showOnDashboard,
|
|
sortReverse: filter.sortOrder == SortOrder.descending,
|
|
);
|
|
|
|
JSON 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(),
|
|
};
|
|
}
|
|
}
|