import 'package:built_collection/built_collection.dart'; import 'package:invoiceninja_flutter/data/models/company_gateway_model.dart'; import 'package:invoiceninja_flutter/data/models/entities.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/company/company_actions.dart'; import 'package:invoiceninja_flutter/redux/company_gateway/company_gateway_actions.dart'; import 'package:invoiceninja_flutter/redux/company_gateway/company_gateway_state.dart'; import 'package:invoiceninja_flutter/redux/ui/entity_ui_state.dart'; import 'package:invoiceninja_flutter/redux/ui/list_ui_state.dart'; import 'package:redux/redux.dart'; EntityUIState companyGatewayUIReducer( CompanyGatewayUIState state, dynamic action) { return state.rebuild((b) => b ..listUIState.replace(companyGatewayListReducer(state.listUIState, action)) ..editing.replace(editingReducer(state.editing, action)) ..selectedId = selectedIdReducer(state.selectedId, action) ..forceSelected = forceSelectedReducer(state.forceSelected, 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), ]); Reducer selectedIdReducer = combineReducers([ TypedReducer((selectedId, action) => action.entityType == EntityType.companyGateway ? action.entityId : selectedId), TypedReducer( (String selectedId, action) => action.companyGatewayId), TypedReducer( (String selectedId, action) => action.companyGateway.id), TypedReducer( (selectedId, action) => action.clearSelection ? '' : selectedId), TypedReducer((selectedId, action) => ''), TypedReducer( (selectedId, action) => action.clearSelection ? '' : action.entityType == EntityType.companyGateway ? action.entityId : selectedId), ]); final editingReducer = combineReducers([ TypedReducer(_updateEditing), TypedReducer(_updateEditing), TypedReducer( (companyGateways, action) { return action.companyGateways[0]; }), TypedReducer( (companyGateways, action) { return action.companyGateways[0]; }), TypedReducer( (companyGateways, action) { return action.companyGateways[0]; }), TypedReducer(_updateEditing), TypedReducer( (companyGateway, action) { return action.companyGateway.rebuild((b) => b..isChanged = true); }), TypedReducer(_clearEditing), ]); CompanyGatewayEntity _clearEditing( CompanyGatewayEntity companyGateway, dynamic action) { return CompanyGatewayEntity(); } CompanyGatewayEntity _updateEditing( CompanyGatewayEntity companyGateway, dynamic action) { return action.companyGateway; } final companyGatewayListReducer = combineReducers([ TypedReducer(_sortCompanyGateways), TypedReducer( _filterCompanyGatewaysByState), TypedReducer(_filterCompanyGateways), TypedReducer( _filterCompanyGatewaysByCustom1), TypedReducer( _filterCompanyGatewaysByCustom2), TypedReducer( _startListMultiselect), TypedReducer( _addToListMultiselect), TypedReducer( _removeFromListMultiselect), TypedReducer( _clearListMultiselect), ]); ListUIState _filterCompanyGatewaysByCustom1(ListUIState companyGatewayListState, FilterCompanyGatewaysByCustom1 action) { if (companyGatewayListState.custom1Filters.contains(action.value)) { return companyGatewayListState .rebuild((b) => b..custom1Filters.remove(action.value)); } else { return companyGatewayListState .rebuild((b) => b..custom1Filters.add(action.value)); } } ListUIState _filterCompanyGatewaysByCustom2(ListUIState companyGatewayListState, FilterCompanyGatewaysByCustom2 action) { if (companyGatewayListState.custom2Filters.contains(action.value)) { return companyGatewayListState .rebuild((b) => b..custom2Filters.remove(action.value)); } else { return companyGatewayListState .rebuild((b) => b..custom2Filters.add(action.value)); } } ListUIState _filterCompanyGatewaysByState( ListUIState companyGatewayListState, FilterCompanyGatewaysByState action) { if (companyGatewayListState.stateFilters.contains(action.state)) { return companyGatewayListState .rebuild((b) => b..stateFilters.remove(action.state)); } else { return companyGatewayListState .rebuild((b) => b..stateFilters.add(action.state)); } } ListUIState _filterCompanyGateways( ListUIState companyGatewayListState, FilterCompanyGateways action) { return companyGatewayListState.rebuild((b) => b ..filter = action.filter ..filterClearedAt = action.filter == null ? DateTime.now().millisecondsSinceEpoch : companyGatewayListState.filterClearedAt); } ListUIState _sortCompanyGateways( ListUIState companyGatewayListState, SortCompanyGateways action) { return companyGatewayListState.rebuild((b) => b ..sortAscending = b.sortField != action.field || !b.sortAscending ..sortField = action.field); } ListUIState _startListMultiselect( ListUIState productListState, StartCompanyGatewayMultiselect action) { return productListState.rebuild((b) => b..selectedIds = ListBuilder()); } ListUIState _addToListMultiselect( ListUIState productListState, AddToCompanyGatewayMultiselect action) { return productListState.rebuild((b) => b..selectedIds.add(action.entity.id)); } ListUIState _removeFromListMultiselect( ListUIState productListState, RemoveFromCompanyGatewayMultiselect action) { return productListState .rebuild((b) => b..selectedIds.remove(action.entity.id)); } ListUIState _clearListMultiselect( ListUIState productListState, ClearCompanyGatewayMultiselect action) { return productListState.rebuild((b) => b..selectedIds = null); } final companyGatewaysReducer = combineReducers([ TypedReducer( _updateCompanyGateway), TypedReducer( _addCompanyGateway), TypedReducer( _setLoadedCompanyGateways), TypedReducer( _setLoadedCompanyGateway), TypedReducer(_setLoadedCompany), TypedReducer( _archiveCompanyGatewaySuccess), TypedReducer( _deleteCompanyGatewaySuccess), TypedReducer( _restoreCompanyGatewaySuccess), ]); CompanyGatewayState _archiveCompanyGatewaySuccess( CompanyGatewayState companyGatewayState, ArchiveCompanyGatewaySuccess action) { return companyGatewayState.rebuild((b) { for (final companyGateway in action.companyGateways) { b.map[companyGateway.id] = companyGateway; } }); } CompanyGatewayState _deleteCompanyGatewaySuccess( CompanyGatewayState companyGatewayState, DeleteCompanyGatewaySuccess action) { return companyGatewayState.rebuild((b) { for (final companyGateway in action.companyGateways) { b.map[companyGateway.id] = companyGateway; } }); } CompanyGatewayState _restoreCompanyGatewaySuccess( CompanyGatewayState companyGatewayState, RestoreCompanyGatewaySuccess action) { return companyGatewayState.rebuild((b) { for (final companyGateway in action.companyGateways) { b.map[companyGateway.id] = companyGateway; } }); } CompanyGatewayState _addCompanyGateway( CompanyGatewayState companyGatewayState, AddCompanyGatewaySuccess action) { return companyGatewayState.rebuild((b) => b ..map[action.companyGateway.id] = action.companyGateway ..list.add(action.companyGateway.id)); } CompanyGatewayState _updateCompanyGateway( CompanyGatewayState companyGatewayState, SaveCompanyGatewaySuccess action) { return companyGatewayState.rebuild((b) => b ..map[action.companyGateway.id] = action.companyGateway .rebuild((b) => b..loadedAt = DateTime.now().millisecondsSinceEpoch)); } CompanyGatewayState _setLoadedCompanyGateway( CompanyGatewayState companyGatewayState, LoadCompanyGatewaySuccess action) { return companyGatewayState.rebuild((b) => b ..map[action.companyGateway.id] = action.companyGateway .rebuild((b) => b..loadedAt = DateTime.now().millisecondsSinceEpoch)); } CompanyGatewayState _setLoadedCompany( CompanyGatewayState companyGatewayState, LoadCompanySuccess action) { final state = companyGatewayState.rebuild((b) => b ..map.addAll(Map.fromIterable( action.userCompany.company.companyGateways, key: (dynamic item) => item.id, value: (dynamic item) => item, ))); return state.rebuild((b) => b..list.replace(state.map.keys)); } CompanyGatewayState _setLoadedCompanyGateways( CompanyGatewayState companyGatewayState, LoadCompanyGatewaysSuccess action) { final state = companyGatewayState.rebuild((b) => b ..map.addAll(Map.fromIterable( action.companyGateways, key: (dynamic item) => item.id, value: (dynamic item) => item, ))); return state.rebuild((b) => b..list.replace(state.map.keys)); }