59 lines
2.2 KiB
Dart
59 lines
2.2 KiB
Dart
import 'package:redux/redux.dart';
|
|
import 'package:invoiceninja/redux/product/product_actions.dart';
|
|
import 'package:invoiceninja/data/models/models.dart';
|
|
import 'package:invoiceninja/redux/product/product_selectors.dart';
|
|
import 'package:invoiceninja/redux/product/product_state.dart';
|
|
|
|
final productsReducer = combineReducers<ProductState>([
|
|
/*
|
|
TypedReducer<List<Product>, AddProductAction>(_addProduct),
|
|
TypedReducer<List<Product>, DeleteProductAction>(_deleteProduct),
|
|
TypedReducer<List<Product>, UpdateProductAction>(_updateProduct),
|
|
TypedReducer<List<Product>, ClearCompletedAction>(_clearCompleted),
|
|
TypedReducer<List<Product>, ToggleAllAction>(_toggleAll),
|
|
*/
|
|
TypedReducer<ProductState, ProductsLoadedAction>(_setLoadedProducts),
|
|
TypedReducer<ProductState, ProductsNotLoadedAction>(_setNoProducts),
|
|
]);
|
|
|
|
/*
|
|
List<ProductEntity> _addProduct(List<ProductEntity> products, AddProductAction action) {
|
|
return List.from(products)..add(action.product);
|
|
}
|
|
|
|
List<ProductEntity> _deleteProduct(List<ProductEntity> products, DeleteProductAction action) {
|
|
return products.where((product) => product.id != action.id).toList();
|
|
}
|
|
|
|
List<ProductEntity> _updateProduct(List<ProductEntity> products, UpdateProductAction action) {
|
|
return products
|
|
.map((product) => product.id == action.id ? action.updatedProduct : product)
|
|
.toList();
|
|
}
|
|
|
|
List<ProductEntity> _clearCompleted(List<Product> products, ClearCompletedAction action) {
|
|
return products.where((product) => !product.complete).toList();
|
|
}
|
|
|
|
List<ProductEntity> _toggleAll(List<ProductEntity> products, ToggleAllAction action) {
|
|
final allComplete = allCompleteSelector(products);
|
|
|
|
return products.map((product) => product.copyWith(complete: !allComplete)).toList();
|
|
}
|
|
*/
|
|
|
|
ProductState _setLoadedProducts(ProductState productState, ProductsLoadedAction action) {
|
|
return ProductState().copyWith(
|
|
lastUpdated: DateTime.now().millisecondsSinceEpoch,
|
|
map: Map.fromIterable(action.products,
|
|
key: (item) => item.id,
|
|
value: (item) => item
|
|
),
|
|
list: action.products.map((product) => product.id).toList(),
|
|
);
|
|
}
|
|
|
|
ProductState _setNoProducts(ProductState productState, ProductsNotLoadedAction action) {
|
|
return ProductState();
|
|
}
|