import 'package:redux/redux.dart'; import 'package:built_collection/built_collection.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/company/company_actions.dart'; import 'package:invoiceninja_flutter/redux/ui/entity_ui_state.dart'; import 'package:invoiceninja_flutter/redux/purchase_order/purchase_order_actions.dart'; import 'package:invoiceninja_flutter/redux/ui/list_ui_state.dart'; import 'package:invoiceninja_flutter/redux/purchase_order/purchase_order_state.dart'; EntityUIState purchaseOrderUIReducer( PurchaseOrderUIState state, dynamic action) { return state.rebuild((b) => b ..listUIState.replace(purchaseOrderListReducer(state.listUIState, action)) ..editing.replace(editingReducer(state.editing, action)) ..selectedId = selectedIdReducer(state.selectedId, action) ..forceSelected = forceSelectedReducer(state.forceSelected, action) ..tabIndex = tabIndexReducer(state.tabIndex, action)); } final forceSelectedReducer = combineReducers([ TypedReducer((completer, action) => true), TypedReducer((completer, action) => false), TypedReducer((completer, action) => false), TypedReducer((completer, action) => false), TypedReducer( (completer, action) => false), TypedReducer( (completer, action) => false), TypedReducer( (completer, action) => false), TypedReducer( (completer, action) => false), ]); final tabIndexReducer = combineReducers([ TypedReducer((completer, action) { return action.tabIndex; }), TypedReducer((completer, action) { return 0; }), ]); Reducer selectedIdReducer = combineReducers([ TypedReducer((completer, action) => ''), TypedReducer((completer, action) => ''), TypedReducer((selectedId, action) => action.entityType == EntityType.purchaseOrder ? action.entityId : selectedId), TypedReducer( (String selectedId, dynamic action) => action.purchaseOrderId), TypedReducer( (String selectedId, dynamic action) => action.purchaseOrder.id), TypedReducer( (selectedId, action) => action.clearSelection ? '' : selectedId), TypedReducer((selectedId, action) => ''), TypedReducer((selectedId, action) => ''), TypedReducer((selectedId, action) => ''), TypedReducer((selectedId, action) => ''), TypedReducer( (selectedId, action) => ''), TypedReducer( (selectedId, action) => ''), TypedReducer( (selectedId, action) => ''), TypedReducer( (selectedId, action) => ''), TypedReducer( (selectedId, action) => action.clearSelection ? '' : action.entityType == EntityType.purchaseOrder ? action.entityId : selectedId), ]); final editingReducer = combineReducers([ TypedReducer(_updateEditing), TypedReducer(_updateEditing), TypedReducer( (purchaseOrders, action) { return action.purchaseOrders[0]; }), TypedReducer( (purchaseOrders, action) { return action.purchaseOrders[0]; }), TypedReducer( (purchaseOrders, action) { return action.purchaseOrders[0]; }), TypedReducer(_updateEditing), TypedReducer((purchaseOrder, action) { return action.purchaseOrder.rebuild((b) => b..isChanged = true); }), TypedReducer(_clearEditing), ]); InvoiceEntity _clearEditing(InvoiceEntity purchaseOrder, dynamic action) { return InvoiceEntity(); } InvoiceEntity _updateEditing(InvoiceEntity purchaseOrder, dynamic action) { return action.purchaseOrder; } final purchaseOrderListReducer = combineReducers([ TypedReducer(_sortPurchaseOrders), TypedReducer( _filterPurchaseOrdersByState), TypedReducer(_filterPurchaseOrders), TypedReducer( _filterPurchaseOrdersByCustom1), TypedReducer( _filterPurchaseOrdersByCustom2), TypedReducer( _startListMultiselect), TypedReducer( _addToListMultiselect), TypedReducer( _removeFromListMultiselect), TypedReducer( _clearListMultiselect), TypedReducer(_viewPurchaseOrderList), ]); ListUIState _viewPurchaseOrderList( ListUIState purchaseOrderListState, ViewPurchaseOrderList action) { return purchaseOrderListState.rebuild((b) => b ..selectedIds = null ..filter = null ..filterClearedAt = DateTime.now().millisecondsSinceEpoch); } ListUIState _filterPurchaseOrdersByCustom1( ListUIState purchaseOrderListState, FilterPurchaseOrdersByCustom1 action) { if (purchaseOrderListState.custom1Filters.contains(action.value)) { return purchaseOrderListState .rebuild((b) => b..custom1Filters.remove(action.value)); } else { return purchaseOrderListState .rebuild((b) => b..custom1Filters.add(action.value)); } } ListUIState _filterPurchaseOrdersByCustom2( ListUIState purchaseOrderListState, FilterPurchaseOrdersByCustom2 action) { if (purchaseOrderListState.custom2Filters.contains(action.value)) { return purchaseOrderListState .rebuild((b) => b..custom2Filters.remove(action.value)); } else { return purchaseOrderListState .rebuild((b) => b..custom2Filters.add(action.value)); } } ListUIState _filterPurchaseOrdersByState( ListUIState purchaseOrderListState, FilterPurchaseOrdersByState action) { if (purchaseOrderListState.stateFilters.contains(action.state)) { return purchaseOrderListState .rebuild((b) => b..stateFilters.remove(action.state)); } else { return purchaseOrderListState .rebuild((b) => b..stateFilters.add(action.state)); } } ListUIState _filterPurchaseOrders( ListUIState purchaseOrderListState, FilterPurchaseOrders action) { return purchaseOrderListState.rebuild((b) => b ..filter = action.filter ..filterClearedAt = action.filter == null ? DateTime.now().millisecondsSinceEpoch : purchaseOrderListState.filterClearedAt); } ListUIState _sortPurchaseOrders( ListUIState purchaseOrderListState, SortPurchaseOrders action) { return purchaseOrderListState.rebuild((b) => b ..sortAscending = b.sortField != action.field || !b.sortAscending ..sortField = action.field); } ListUIState _startListMultiselect( ListUIState productListState, StartPurchaseOrderMultiselect action) { return productListState.rebuild((b) => b..selectedIds = ListBuilder()); } ListUIState _addToListMultiselect( ListUIState productListState, AddToPurchaseOrderMultiselect action) { return productListState.rebuild((b) => b..selectedIds.add(action.entity.id)); } ListUIState _removeFromListMultiselect( ListUIState productListState, RemoveFromPurchaseOrderMultiselect action) { return productListState .rebuild((b) => b..selectedIds.remove(action.entity.id)); } ListUIState _clearListMultiselect( ListUIState productListState, ClearPurchaseOrderMultiselect action) { return productListState.rebuild((b) => b..selectedIds = null); } final purchaseOrdersReducer = combineReducers([ TypedReducer( _updatePurchaseOrder), TypedReducer(_addPurchaseOrder), TypedReducer( _setLoadedPurchaseOrders), TypedReducer( _setLoadedPurchaseOrder), TypedReducer(_setLoadedCompany), TypedReducer( _archivePurchaseOrderSuccess), TypedReducer( _deletePurchaseOrderSuccess), TypedReducer( _restorePurchaseOrderSuccess), ]); PurchaseOrderState _archivePurchaseOrderSuccess( PurchaseOrderState purchaseOrderState, ArchivePurchaseOrdersSuccess action) { return purchaseOrderState.rebuild((b) { for (final purchaseOrder in action.purchaseOrders) { b.map[purchaseOrder.id] = purchaseOrder; } }); } PurchaseOrderState _deletePurchaseOrderSuccess( PurchaseOrderState purchaseOrderState, DeletePurchaseOrdersSuccess action) { return purchaseOrderState.rebuild((b) { for (final purchaseOrder in action.purchaseOrders) { b.map[purchaseOrder.id] = purchaseOrder; } }); } PurchaseOrderState _restorePurchaseOrderSuccess( PurchaseOrderState purchaseOrderState, RestorePurchaseOrdersSuccess action) { return purchaseOrderState.rebuild((b) { for (final purchaseOrder in action.purchaseOrders) { b.map[purchaseOrder.id] = purchaseOrder; } }); } PurchaseOrderState _addPurchaseOrder( PurchaseOrderState purchaseOrderState, AddPurchaseOrderSuccess action) { return purchaseOrderState.rebuild((b) => b ..map[action.purchaseOrder.id] = action.purchaseOrder ..list.add(action.purchaseOrder.id)); } PurchaseOrderState _updatePurchaseOrder( PurchaseOrderState purchaseOrderState, SavePurchaseOrderSuccess action) { return purchaseOrderState .rebuild((b) => b..map[action.purchaseOrder.id] = action.purchaseOrder); } PurchaseOrderState _setLoadedPurchaseOrder( PurchaseOrderState purchaseOrderState, LoadPurchaseOrderSuccess action) { return purchaseOrderState .rebuild((b) => b..map[action.purchaseOrder.id] = action.purchaseOrder); } PurchaseOrderState _setLoadedPurchaseOrders( PurchaseOrderState purchaseOrderState, LoadPurchaseOrdersSuccess action) => purchaseOrderState.loadPurchaseOrders(action.purchaseOrders); PurchaseOrderState _setLoadedCompany( PurchaseOrderState purchaseOrderState, LoadCompanySuccess action) { final company = action.userCompany.company; return purchaseOrderState.loadPurchaseOrders(company.purchaseOrders); }