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_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<AppState>(
@ -26,7 +26,7 @@ void main() {
..addAll(createStoreDashboardMiddleware())
..addAll(createStoreProductsMiddleware())
..addAll([
LoggingMiddleware.printer(),
//LoggingMiddleware.printer(),
])
);

View File

@ -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 {

View File

@ -31,15 +31,15 @@ List<Middleware<AppState>> createStoreProductsMiddleware([
Middleware<AppState> _archiveProduct(ProductsRepository repository) {
return (Store<AppState> 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<AppState> _archiveProduct(ProductsRepository repository) {
Middleware<AppState> _deleteProduct(ProductsRepository repository) {
return (Store<AppState> 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<AppState> _deleteProduct(ProductsRepository repository) {
Middleware<AppState> _restoreProduct(ProductsRepository repository) {
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);
};
}

View File

@ -52,8 +52,13 @@ final productsReducer = combineReducers<ProductState>([
TypedReducer<ProductState, ArchiveProductSuccess>(_archiveProductSuccess),
TypedReducer<ProductState, ArchiveProductFailure>(_archiveProductFailure),
TypedReducer<ProductState, DeleteProductRequest>(_deleteProductRequest),
TypedReducer<ProductState, DeleteProductSuccess>(_deleteProductSuccess),
TypedReducer<ProductState, DeleteProductFailure>(_deleteProductFailure),
TypedReducer<ProductState, RestoreProductRequest>(_restoreProductRequest),
TypedReducer<ProductState, RestoreProductSuccess>(_restoreProductSuccess),
TypedReducer<ProductState, RestoreProductFailure>(_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