From b1364d005a790ef61d10d0b50de6dcfe296a1dc0 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 3 Jun 2018 00:32:57 -0700 Subject: [PATCH] Slide to delete --- lib/main.dart | 4 +-- lib/redux/product/product_actions.dart | 12 +++---- lib/redux/product/product_middleware.dart | 23 +++++++++---- lib/redux/product/product_reducer.dart | 41 +++++++++++++++++++++-- 4 files changed, 64 insertions(+), 16 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 45d13bd8d..7e5e530a7 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -15,7 +15,7 @@ import 'package:invoiceninja/redux/dashboard/dashboard_middleware.dart'; import 'package:invoiceninja/redux/product/product_actions.dart'; import 'package:invoiceninja/redux/product/product_middleware.dart'; import 'package:invoiceninja/utils/localization.dart'; -import 'package:redux_logging/redux_logging.dart'; +//import 'package:redux_logging/redux_logging.dart'; void main() { final store = Store( @@ -26,7 +26,7 @@ void main() { ..addAll(createStoreDashboardMiddleware()) ..addAll(createStoreProductsMiddleware()) ..addAll([ - LoggingMiddleware.printer(), + //LoggingMiddleware.printer(), ]) ); diff --git a/lib/redux/product/product_actions.dart b/lib/redux/product/product_actions.dart index a2ac07e79..db86ba7c6 100644 --- a/lib/redux/product/product_actions.dart +++ b/lib/redux/product/product_actions.dart @@ -57,8 +57,8 @@ class ArchiveProductSuccess { ArchiveProductSuccess(this.product); } class ArchiveProductFailure { - final int productId; - ArchiveProductFailure(this.productId); + final ProductEntity product; + ArchiveProductFailure(this.product); } class DeleteProductRequest { @@ -72,8 +72,8 @@ class DeleteProductSuccess { DeleteProductSuccess(this.product); } class DeleteProductFailure { - final int productId; - DeleteProductFailure(this.productId); + final ProductEntity product; + DeleteProductFailure(this.product); } class RestoreProductRequest { @@ -86,8 +86,8 @@ class RestoreProductSuccess { RestoreProductSuccess(this.product); } class RestoreProductFailure { - final int productId; - RestoreProductFailure(this.productId); + final ProductEntity product; + RestoreProductFailure(this.product); } class AddProductSuccess { diff --git a/lib/redux/product/product_middleware.dart b/lib/redux/product/product_middleware.dart index 1873cd457..abf564875 100644 --- a/lib/redux/product/product_middleware.dart +++ b/lib/redux/product/product_middleware.dart @@ -31,15 +31,15 @@ List> createStoreProductsMiddleware([ Middleware _archiveProduct(ProductsRepository repository) { return (Store store, action, NextDispatcher next) { - var product = store.state.productState().map[action.productId]; + var origProduct = store.state.productState().map[action.productId]; repository .saveData(store.state.selectedCompany(), store.state.authState, - product, EntityAction.archive) + origProduct, EntityAction.archive) .then((product) { store.dispatch(ArchiveProductSuccess(product)); }).catchError((error) { print(error); - store.dispatch(ArchiveProductFailure(action.productId)); + store.dispatch(ArchiveProductFailure(origProduct)); }); next(action); @@ -48,15 +48,15 @@ Middleware _archiveProduct(ProductsRepository repository) { Middleware _deleteProduct(ProductsRepository repository) { return (Store store, action, NextDispatcher next) { - var product = store.state.productState().map[action.productId]; + var origProduct = store.state.productState().map[action.productId]; repository .saveData(store.state.selectedCompany(), store.state.authState, - product, EntityAction.delete) + origProduct, EntityAction.delete) .then((product) { store.dispatch(DeleteProductSuccess(product)); }).catchError((error) { print(error); - store.dispatch(DeleteProductFailure(action.productId)); + store.dispatch(DeleteProductFailure(origProduct)); }); next(action); @@ -65,6 +65,17 @@ Middleware _deleteProduct(ProductsRepository repository) { Middleware _restoreProduct(ProductsRepository repository) { return (Store store, action, NextDispatcher next) { + var origProduct = store.state.productState().map[action.productId]; + repository + .saveData(store.state.selectedCompany(), store.state.authState, + origProduct, EntityAction.restore) + .then((product) { + store.dispatch(RestoreProductSuccess(product)); + }).catchError((error) { + print(error); + store.dispatch(RestoreProductFailure(origProduct)); + }); + next(action); }; } diff --git a/lib/redux/product/product_reducer.dart b/lib/redux/product/product_reducer.dart index 0ed891d1d..aebf47eff 100644 --- a/lib/redux/product/product_reducer.dart +++ b/lib/redux/product/product_reducer.dart @@ -52,8 +52,13 @@ final productsReducer = combineReducers([ TypedReducer(_archiveProductSuccess), TypedReducer(_archiveProductFailure), + TypedReducer(_deleteProductRequest), TypedReducer(_deleteProductSuccess), + TypedReducer(_deleteProductFailure), + + TypedReducer(_restoreProductRequest), TypedReducer(_restoreProductSuccess), + TypedReducer(_restoreProductFailure), ]); ProductState _archiveProductRequest(ProductState productState, ArchiveProductRequest action) { @@ -73,8 +78,16 @@ ProductState _archiveProductSuccess(ProductState productState, ArchiveProductSuc ProductState _archiveProductFailure(ProductState productState, ArchiveProductFailure action) { return productState.rebuild((b) => b - ..map[action.productId].rebuild((c) => c - ..archivedAt = null + ..map[action.product.id] = action.product + ); +} + +ProductState _deleteProductRequest(ProductState productState, DeleteProductRequest action) { + var product = productState.map[action.productId]; + return productState.rebuild((b) => b + ..map[action.productId] = product.rebuild((b) => b + ..archivedAt = DateTime.now().millisecondsSinceEpoch + ..isDeleted = true ) ); } @@ -85,12 +98,36 @@ ProductState _deleteProductSuccess(ProductState productState, DeleteProductSucce ); } +ProductState _deleteProductFailure(ProductState productState, DeleteProductFailure action) { + return productState.rebuild((b) => b + ..map[action.product.id] = action.product + ); +} + + +ProductState _restoreProductRequest(ProductState productState, RestoreProductRequest action) { + var product = productState.map[action.productId]; + return productState.rebuild((b) => b + ..map[action.productId] = product.rebuild((b) => b + ..archivedAt = null + ..isDeleted = false + ) + ); +} + ProductState _restoreProductSuccess(ProductState productState, RestoreProductSuccess action) { return productState.rebuild((b) => b ..map[action.product.id] = action.product ); } +ProductState _restoreProductFailure(ProductState productState, RestoreProductFailure action) { + return productState.rebuild((b) => b + ..map[action.product.id] = action.product + ); +} + + ProductState _addProduct( ProductState productState, AddProductSuccess action) { return productState.rebuild((b) => b