From d6262caeae9db665352f84adf752d225789173f7 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 6 Aug 2018 22:49:05 +0300 Subject: [PATCH] Support cloning --- lib/ui/client/view/client_view_vm.dart | 6 ++-- lib/ui/invoice/view/invoice_view.dart | 5 +++ lib/ui/invoice/view/invoice_view_vm.dart | 42 +++++++++++++----------- lib/ui/product/edit/product_edit_vm.dart | 6 ++-- 4 files changed, 33 insertions(+), 26 deletions(-) diff --git a/lib/ui/client/view/client_view_vm.dart b/lib/ui/client/view/client_view_vm.dart index 0f8d544e4..d4568c52d 100644 --- a/lib/ui/client/view/client_view_vm.dart +++ b/lib/ui/client/view/client_view_vm.dart @@ -99,7 +99,7 @@ class ClientViewVM { store.dispatch(UpdateCurrentRoute(ClientScreen.route)), onActionSelected: (BuildContext context, EntityAction action) { final Completer completer = Completer(); - var message = ''; + String message; switch (action) { case EntityAction.archive: store.dispatch(ArchiveClientRequest(completer, client.id)); @@ -114,10 +114,10 @@ class ClientViewVM { message = AppLocalization.of(context).successfullyRestoredClient; break; } - return completer.future.then((_) { + completer.future.then((_) { if ([EntityAction.archive, EntityAction.delete].contains(action)) { Navigator.of(context).pop(message); - } else { + } else if (message != null){ Scaffold.of(context).showSnackBar(SnackBar( content: SnackBarRow( message: message, diff --git a/lib/ui/invoice/view/invoice_view.dart b/lib/ui/invoice/view/invoice_view.dart index 22b69f150..9edd158bd 100644 --- a/lib/ui/invoice/view/invoice_view.dart +++ b/lib/ui/invoice/view/invoice_view.dart @@ -273,6 +273,11 @@ class _CustomAppBar extends StatelessWidget implements PreferredSizeWidget { ), ActionMenuButton( customActions: [ + ActionMenuChoice( + label: localization.clone, + icon: Icons.control_point_duplicate, + action: EntityAction.clone, + ), !invoice.isPublic ? ActionMenuChoice( action: EntityAction.markSent, diff --git a/lib/ui/invoice/view/invoice_view_vm.dart b/lib/ui/invoice/view/invoice_view_vm.dart index 55911e28c..f55f02acf 100644 --- a/lib/ui/invoice/view/invoice_view_vm.dart +++ b/lib/ui/invoice/view/invoice_view_vm.dart @@ -17,6 +17,7 @@ import 'package:url_launcher/url_launcher.dart'; class InvoiceViewScreen extends StatelessWidget { static const String route = '/invoice/view'; + const InvoiceViewScreen({Key key}) : super(key: key); @override @@ -69,7 +70,7 @@ class InvoiceViewVM { store.dispatch(LoadInvoice(completer: completer, invoiceId: invoice.id)); return completer.future.then((_) { Scaffold.of(context).showSnackBar(SnackBar( - content: SnackBarRow( + content: SnackBarRow( message: AppLocalization.of(context).refreshComplete, ))); }); @@ -152,26 +153,27 @@ class InvoiceViewVM { store.dispatch(RestoreInvoiceRequest(completer, invoice.id)); message = AppLocalization.of(context).successfullyRestoredInvoice; break; + case EntityAction.clone: + store.dispatch( + EditInvoice(context: context, invoice: invoice.clone)); + break; } - if (message != null) { - return completer.future.then((_) { - if ([EntityAction.archive, EntityAction.delete] - .contains(action)) { - Navigator.of(context).pop(message); - } else { - Scaffold.of(context).showSnackBar(SnackBar( - content: SnackBarRow( - message: message, - ))); - } - }).catchError((Object error) { - showDialog( - context: context, - builder: (BuildContext context) { - return ErrorDialog(error); - }); - }); - } + completer.future.then((_) { + if ([EntityAction.archive, EntityAction.delete].contains(action)) { + Navigator.of(context).pop(message); + } else if (message != null) { + Scaffold.of(context).showSnackBar(SnackBar( + content: SnackBarRow( + message: message, + ))); + } + }).catchError((Object error) { + showDialog( + context: context, + builder: (BuildContext context) { + return ErrorDialog(error); + }); + }); }); } } diff --git a/lib/ui/product/edit/product_edit_vm.dart b/lib/ui/product/edit/product_edit_vm.dart index 1978f760a..678e5ad2c 100644 --- a/lib/ui/product/edit/product_edit_vm.dart +++ b/lib/ui/product/edit/product_edit_vm.dart @@ -92,7 +92,7 @@ class ProductEditVM { }, onActionSelected: (BuildContext context, EntityAction action) { final Completer completer = Completer(); - var message = ''; + String message; switch (action) { case EntityAction.archive: store.dispatch(ArchiveProductRequest(completer, product.id)); @@ -110,10 +110,10 @@ class ProductEditVM { store.dispatch(UpdateProduct(product.clone)); break; } - return completer.future.then((_) { + completer.future.then((_) { if ([EntityAction.archive, EntityAction.delete].contains(action)) { Navigator.of(context).pop(message); - } else if (message.isNotEmpty) { + } else if (message != null) { Scaffold.of(context).showSnackBar(SnackBar( content: SnackBarRow( message: message,