// Package imports: import 'package:built_collection/built_collection.dart'; import 'package:redux/redux.dart'; // Project imports: import 'package:invoiceninja_flutter/data/models/models.dart'; import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/company/company_actions.dart'; import 'package:invoiceninja_flutter/redux/task/task_actions.dart'; import 'package:invoiceninja_flutter/redux/task_status/task_status_actions.dart'; import 'package:invoiceninja_flutter/redux/task_status/task_status_state.dart'; import 'package:invoiceninja_flutter/redux/ui/entity_ui_state.dart'; import 'package:invoiceninja_flutter/redux/ui/list_ui_state.dart'; EntityUIState taskStatusUIReducer(TaskStatusUIState state, dynamic action) { return state.rebuild((b) => b ..listUIState.replace(taskStatusListReducer(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.taskStatus ? action.entityId : selectedId), TypedReducer( (String? selectedId, dynamic action) => action.taskStatusId), TypedReducer( (String? selectedId, dynamic action) => action.taskStatus.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.taskStatus ? action.entityId : selectedId), ]); final editingReducer = combineReducers([ TypedReducer(_updateEditing), TypedReducer(_updateEditing), TypedReducer( (taskStatuses, action) { return action.taskStatuses[0]; }), TypedReducer( (taskStatuses, action) { return action.taskStatuses[0]; }), TypedReducer( (taskStatuses, action) { return action.taskStatuses[0]; }), TypedReducer(_updateEditing), TypedReducer((taskStatus, action) { return action.taskStatus.rebuild((b) => b..isChanged = true); }), TypedReducer(_clearEditing), ]); TaskStatusEntity _clearEditing(TaskStatusEntity? taskStatus, dynamic action) { return TaskStatusEntity(); } TaskStatusEntity? _updateEditing(TaskStatusEntity? taskStatus, dynamic action) { return action.taskStatus; } final taskStatusListReducer = combineReducers([ TypedReducer(_sortTaskStatuses), TypedReducer( _filterTaskStatusesByState), TypedReducer(_filterTaskStatuses), TypedReducer( _filterTaskStatusesByCustom1), TypedReducer( _filterTaskStatusesByCustom2), TypedReducer(_startListMultiselect), TypedReducer(_addToListMultiselect), TypedReducer( _removeFromListMultiselect), TypedReducer(_clearListMultiselect), TypedReducer(_viewTaskStatusList), TypedReducer( (state, action) => state.rebuild((b) => b ..filter = null ..filterClearedAt = DateTime.now().millisecondsSinceEpoch)), ]); ListUIState _viewTaskStatusList( ListUIState taskStatusListState, ViewTaskStatusList action) { return taskStatusListState.rebuild((b) => b ..selectedIds = null ..filter = null ..filterClearedAt = DateTime.now().millisecondsSinceEpoch); } ListUIState _filterTaskStatusesByCustom1( ListUIState taskStatusListState, FilterTaskStatusesByCustom1 action) { if (taskStatusListState.custom1Filters.contains(action.value)) { return taskStatusListState .rebuild((b) => b..custom1Filters.remove(action.value)); } else { return taskStatusListState .rebuild((b) => b..custom1Filters.add(action.value)); } } ListUIState _filterTaskStatusesByCustom2( ListUIState taskStatusListState, FilterTaskStatusesByCustom2 action) { if (taskStatusListState.custom2Filters.contains(action.value)) { return taskStatusListState .rebuild((b) => b..custom2Filters.remove(action.value)); } else { return taskStatusListState .rebuild((b) => b..custom2Filters.add(action.value)); } } ListUIState _filterTaskStatusesByState( ListUIState taskStatusListState, FilterTaskStatusesByState action) { if (taskStatusListState.stateFilters.contains(action.state)) { return taskStatusListState .rebuild((b) => b..stateFilters.remove(action.state)); } else { return taskStatusListState .rebuild((b) => b..stateFilters.add(action.state)); } } ListUIState _filterTaskStatuses( ListUIState taskStatusListState, FilterTaskStatuses action) { return taskStatusListState.rebuild((b) => b ..filter = action.filter ..filterClearedAt = action.filter == null ? DateTime.now().millisecondsSinceEpoch : taskStatusListState.filterClearedAt); } ListUIState _sortTaskStatuses( ListUIState taskStatusListState, SortTaskStatuses action) { return taskStatusListState.rebuild((b) => b ..sortAscending = b.sortField != action.field || !b.sortAscending! ..sortField = action.field); } ListUIState _startListMultiselect( ListUIState productListState, StartTaskStatusMultiselect action) { return productListState.rebuild((b) => b..selectedIds = ListBuilder()); } ListUIState _addToListMultiselect( ListUIState productListState, AddToTaskStatusMultiselect action) { return productListState.rebuild((b) => b..selectedIds.add(action.entity!.id)); } ListUIState _removeFromListMultiselect( ListUIState productListState, RemoveFromTaskStatusMultiselect action) { return productListState .rebuild((b) => b..selectedIds.remove(action.entity!.id)); } ListUIState _clearListMultiselect( ListUIState productListState, ClearTaskStatusMultiselect action) { return productListState.rebuild((b) => b..selectedIds = null); } final taskStatusesReducer = combineReducers([ TypedReducer(_updateTaskStatus), TypedReducer(_addTaskStatus), TypedReducer( _setLoadedTaskStatuses), TypedReducer(_setLoadedTaskStatus), TypedReducer(_setLoadedCompany), TypedReducer( _archiveTaskStatusSuccess), TypedReducer( _deleteTaskStatusSuccess), TypedReducer( _restoreTaskStatusSuccess), TypedReducer(_sortTaskStatusSuccess), ]); TaskStatusState _sortTaskStatusSuccess( TaskStatusState taskStatusState, SortTasksSuccess action) { return taskStatusState.rebuild((b) { for (final statusId in action.statusIds!) { b.map[statusId] = taskStatusState.map[statusId]! .rebuild((b) => b..statusOrder = action.statusIds!.indexOf(statusId)); } }); } TaskStatusState _archiveTaskStatusSuccess( TaskStatusState taskStatusState, ArchiveTaskStatusesSuccess action) { return taskStatusState.rebuild((b) { for (final taskStatus in action.taskStatuses) { b.map[taskStatus.id] = taskStatus; } }); } TaskStatusState _deleteTaskStatusSuccess( TaskStatusState taskStatusState, DeleteTaskStatusesSuccess action) { return taskStatusState.rebuild((b) { for (final taskStatus in action.taskStatuses) { b.map[taskStatus.id] = taskStatus; } }); } TaskStatusState _restoreTaskStatusSuccess( TaskStatusState taskStatusState, RestoreTaskStatusesSuccess action) { return taskStatusState.rebuild((b) { for (final taskStatus in action.taskStatuses) { b.map[taskStatus.id] = taskStatus; } }); } TaskStatusState _addTaskStatus( TaskStatusState taskStatusState, AddTaskStatusSuccess action) { return taskStatusState.rebuild((b) => b ..map[action.taskStatus.id] = action.taskStatus ..list.add(action.taskStatus.id)); } TaskStatusState _updateTaskStatus( TaskStatusState taskStatusState, SaveTaskStatusSuccess action) { return taskStatusState .rebuild((b) => b..map[action.taskStatus.id] = action.taskStatus); } TaskStatusState _setLoadedTaskStatus( TaskStatusState taskStatusState, LoadTaskStatusSuccess action) { return taskStatusState .rebuild((b) => b..map[action.taskStatus.id] = action.taskStatus); } TaskStatusState _setLoadedTaskStatuses( TaskStatusState taskStatusState, LoadTaskStatusesSuccess action) => taskStatusState.loadTaskStatuses(action.taskStatuses); TaskStatusState _setLoadedCompany( TaskStatusState taskStatusState, LoadCompanySuccess action) { final company = action.userCompany.company!; return taskStatusState.loadTaskStatuses(company.taskStatuses); }