Changed saved views handling, changed repository structure with automatic persistence.

This commit is contained in:
Anton Stubenbord
2023-01-08 00:01:04 +01:00
parent 23bcb355b1
commit 3c6c4e63d7
74 changed files with 1374 additions and 863 deletions

View File

@@ -0,0 +1,31 @@
import 'package:flutter/foundation.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_mobile/core/repository/state/repository_state.dart';
part 'correspondent_repository_state.g.dart';
@JsonSerializable()
class CorrespondentRepositoryState
extends RepositoryState<Map<int, Correspondent>> {
const CorrespondentRepositoryState({
super.values = const {},
super.hasLoaded,
});
@override
CorrespondentRepositoryState copyWith({
Map<int, Correspondent>? values,
bool? hasLoaded,
}) {
return CorrespondentRepositoryState(
values: values ?? this.values,
hasLoaded: hasLoaded ?? this.hasLoaded,
);
}
factory CorrespondentRepositoryState.fromJson(Map<String, dynamic> json) =>
_$CorrespondentRepositoryStateFromJson(json);
Map<String, dynamic> toJson() => _$CorrespondentRepositoryStateToJson(this);
}

View File

@@ -0,0 +1,25 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'correspondent_repository_state.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
CorrespondentRepositoryState _$CorrespondentRepositoryStateFromJson(
Map<String, dynamic> json) =>
CorrespondentRepositoryState(
values: (json['values'] as Map<String, dynamic>?)?.map(
(k, e) => MapEntry(int.parse(k),
Correspondent.fromJson(e as Map<String, dynamic>)),
) ??
const {},
hasLoaded: json['hasLoaded'] as bool? ?? false,
);
Map<String, dynamic> _$CorrespondentRepositoryStateToJson(
CorrespondentRepositoryState instance) =>
<String, dynamic>{
'values': instance.values.map((k, e) => MapEntry(k.toString(), e)),
'hasLoaded': instance.hasLoaded,
};

View File

@@ -0,0 +1,28 @@
import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_mobile/core/repository/state/repository_state.dart';
import 'package:json_annotation/json_annotation.dart';
part 'document_type_repository_state.g.dart';
@JsonSerializable()
class DocumentTypeRepositoryState
extends RepositoryState<Map<int, DocumentType>> {
const DocumentTypeRepositoryState({
super.values = const {},
super.hasLoaded,
});
@override
DocumentTypeRepositoryState copyWith(
{Map<int, DocumentType>? values, bool? hasLoaded}) {
return DocumentTypeRepositoryState(
values: values ?? this.values,
hasLoaded: hasLoaded ?? this.hasLoaded,
);
}
factory DocumentTypeRepositoryState.fromJson(Map<String, dynamic> json) =>
_$DocumentTypeRepositoryStateFromJson(json);
Map<String, dynamic> toJson() => _$DocumentTypeRepositoryStateToJson(this);
}

View File

@@ -0,0 +1,25 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'document_type_repository_state.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
DocumentTypeRepositoryState _$DocumentTypeRepositoryStateFromJson(
Map<String, dynamic> json) =>
DocumentTypeRepositoryState(
values: (json['values'] as Map<String, dynamic>?)?.map(
(k, e) => MapEntry(
int.parse(k), DocumentType.fromJson(e as Map<String, dynamic>)),
) ??
const {},
hasLoaded: json['hasLoaded'] as bool? ?? false,
);
Map<String, dynamic> _$DocumentTypeRepositoryStateToJson(
DocumentTypeRepositoryState instance) =>
<String, dynamic>{
'values': instance.values.map((k, e) => MapEntry(k.toString(), e)),
'hasLoaded': instance.hasLoaded,
};

View File

@@ -0,0 +1,29 @@
import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_mobile/core/repository/state/repository_state.dart';
import 'package:json_annotation/json_annotation.dart';
part 'saved_view_repository_state.g.dart';
@JsonSerializable()
class SavedViewRepositoryState extends RepositoryState<Map<int, SavedView>> {
const SavedViewRepositoryState({
super.values = const {},
super.hasLoaded = false,
});
@override
SavedViewRepositoryState copyWith({
Map<int, SavedView>? values,
bool? hasLoaded,
}) {
return SavedViewRepositoryState(
values: values ?? this.values,
hasLoaded: hasLoaded ?? this.hasLoaded,
);
}
factory SavedViewRepositoryState.fromJson(Map<String, dynamic> json) =>
_$SavedViewRepositoryStateFromJson(json);
Map<String, dynamic> toJson() => _$SavedViewRepositoryStateToJson(this);
}

View File

@@ -0,0 +1,25 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'saved_view_repository_state.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
SavedViewRepositoryState _$SavedViewRepositoryStateFromJson(
Map<String, dynamic> json) =>
SavedViewRepositoryState(
values: (json['values'] as Map<String, dynamic>?)?.map(
(k, e) => MapEntry(
int.parse(k), SavedView.fromJson(e as Map<String, dynamic>)),
) ??
const {},
hasLoaded: json['hasLoaded'] as bool? ?? false,
);
Map<String, dynamic> _$SavedViewRepositoryStateToJson(
SavedViewRepositoryState instance) =>
<String, dynamic>{
'values': instance.values.map((k, e) => MapEntry(k.toString(), e)),
'hasLoaded': instance.hasLoaded,
};

View File

@@ -0,0 +1,28 @@
import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_mobile/core/repository/state/repository_state.dart';
import 'package:json_annotation/json_annotation.dart';
part 'storage_path_repository_state.g.dart';
@JsonSerializable()
class StoragePathRepositoryState
extends RepositoryState<Map<int, StoragePath>> {
const StoragePathRepositoryState({
super.values = const {},
super.hasLoaded = false,
});
@override
StoragePathRepositoryState copyWith(
{Map<int, StoragePath>? values, bool? hasLoaded}) {
return StoragePathRepositoryState(
values: values ?? this.values,
hasLoaded: hasLoaded ?? this.hasLoaded,
);
}
factory StoragePathRepositoryState.fromJson(Map<String, dynamic> json) =>
_$StoragePathRepositoryStateFromJson(json);
Map<String, dynamic> toJson() => _$StoragePathRepositoryStateToJson(this);
}

View File

@@ -0,0 +1,25 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'storage_path_repository_state.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
StoragePathRepositoryState _$StoragePathRepositoryStateFromJson(
Map<String, dynamic> json) =>
StoragePathRepositoryState(
values: (json['values'] as Map<String, dynamic>?)?.map(
(k, e) => MapEntry(
int.parse(k), StoragePath.fromJson(e as Map<String, dynamic>)),
) ??
const {},
hasLoaded: json['hasLoaded'] as bool? ?? false,
);
Map<String, dynamic> _$StoragePathRepositoryStateToJson(
StoragePathRepositoryState instance) =>
<String, dynamic>{
'values': instance.values.map((k, e) => MapEntry(k.toString(), e)),
'hasLoaded': instance.hasLoaded,
};

View File

@@ -0,0 +1,26 @@
import 'package:json_annotation/json_annotation.dart';
import 'package:paperless_api/paperless_api.dart';
import 'package:paperless_mobile/core/repository/state/repository_state.dart';
part 'tag_repository_state.g.dart';
@JsonSerializable()
class TagRepositoryState extends RepositoryState<Map<int, Tag>> {
const TagRepositoryState({
super.values = const {},
super.hasLoaded = false,
});
@override
TagRepositoryState copyWith({Map<int, Tag>? values, bool? hasLoaded}) {
return TagRepositoryState(
values: values ?? this.values,
hasLoaded: hasLoaded ?? this.hasLoaded,
);
}
factory TagRepositoryState.fromJson(Map<String, dynamic> json) =>
_$TagRepositoryStateFromJson(json);
Map<String, dynamic> toJson() => _$TagRepositoryStateToJson(this);
}

View File

@@ -0,0 +1,23 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'tag_repository_state.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
TagRepositoryState _$TagRepositoryStateFromJson(Map<String, dynamic> json) =>
TagRepositoryState(
values: (json['values'] as Map<String, dynamic>?)?.map(
(k, e) =>
MapEntry(int.parse(k), Tag.fromJson(e as Map<String, dynamic>)),
) ??
const {},
hasLoaded: json['hasLoaded'] as bool? ?? false,
);
Map<String, dynamic> _$TagRepositoryStateToJson(TagRepositoryState instance) =>
<String, dynamic>{
'values': instance.values.map((k, e) => MapEntry(k.toString(), e)),
'hasLoaded': instance.hasLoaded,
};

View File

@@ -0,0 +1,16 @@
abstract class RepositoryState<T> {
final T values;
final bool hasLoaded;
const RepositoryState({
required this.values,
this.hasLoaded = false,
});
RepositoryState.loaded(this.values) : hasLoaded = true;
RepositoryState<T> copyWith({
T? values,
bool? hasLoaded,
});
}