// Package imports: import 'package:built_collection/built_collection.dart'; import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:redux/redux.dart'; // Project imports: import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/company/company_actions.dart'; import 'package:invoiceninja_flutter/redux/purchase_order/purchase_order_actions.dart'; import 'package:invoiceninja_flutter/redux/purchase_order/purchase_order_state.dart'; import 'package:invoiceninja_flutter/redux/ui/entity_ui_state.dart'; import 'package:invoiceninja_flutter/redux/ui/list_ui_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)!) ..editingItemIndex = editingItemReducer(state.editingItemIndex, action) ..selectedId = selectedIdReducer(state.selectedId, action) ..forceSelected = forceSelectedReducer(state.forceSelected, action) ..tabIndex = tabIndexReducer(state.tabIndex, action) ..historyActivityId = historyActivityIdReducer(state.historyActivityId, 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), TypedReducer( (completer, action) => false), ]); final int? Function(int, dynamic) tabIndexReducer = combineReducers([ TypedReducer((completer, action) { return action.tabIndex; }), TypedReducer((completer, action) { return 0; }), ]); final historyActivityIdReducer = combineReducers([ TypedReducer( (index, action) => action.activityId), ]); final editingItemReducer = combineReducers([ TypedReducer( (index, action) => action.purchaseOrderItemIndex), TypedReducer( (index, action) => action.itemIndex), ]); /* Reducer dropdownFilterReducer = combineReducers([ TypedReducer( filterpurchaseOrderDropdownReducer), ]); String filterpurchaseOrderDropdownReducer( String dropdownFilter, FilterPurchaseOrderDropdown action) { return action.filter; } */ Reducer selectedIdReducer = combineReducers([ TypedReducer( (completer, action) => ''), TypedReducer((completer, action) => ''), TypedReducer((selectedId, action) => action.entityType == EntityType.purchaseOrder ? action.entityId : selectedId), TypedReducer( (selectedId, action) => action.purchaseOrderId), TypedReducer( (selectedId, action) => action.purchaseOrder.id), TypedReducer( (selectedId, action) => action.purchaseOrder!.id), TypedReducer( (selectedId, 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) => ''), TypedReducer((selectedId, action) => action.entityType == EntityType.purchaseOrder ? '' : selectedId), TypedReducer( (selectedId, action) => action.clearSelection ? '' : action.entityType == EntityType.purchaseOrder ? action.entityId : selectedId), ]); final editingReducer = combineReducers([ TypedReducer(_updateEditing), TypedReducer(_updateEditing), TypedReducer(_updateEditing), TypedReducer(_updateEditing), TypedReducer((purchaseOrder, action) { return action.purchaseOrder.rebuild((b) => b..isChanged = true); }), TypedReducer((invoice, action) { return invoice!.rebuild((b) => b..isChanged = true); }), TypedReducer((invoice, action) { return invoice!.moveLineItem(action.oldIndex!, action.newIndex); }), TypedReducer((invoice, action) { return invoice!.rebuild((b) => b..isChanged = true); }), TypedReducer((invoice, action) { return invoice!.rebuild((b) => b..isChanged = true); }), TypedReducer( (purchaseOrder, action) { final vendor = action.vendor; return purchaseOrder!.rebuild((b) => b ..isChanged = true ..vendorId = vendor?.id ?? '' ..invitations.replace((vendor?.emailContacts ?? []) .map((contact) => InvitationEntity(vendorContactId: contact.id)) .toList())); }), TypedReducer( (purchaseOrders, action) { return action.purchaseOrders[0]; }), TypedReducer( (purchaseOrders, action) { return action.purchaseOrders[0]; }), TypedReducer( (purchaseOrders, action) { return action.purchaseOrders[0]; }), TypedReducer(_addPurchaseOrderItem), TypedReducer(_addPurchaseOrderItems), TypedReducer( _removePurchaseOrderItem), TypedReducer( _updatePurchaseOrderItem), TypedReducer(_clearEditing), TypedReducer((invoice, action) { return invoice!.rebuild((b) => b ..invitations.add(action.invitation ?? InvitationEntity(vendorContactId: action.contact!.id))); }), TypedReducer((invoice, action) { return invoice!.rebuild((b) => b..invitations.remove(action.invitation)); }), ]); InvoiceEntity _clearEditing(InvoiceEntity? purchaseOrder, dynamic action) { return InvoiceEntity(); } InvoiceEntity? _updateEditing(InvoiceEntity? purchaseOrder, dynamic action) { return action.purchaseOrder; } InvoiceEntity _addPurchaseOrderItem( InvoiceEntity? purchaseOrder, AddPurchaseOrderItem action) { return purchaseOrder!.rebuild( (b) => b..lineItems.add(action.purchaseOrderItem ?? InvoiceItemEntity())); } InvoiceEntity _addPurchaseOrderItems( InvoiceEntity? purchaseOrder, AddPurchaseOrderItems action) { return purchaseOrder!.rebuild((b) => b..lineItems.addAll(action.lineItems)); } InvoiceEntity? _removePurchaseOrderItem( InvoiceEntity? purchaseOrder, DeletePurchaseOrderItem action) { if (purchaseOrder!.lineItems.length <= action.index) { return purchaseOrder; } return purchaseOrder.rebuild((b) => b..lineItems.removeAt(action.index)); } InvoiceEntity? _updatePurchaseOrderItem( InvoiceEntity? purchaseOrder, UpdatePurchaseOrderItem action) { if (purchaseOrder!.lineItems.length <= action.index) { return purchaseOrder; } return purchaseOrder .rebuild((b) => b..lineItems[action.index] = action.purchaseOrderItem); } final purchaseOrderListReducer = combineReducers([ TypedReducer(_sortPurchaseOrders), TypedReducer( _filterPurchaseOrdersByState), TypedReducer( _filterPurchaseOrdersByStatus), TypedReducer(_filterPurchaseOrders), TypedReducer( _filterPurchaseOrdersByCustom1), TypedReducer( _filterPurchaseOrdersByCustom2), TypedReducer( _filterPurchaseOrdersByCustom3), TypedReducer( _filterPurchaseOrdersByCustom4), TypedReducer( _startListMultiselect), TypedReducer( _addToListMultiselect), TypedReducer( _removeFromListMultiselect), TypedReducer( _clearListMultiselect), TypedReducer(_viewPurchaseOrderList), TypedReducer( (state, action) => state.rebuild((b) => b ..filter = null ..filterClearedAt = DateTime.now().millisecondsSinceEpoch)), ]); 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 _filterPurchaseOrdersByCustom3( ListUIState purchaseOrderListState, FilterPurchaseOrdersByCustom3 action) { if (purchaseOrderListState.custom3Filters.contains(action.value)) { return purchaseOrderListState .rebuild((b) => b..custom3Filters.remove(action.value)); } else { return purchaseOrderListState .rebuild((b) => b..custom3Filters.add(action.value)); } } ListUIState _filterPurchaseOrdersByCustom4( ListUIState purchaseOrderListState, FilterPurchaseOrdersByCustom4 action) { if (purchaseOrderListState.custom4Filters.contains(action.value)) { return purchaseOrderListState .rebuild((b) => b..custom4Filters.remove(action.value)); } else { return purchaseOrderListState .rebuild((b) => b..custom4Filters.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 _filterPurchaseOrdersByStatus( ListUIState purchaseOrderListState, FilterPurchaseOrdersByStatus action) { if (purchaseOrderListState.statusFilters.contains(action.status)) { return purchaseOrderListState .rebuild((b) => b..statusFilters.remove(action.status)); } else { return purchaseOrderListState .rebuild((b) => b..statusFilters.add(action.status)); } } 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 purchaseOrderListState, StartPurchaseOrderMultiselect action) { return purchaseOrderListState.rebuild((b) => b..selectedIds = ListBuilder()); } ListUIState _addToListMultiselect( ListUIState purchaseOrderListState, AddToPurchaseOrderMultiselect action) { return purchaseOrderListState .rebuild((b) => b..selectedIds.add(action.entity!.id)); } ListUIState _removeFromListMultiselect(ListUIState purchaseOrderListState, RemoveFromPurchaseOrderMultiselect action) { return purchaseOrderListState .rebuild((b) => b..selectedIds.remove(action.entity!.id)); } ListUIState _clearListMultiselect( ListUIState purchaseOrderListState, ClearPurchaseOrderMultiselect action) { return purchaseOrderListState.rebuild((b) => b..selectedIds = null); } final purchaseOrdersReducer = combineReducers([ TypedReducer( _updatePurchaseOrder), TypedReducer(_addPurchaseOrder), TypedReducer( _setLoadedPurchaseOrders), TypedReducer( _updatePurchaseOrder), TypedReducer(_setLoadedCompany), TypedReducer( _markSentPurchaseOrderSuccess), TypedReducer( _convertPurchaseOrdersToExpenses), TypedReducer( _addPurchaseOrdersToInventorySuccess), TypedReducer( _acceptPurchaseOrderSuccess), TypedReducer( _cancelPurchaseOrderSuccess), TypedReducer( _emailPurchaseOrderSuccess), TypedReducer( _archivePurchaseOrderSuccess), TypedReducer( _deletePurchaseOrderSuccess), TypedReducer( _restorePurchaseOrderSuccess), TypedReducer( _approvePurchaseOrderSuccess), ]); PurchaseOrderState _markSentPurchaseOrderSuccess( PurchaseOrderState purchaseOrderState, MarkPurchaseOrderSentSuccess action) { final purchaseOrderMap = Map.fromIterable( action.purchaseOrders, key: (dynamic item) => item.id, value: (dynamic item) => item, ); return purchaseOrderState.rebuild((b) => b..map.addAll(purchaseOrderMap)); } PurchaseOrderState _convertPurchaseOrdersToExpenses( PurchaseOrderState purchaseOrderState, ConvertPurchaseOrdersToExpensesSuccess action) { final purchaseOrderMap = Map.fromIterable( action.purchaseOrders, key: (dynamic item) => item.id, value: (dynamic item) => item, ); return purchaseOrderState.rebuild((b) => b..map.addAll(purchaseOrderMap)); } PurchaseOrderState _addPurchaseOrdersToInventorySuccess( PurchaseOrderState purchaseOrderState, AddPurchaseOrdersToInventorySuccess action) { final purchaseOrderMap = Map.fromIterable( action.purchaseOrders, key: (dynamic item) => item.id, value: (dynamic item) => item, ); return purchaseOrderState.rebuild((b) => b..map.addAll(purchaseOrderMap)); } PurchaseOrderState _acceptPurchaseOrderSuccess( PurchaseOrderState purchaseOrderState, AcceptPurchaseOrderSuccess action) { final purchaseOrderMap = Map.fromIterable( action.purchaseOrders, key: (dynamic item) => item.id, value: (dynamic item) => item, ); return purchaseOrderState.rebuild((b) => b..map.addAll(purchaseOrderMap)); } PurchaseOrderState _cancelPurchaseOrderSuccess( PurchaseOrderState purchaseOrderState, CancelPurchaseOrderSuccess action) { final purchaseOrderMap = Map.fromIterable( action.purchaseOrders, key: (dynamic item) => item.id, value: (dynamic item) => item, ); return purchaseOrderState.rebuild((b) => b..map.addAll(purchaseOrderMap)); } 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 _emailPurchaseOrderSuccess( PurchaseOrderState purchaseOrderState, EmailPurchaseOrderSuccess action) { return purchaseOrderState .rebuild((b) => b..map[action.purchaseOrder.id] = action.purchaseOrder); } PurchaseOrderState _approvePurchaseOrderSuccess( PurchaseOrderState purchaseOrderState, ApprovePurchaseOrderSuccess action) { final purchaseOrderMap = Map.fromIterable( action.purchaseOrders!, key: (dynamic item) => item.id, value: (dynamic item) => item, ); return purchaseOrderState.rebuild((b) => b..map.addAll(purchaseOrderMap)); } PurchaseOrderState _addPurchaseOrder( PurchaseOrderState purchaseOrderState, AddPurchaseOrderSuccess action) { return purchaseOrderState.rebuild((b) => b ..map[action.purchaseOrder.id] = action.purchaseOrder .rebuild((b) => b..loadedAt = DateTime.now().millisecondsSinceEpoch) ..list.add(action.purchaseOrder.id)); } PurchaseOrderState _updatePurchaseOrder( PurchaseOrderState invoiceState, dynamic action) { final InvoiceEntity? purchaseOrder = action.purchaseOrder; return invoiceState.rebuild((b) => b ..map[purchaseOrder!.id] = purchaseOrder .rebuild((b) => b..loadedAt = DateTime.now().millisecondsSinceEpoch)); } 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); }