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/design/design_actions.dart'; import 'package:invoiceninja_flutter/redux/ui/list_ui_state.dart'; import 'package:invoiceninja_flutter/redux/design/design_state.dart'; EntityUIState designUIReducer(DesignUIState state, dynamic action) { return state.rebuild((b) => b ..listUIState.replace(designListReducer(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), TypedReducer((completer, action) => false), ]); Reducer selectedIdReducer = combineReducers([ TypedReducer((completer, action) => ''), TypedReducer((completer, action) => ''), TypedReducer((selectedId, action) => action.entityType == EntityType.design ? action.entityId : selectedId), TypedReducer( (String selectedId, dynamic action) => action.designId), TypedReducer( (String selectedId, dynamic action) => action.design.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) => ''), ]); final editingReducer = combineReducers([ TypedReducer(_updateEditing), TypedReducer(_updateEditing), TypedReducer((designs, action) { return action.designs[0]; }), TypedReducer((designs, action) { return action.designs[0]; }), TypedReducer((designs, action) { return action.designs[0]; }), TypedReducer(_updateEditing), TypedReducer((design, action) { return action.design.rebuild((b) => b..isChanged = true); }), TypedReducer(_clearEditing), ]); DesignEntity _clearEditing(DesignEntity design, dynamic action) { return DesignEntity(); } DesignEntity _updateEditing(DesignEntity design, dynamic action) { return action.design; } final designListReducer = combineReducers([ TypedReducer(_sortDesigns), TypedReducer(_filterDesignsByState), TypedReducer(_filterDesigns), TypedReducer(_filterDesignsByCustom1), TypedReducer(_filterDesignsByCustom2), TypedReducer(_startListMultiselect), TypedReducer(_addToListMultiselect), TypedReducer( _removeFromListMultiselect), TypedReducer(_clearListMultiselect), TypedReducer(_viewDesignList), ]); ListUIState _viewDesignList( ListUIState designListState, ViewDesignList action) { return designListState.rebuild((b) => b ..selectedIds = null ..filter = null ..filterClearedAt = DateTime.now().millisecondsSinceEpoch); } ListUIState _filterDesignsByCustom1( ListUIState designListState, FilterDesignsByCustom1 action) { if (designListState.custom1Filters.contains(action.value)) { return designListState .rebuild((b) => b..custom1Filters.remove(action.value)); } else { return designListState.rebuild((b) => b..custom1Filters.add(action.value)); } } ListUIState _filterDesignsByCustom2( ListUIState designListState, FilterDesignsByCustom2 action) { if (designListState.custom2Filters.contains(action.value)) { return designListState .rebuild((b) => b..custom2Filters.remove(action.value)); } else { return designListState.rebuild((b) => b..custom2Filters.add(action.value)); } } ListUIState _filterDesignsByState( ListUIState designListState, FilterDesignsByState action) { if (designListState.stateFilters.contains(action.state)) { return designListState.rebuild((b) => b..stateFilters.remove(action.state)); } else { return designListState.rebuild((b) => b..stateFilters.add(action.state)); } } ListUIState _filterDesigns(ListUIState designListState, FilterDesigns action) { return designListState.rebuild((b) => b ..filter = action.filter ..filterClearedAt = action.filter == null ? DateTime.now().millisecondsSinceEpoch : designListState.filterClearedAt); } ListUIState _sortDesigns(ListUIState designListState, SortDesigns action) { return designListState.rebuild((b) => b ..sortAscending = b.sortField != action.field || !b.sortAscending ..sortField = action.field); } ListUIState _startListMultiselect( ListUIState productListState, StartDesignMultiselect action) { return productListState.rebuild((b) => b..selectedIds = ListBuilder()); } ListUIState _addToListMultiselect( ListUIState productListState, AddToDesignMultiselect action) { return productListState.rebuild((b) => b..selectedIds.add(action.entity.id)); } ListUIState _removeFromListMultiselect( ListUIState productListState, RemoveFromDesignMultiselect action) { return productListState .rebuild((b) => b..selectedIds.remove(action.entity.id)); } ListUIState _clearListMultiselect( ListUIState productListState, ClearDesignMultiselect action) { return productListState.rebuild((b) => b..selectedIds = null); } final designsReducer = combineReducers([ TypedReducer(_updateDesign), TypedReducer(_addDesign), TypedReducer(_setLoadedDesigns), TypedReducer(_setLoadedDesign), TypedReducer(_setLoadedCompany), TypedReducer(_archiveDesignSuccess), TypedReducer(_deleteDesignSuccess), TypedReducer(_restoreDesignSuccess), ]); DesignState _archiveDesignSuccess( DesignState designState, ArchiveDesignsSuccess action) { return designState.rebuild((b) { for (final design in action.designs) { b.map[design.id] = design; } }); } DesignState _deleteDesignSuccess( DesignState designState, DeleteDesignsSuccess action) { return designState.rebuild((b) { for (final design in action.designs) { b.map[design.id] = design; } }); } DesignState _restoreDesignSuccess( DesignState designState, RestoreDesignsSuccess action) { return designState.rebuild((b) { for (final design in action.designs) { b.map[design.id] = design; } }); } DesignState _addDesign(DesignState designState, AddDesignSuccess action) { return designState.rebuild((b) => b ..map[action.design.id] = action.design ..list.add(action.design.id)); } DesignState _updateDesign(DesignState designState, SaveDesignSuccess action) { return designState.rebuild((b) => b..map[action.design.id] = action.design); } DesignState _setLoadedDesign( DesignState designState, LoadDesignSuccess action) { return designState.rebuild((b) => b..map[action.design.id] = action.design); } DesignState _setLoadedDesigns( DesignState designState, LoadDesignsSuccess action) => designState.loadDesigns(action.designs); DesignState _setLoadedCompany( DesignState designState, LoadCompanySuccess action) { final company = action.userCompany.company; return designState.loadDesigns(company.designs); }