invoice/lib/redux/document/document_actions.dart

359 lines
8.6 KiB
Dart

// Dart imports:
import 'dart:async';
// Flutter imports:
import 'package:flutter/widgets.dart';
// Package imports:
import 'package:built_collection/built_collection.dart';
import 'package:flutter_redux/flutter_redux.dart';
// Project imports:
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
import 'package:invoiceninja_flutter/redux/app/app_state.dart';
import 'package:invoiceninja_flutter/ui/app/entities/entity_actions_dialog.dart';
import 'package:invoiceninja_flutter/utils/completers.dart';
import 'package:invoiceninja_flutter/utils/localization.dart';
class ViewDocumentList implements PersistUI {
ViewDocumentList({this.force = false});
final bool force;
}
class ViewDocument implements PersistUI {
ViewDocument({this.documentId, this.force});
final String documentId;
final bool force;
}
class EditDocument implements PersistUI {
EditDocument({
this.document,
this.completer,
});
final DocumentEntity document;
final Completer completer;
}
class UpdateDocument implements PersistUI {
UpdateDocument(this.document);
final DocumentEntity document;
}
class LoadDocument {
LoadDocument({this.completer, this.documentId});
final Completer completer;
final String documentId;
}
class LoadDocumentActivity {
LoadDocumentActivity({this.completer, this.documentId});
final Completer completer;
final String documentId;
}
class LoadDocuments {
LoadDocuments({this.completer});
final Completer completer;
}
class LoadDocumentRequest implements StartLoading {}
class LoadDocumentFailure implements StopLoading {
LoadDocumentFailure(this.error);
final dynamic error;
@override
String toString() {
return 'LoadDocumentFailure{error: $error}';
}
}
class LoadDocumentSuccess implements StopLoading, PersistData {
LoadDocumentSuccess(this.document);
final DocumentEntity document;
@override
String toString() {
return 'LoadDocumentSuccess{document: $document}';
}
}
class LoadDocumentsRequest implements StartLoading {}
class LoadDocumentsFailure implements StopLoading {
LoadDocumentsFailure(this.error);
final dynamic error;
@override
String toString() {
return 'LoadDocumentsFailure{error: $error}';
}
}
class LoadDocumentsSuccess implements StopLoading {
LoadDocumentsSuccess(this.documents);
final BuiltList<DocumentEntity> documents;
@override
String toString() {
return 'LoadDocumentsSuccess{documents: $documents}';
}
}
class SaveDocumentRequest implements StartSaving {
SaveDocumentRequest({
@required this.completer,
@required this.entity,
});
final Completer completer;
final DocumentEntity entity;
}
class SaveDocumentSuccess implements StopSaving, PersistData, PersistUI {
SaveDocumentSuccess(this.document);
final DocumentEntity document;
}
class AddDocumentSuccess implements StopSaving, PersistData, PersistUI {}
class SaveDocumentFailure implements StopSaving {
SaveDocumentFailure(this.error);
final Object error;
}
class DownloadDocumentsRequest implements StartSaving {
DownloadDocumentsRequest({this.completer, this.documentIds});
final Completer completer;
final List<String> documentIds;
}
class DownloadDocumentsSuccess implements StopSaving {}
class DownloadDocumentsFailure implements StopSaving {
DownloadDocumentsFailure(this.error);
final Object error;
}
class ArchiveDocumentRequest implements StartSaving {
ArchiveDocumentRequest(this.completer, this.documentIds);
final Completer completer;
final List<String> documentIds;
}
class ArchiveDocumentSuccess implements StopSaving, PersistData {
ArchiveDocumentSuccess(this.documents);
final List<DocumentEntity> documents;
}
class ArchiveDocumentFailure implements StopSaving {
ArchiveDocumentFailure(this.documents);
final List<DocumentEntity> documents;
}
class DeleteDocumentRequest implements StartSaving {
DeleteDocumentRequest({
@required this.completer,
@required this.documentIds,
@required this.password,
@required this.idToken,
});
final Completer completer;
final List<String> documentIds;
final String password;
final String idToken;
}
class DeleteDocumentSuccess implements StopSaving, PersistData {
DeleteDocumentSuccess({this.documentId});
final String documentId;
//DeleteDocumentSuccess(this.documents);
//final List<DocumentEntity> documents;
}
class DeleteDocumentFailure implements StopSaving {
//DeleteDocumentFailure(this.documents);
//final List<DocumentEntity> documents;
}
class RestoreDocumentRequest implements StartSaving {
RestoreDocumentRequest(this.completer, this.documentIds);
final Completer completer;
final List<String> documentIds;
}
class RestoreDocumentSuccess implements StopSaving, PersistData {
RestoreDocumentSuccess(this.documents);
final List<DocumentEntity> documents;
}
class RestoreDocumentFailure implements StopSaving {
RestoreDocumentFailure(this.documents);
final List<DocumentEntity> documents;
}
class FilterDocuments implements PersistUI {
FilterDocuments(this.filter);
final String filter;
}
class SortDocuments implements PersistUI, PersistPrefs {
SortDocuments(this.field);
final String field;
}
class FilterDocumentsByState implements PersistUI {
FilterDocumentsByState(this.state);
final EntityState state;
}
class FilterDocumentsByCustom1 implements PersistUI {
FilterDocumentsByCustom1(this.value);
final String value;
}
class FilterDocumentsByCustom2 implements PersistUI {
FilterDocumentsByCustom2(this.value);
final String value;
}
class FilterDocumentsByCustom3 implements PersistUI {
FilterDocumentsByCustom3(this.value);
final String value;
}
class FilterDocumentsByCustom4 implements PersistUI {
FilterDocumentsByCustom4(this.value);
final String value;
}
void handleDocumentAction(
BuildContext context, List<BaseEntity> documents, EntityAction action) {
if (documents.isEmpty) {
return;
}
final store = StoreProvider.of<AppState>(context);
final localization = AppLocalization.of(context);
final document = documents.first;
final documentIds = documents.map((document) => document.id).toList();
switch (action) {
case EntityAction.edit:
editEntity(entity: document);
break;
case EntityAction.restore:
final message = documentIds.length > 1
? localization.restoredDocuments
.replaceFirst(':value', ':count')
.replaceFirst(':count', documentIds.length.toString())
: localization.restoredDocument;
store.dispatch(RestoreDocumentRequest(
snackBarCompleter<Null>(context, message), documentIds));
break;
case EntityAction.archive:
final message = documentIds.length > 1
? localization.archivedDocuments
.replaceFirst(':value', ':count')
.replaceFirst(':count', documentIds.length.toString())
: localization.archivedDocument;
store.dispatch(ArchiveDocumentRequest(
snackBarCompleter<Null>(context, message), documentIds));
break;
/*
case EntityAction.delete:
final message = documentIds.length > 1
? localization.deletedDocuments
.replaceFirst(':value', ':count').replaceFirst(':count', documentIds.length.toString())
: localization.deletedDocument;
store.dispatch(DeleteDocumentRequest(
completer: snackBarCompleter<Null>(context, message),
documentIds: documentIds,
));
break;
*/
case EntityAction.toggleMultiselect:
if (!store.state.documentListState.isInMultiselect()) {
store.dispatch(StartDocumentMultiselect());
}
if (documents.isEmpty) {
break;
}
for (final document in documents) {
if (!store.state.documentListState.isSelected(document.id)) {
store.dispatch(AddToDocumentMultiselect(entity: document));
} else {
store.dispatch(RemoveFromDocumentMultiselect(entity: document));
}
}
break;
case EntityAction.more:
showEntityActionsDialog(
entities: [document],
);
break;
case EntityAction.documents:
store.dispatch(
DownloadDocumentsRequest(
documentIds: documentIds,
completer: snackBarCompleter<Null>(
context,
localization.exportedData,
),
),
);
break;
}
}
class StartDocumentMultiselect {}
class AddToDocumentMultiselect {
AddToDocumentMultiselect({@required this.entity});
final BaseEntity entity;
}
class RemoveFromDocumentMultiselect {
RemoveFromDocumentMultiselect({@required this.entity});
final BaseEntity entity;
}
class ClearDocumentMultiselect {}