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/transaction_rule/transaction_rule_actions.dart'; import 'package:invoiceninja_flutter/redux/ui/list_ui_state.dart'; import 'package:invoiceninja_flutter/redux/transaction_rule/transaction_rule_state.dart'; EntityUIState transactionRuleUIReducer( TransactionRuleUIState state, dynamic action) { return state.rebuild((b) => b ..listUIState.replace(transactionRuleListReducer(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.transactionRule ? action.entityId : selectedId), TypedReducer( (String selectedId, dynamic action) => action.transactionRuleId), TypedReducer( (String selectedId, dynamic action) => action.transactionRule.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.transactionRule ? action.entityId : selectedId), ]); final editingReducer = combineReducers([ TypedReducer( _updateEditing), TypedReducer( _updateEditing), TypedReducer( (transactionRules, action) { return action.transactionRules[0]; }), TypedReducer( (transactionRules, action) { return action.transactionRules[0]; }), TypedReducer( (transactionRules, action) { return action.transactionRules[0]; }), TypedReducer(_updateEditing), TypedReducer( (transactionRule, action) { return action.transactionRule.rebuild((b) => b..isChanged = true); }), TypedReducer(_clearEditing), ]); TransactionRuleEntity _clearEditing( TransactionRuleEntity transactionRule, dynamic action) { return TransactionRuleEntity(); } TransactionRuleEntity _updateEditing( TransactionRuleEntity transactionRule, dynamic action) { return action.transactionRule; } final transactionRuleListReducer = combineReducers([ TypedReducer(_sortTransactionRules), TypedReducer( _filterTransactionRulesByState), TypedReducer(_filterTransactionRules), TypedReducer( _filterTransactionRulesByCustom1), TypedReducer( _filterTransactionRulesByCustom2), TypedReducer( _startListMultiselect), TypedReducer( _addToListMultiselect), TypedReducer( _removeFromListMultiselect), TypedReducer( _clearListMultiselect), TypedReducer(_viewTransactionRuleList), TypedReducer( (state, action) => state.rebuild((b) => b ..filter = null ..filterClearedAt = DateTime.now().millisecondsSinceEpoch)), ]); ListUIState _viewTransactionRuleList( ListUIState transactionRuleListState, ViewTransactionRuleList action) { return transactionRuleListState.rebuild((b) => b ..selectedIds = null ..filter = null ..filterClearedAt = DateTime.now().millisecondsSinceEpoch); } ListUIState _filterTransactionRulesByCustom1( ListUIState transactionRuleListState, FilterTransactionRulesByCustom1 action) { if (transactionRuleListState.custom1Filters.contains(action.value)) { return transactionRuleListState .rebuild((b) => b..custom1Filters.remove(action.value)); } else { return transactionRuleListState .rebuild((b) => b..custom1Filters.add(action.value)); } } ListUIState _filterTransactionRulesByCustom2( ListUIState transactionRuleListState, FilterTransactionRulesByCustom2 action) { if (transactionRuleListState.custom2Filters.contains(action.value)) { return transactionRuleListState .rebuild((b) => b..custom2Filters.remove(action.value)); } else { return transactionRuleListState .rebuild((b) => b..custom2Filters.add(action.value)); } } ListUIState _filterTransactionRulesByState(ListUIState transactionRuleListState, FilterTransactionRulesByState action) { if (transactionRuleListState.stateFilters.contains(action.state)) { return transactionRuleListState .rebuild((b) => b..stateFilters.remove(action.state)); } else { return transactionRuleListState .rebuild((b) => b..stateFilters.add(action.state)); } } ListUIState _filterTransactionRules( ListUIState transactionRuleListState, FilterTransactionRules action) { return transactionRuleListState.rebuild((b) => b ..filter = action.filter ..filterClearedAt = action.filter == null ? DateTime.now().millisecondsSinceEpoch : transactionRuleListState.filterClearedAt); } ListUIState _sortTransactionRules( ListUIState transactionRuleListState, SortTransactionRules action) { return transactionRuleListState.rebuild((b) => b ..sortAscending = b.sortField != action.field || !b.sortAscending ..sortField = action.field); } ListUIState _startListMultiselect( ListUIState productListState, StartTransactionRuleMultiselect action) { return productListState.rebuild((b) => b..selectedIds = ListBuilder()); } ListUIState _addToListMultiselect( ListUIState productListState, AddToTransactionRuleMultiselect action) { return productListState.rebuild((b) => b..selectedIds.add(action.entity.id)); } ListUIState _removeFromListMultiselect( ListUIState productListState, RemoveFromTransactionRuleMultiselect action) { return productListState .rebuild((b) => b..selectedIds.remove(action.entity.id)); } ListUIState _clearListMultiselect( ListUIState productListState, ClearTransactionRuleMultiselect action) { return productListState.rebuild((b) => b..selectedIds = null); } final transactionRulesReducer = combineReducers([ TypedReducer( _updateTransactionRule), TypedReducer( _addTransactionRule), TypedReducer( _setLoadedTransactionRules), TypedReducer( _setLoadedTransactionRule), TypedReducer(_setLoadedCompany), TypedReducer( _archiveTransactionRuleSuccess), TypedReducer( _deleteTransactionRuleSuccess), TypedReducer( _restoreTransactionRuleSuccess), ]); TransactionRuleState _archiveTransactionRuleSuccess( TransactionRuleState transactionRuleState, ArchiveTransactionRulesSuccess action) { return transactionRuleState.rebuild((b) { for (final transactionRule in action.transactionRules) { b.map[transactionRule.id] = transactionRule; } }); } TransactionRuleState _deleteTransactionRuleSuccess( TransactionRuleState transactionRuleState, DeleteTransactionRulesSuccess action) { return transactionRuleState.rebuild((b) { for (final transactionRule in action.transactionRules) { b.map[transactionRule.id] = transactionRule; } }); } TransactionRuleState _restoreTransactionRuleSuccess( TransactionRuleState transactionRuleState, RestoreTransactionRulesSuccess action) { return transactionRuleState.rebuild((b) { for (final transactionRule in action.transactionRules) { b.map[transactionRule.id] = transactionRule; } }); } TransactionRuleState _addTransactionRule( TransactionRuleState transactionRuleState, AddTransactionRuleSuccess action) { return transactionRuleState.rebuild((b) => b ..map[action.transactionRule.id] = action.transactionRule ..list.add(action.transactionRule.id)); } TransactionRuleState _updateTransactionRule( TransactionRuleState transactionRuleState, SaveTransactionRuleSuccess action) { return transactionRuleState.rebuild( (b) => b..map[action.transactionRule.id] = action.transactionRule); } TransactionRuleState _setLoadedTransactionRule( TransactionRuleState transactionRuleState, LoadTransactionRuleSuccess action) { return transactionRuleState.rebuild( (b) => b..map[action.transactionRule.id] = action.transactionRule); } TransactionRuleState _setLoadedTransactionRules( TransactionRuleState transactionRuleState, LoadTransactionRulesSuccess action) => transactionRuleState.loadTransactionRules(action.transactionRules); TransactionRuleState _setLoadedCompany( TransactionRuleState transactionRuleState, LoadCompanySuccess action) { final company = action.userCompany.company; return transactionRuleState.loadTransactionRules(company.transactionRules); }