Client/product documents

This commit is contained in:
Hillel Coren 2020-08-05 22:04:41 +03:00
parent 6f15c39ec5
commit 38b98b40a0
2 changed files with 39 additions and 0 deletions

View File

@ -51,6 +51,9 @@ class UpdateProduct implements PersistUI {
final ProductEntity product;
}
class LoadProductRequest implements StartLoading {}
class LoadProduct {
LoadProduct({this.completer, this.productId});

View File

@ -1,3 +1,4 @@
import 'package:invoiceninja_flutter/.env.dart';
import 'package:flutter/material.dart';
import 'package:invoiceninja_flutter/data/models/models.dart';
import 'package:invoiceninja_flutter/redux/app/app_actions.dart';
@ -19,6 +20,7 @@ List<Middleware<AppState>> createStoreProductsMiddleware([
final viewProduct = _viewProduct();
final editProduct = _editProduct();
final loadProducts = _loadProducts(repository);
final loadProduct = _loadProduct(repository);
final saveProduct = _saveProduct(repository);
final archiveProduct = _archiveProduct(repository);
final deleteProduct = _deleteProduct(repository);
@ -30,6 +32,7 @@ List<Middleware<AppState>> createStoreProductsMiddleware([
TypedMiddleware<AppState, ViewProduct>(viewProduct),
TypedMiddleware<AppState, EditProduct>(editProduct),
TypedMiddleware<AppState, LoadProducts>(loadProducts),
TypedMiddleware<AppState, LoadProduct>(loadProduct),
TypedMiddleware<AppState, SaveProductRequest>(saveProduct),
TypedMiddleware<AppState, ArchiveProductsRequest>(archiveProduct),
TypedMiddleware<AppState, DeleteProductsRequest>(deleteProduct),
@ -186,6 +189,39 @@ Middleware<AppState> _saveProduct(ProductRepository repository) {
};
}
Middleware<AppState> _loadProduct(ProductRepository repository) {
return (Store<AppState> store, dynamic dynamicAction, NextDispatcher next) {
final action = dynamicAction as LoadProduct;
final AppState state = store.state;
if (state.isLoading || Config.DEMO_MODE) {
next(action);
return;
}
store.dispatch(LoadProductRequest());
repository
.loadItem(store.state.credentials, action.productId)
.then((product) {
store.dispatch(LoadProductSuccess(product));
if (action.completer != null) {
action.completer.complete(null);
}
}).catchError((Object error) {
print(error);
store.dispatch(LoadProductFailure(error));
if (action.completer != null) {
action.completer.completeError(error);
}
});
next(action);
};
}
Middleware<AppState> _loadProducts(ProductRepository repository) {
return (Store<AppState> store, dynamic dynamicAction, NextDispatcher next) {
final action = dynamicAction as LoadProducts;