Slide to delete

This commit is contained in:
unknown 2018-06-03 00:32:57 -07:00
parent a3cd75fa99
commit b1364d005a
4 changed files with 64 additions and 16 deletions

View File

@ -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_actions.dart';
import 'package:invoiceninja/redux/product/product_middleware.dart'; import 'package:invoiceninja/redux/product/product_middleware.dart';
import 'package:invoiceninja/utils/localization.dart'; import 'package:invoiceninja/utils/localization.dart';
import 'package:redux_logging/redux_logging.dart'; //import 'package:redux_logging/redux_logging.dart';
void main() { void main() {
final store = Store<AppState>( final store = Store<AppState>(
@ -26,7 +26,7 @@ void main() {
..addAll(createStoreDashboardMiddleware()) ..addAll(createStoreDashboardMiddleware())
..addAll(createStoreProductsMiddleware()) ..addAll(createStoreProductsMiddleware())
..addAll([ ..addAll([
LoggingMiddleware.printer(), //LoggingMiddleware.printer(),
]) ])
); );

View File

@ -57,8 +57,8 @@ class ArchiveProductSuccess {
ArchiveProductSuccess(this.product); ArchiveProductSuccess(this.product);
} }
class ArchiveProductFailure { class ArchiveProductFailure {
final int productId; final ProductEntity product;
ArchiveProductFailure(this.productId); ArchiveProductFailure(this.product);
} }
class DeleteProductRequest { class DeleteProductRequest {
@ -72,8 +72,8 @@ class DeleteProductSuccess {
DeleteProductSuccess(this.product); DeleteProductSuccess(this.product);
} }
class DeleteProductFailure { class DeleteProductFailure {
final int productId; final ProductEntity product;
DeleteProductFailure(this.productId); DeleteProductFailure(this.product);
} }
class RestoreProductRequest { class RestoreProductRequest {
@ -86,8 +86,8 @@ class RestoreProductSuccess {
RestoreProductSuccess(this.product); RestoreProductSuccess(this.product);
} }
class RestoreProductFailure { class RestoreProductFailure {
final int productId; final ProductEntity product;
RestoreProductFailure(this.productId); RestoreProductFailure(this.product);
} }
class AddProductSuccess { class AddProductSuccess {

View File

@ -31,15 +31,15 @@ List<Middleware<AppState>> createStoreProductsMiddleware([
Middleware<AppState> _archiveProduct(ProductsRepository repository) { Middleware<AppState> _archiveProduct(ProductsRepository repository) {
return (Store<AppState> store, action, NextDispatcher next) { return (Store<AppState> store, action, NextDispatcher next) {
var product = store.state.productState().map[action.productId]; var origProduct = store.state.productState().map[action.productId];
repository repository
.saveData(store.state.selectedCompany(), store.state.authState, .saveData(store.state.selectedCompany(), store.state.authState,
product, EntityAction.archive) origProduct, EntityAction.archive)
.then((product) { .then((product) {
store.dispatch(ArchiveProductSuccess(product)); store.dispatch(ArchiveProductSuccess(product));
}).catchError((error) { }).catchError((error) {
print(error); print(error);
store.dispatch(ArchiveProductFailure(action.productId)); store.dispatch(ArchiveProductFailure(origProduct));
}); });
next(action); next(action);
@ -48,15 +48,15 @@ Middleware<AppState> _archiveProduct(ProductsRepository repository) {
Middleware<AppState> _deleteProduct(ProductsRepository repository) { Middleware<AppState> _deleteProduct(ProductsRepository repository) {
return (Store<AppState> store, action, NextDispatcher next) { return (Store<AppState> store, action, NextDispatcher next) {
var product = store.state.productState().map[action.productId]; var origProduct = store.state.productState().map[action.productId];
repository repository
.saveData(store.state.selectedCompany(), store.state.authState, .saveData(store.state.selectedCompany(), store.state.authState,
product, EntityAction.delete) origProduct, EntityAction.delete)
.then((product) { .then((product) {
store.dispatch(DeleteProductSuccess(product)); store.dispatch(DeleteProductSuccess(product));
}).catchError((error) { }).catchError((error) {
print(error); print(error);
store.dispatch(DeleteProductFailure(action.productId)); store.dispatch(DeleteProductFailure(origProduct));
}); });
next(action); next(action);
@ -65,6 +65,17 @@ Middleware<AppState> _deleteProduct(ProductsRepository repository) {
Middleware<AppState> _restoreProduct(ProductsRepository repository) { Middleware<AppState> _restoreProduct(ProductsRepository repository) {
return (Store<AppState> store, action, NextDispatcher next) { return (Store<AppState> 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); next(action);
}; };
} }

View File

@ -52,8 +52,13 @@ final productsReducer = combineReducers<ProductState>([
TypedReducer<ProductState, ArchiveProductSuccess>(_archiveProductSuccess), TypedReducer<ProductState, ArchiveProductSuccess>(_archiveProductSuccess),
TypedReducer<ProductState, ArchiveProductFailure>(_archiveProductFailure), TypedReducer<ProductState, ArchiveProductFailure>(_archiveProductFailure),
TypedReducer<ProductState, DeleteProductRequest>(_deleteProductRequest),
TypedReducer<ProductState, DeleteProductSuccess>(_deleteProductSuccess), TypedReducer<ProductState, DeleteProductSuccess>(_deleteProductSuccess),
TypedReducer<ProductState, DeleteProductFailure>(_deleteProductFailure),
TypedReducer<ProductState, RestoreProductRequest>(_restoreProductRequest),
TypedReducer<ProductState, RestoreProductSuccess>(_restoreProductSuccess), TypedReducer<ProductState, RestoreProductSuccess>(_restoreProductSuccess),
TypedReducer<ProductState, RestoreProductFailure>(_restoreProductFailure),
]); ]);
ProductState _archiveProductRequest(ProductState productState, ArchiveProductRequest action) { ProductState _archiveProductRequest(ProductState productState, ArchiveProductRequest action) {
@ -73,8 +78,16 @@ ProductState _archiveProductSuccess(ProductState productState, ArchiveProductSuc
ProductState _archiveProductFailure(ProductState productState, ArchiveProductFailure action) { ProductState _archiveProductFailure(ProductState productState, ArchiveProductFailure action) {
return productState.rebuild((b) => b return productState.rebuild((b) => b
..map[action.productId].rebuild((c) => c ..map[action.product.id] = action.product
..archivedAt = null );
}
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) { ProductState _restoreProductSuccess(ProductState productState, RestoreProductSuccess action) {
return productState.rebuild((b) => b return productState.rebuild((b) => b
..map[action.product.id] = action.product ..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 _addProduct(
ProductState productState, AddProductSuccess action) { ProductState productState, AddProductSuccess action) {
return productState.rebuild((b) => b return productState.rebuild((b) => b