import 'package:redux/redux.dart'; import 'package:time_progress_tracker/models/app_settings.dart'; import 'package:time_progress_tracker/models/time_progress.dart'; import 'package:time_progress_tracker/redux/actions/app_settings_actions.dart'; import 'package:time_progress_tracker/redux/actions/redux_actions.dart'; import 'package:time_progress_tracker/redux/actions/time_progress_actions.dart'; final timeProgressListReducer = combineReducers>([ TypedReducer, TimeProgressListLoadedAction>( _setLoadedTimeProgressList), TypedReducer, TimeProgressListNotLoadedAction>( _setEmptyTimeProgressList), TypedReducer, AddTimeProgressAction>(_addTimeProgress), TypedReducer, UpdateTimeProgressAction>( _updateTimeProgress), TypedReducer, DeleteTimeProgressAction>( _deleteTimeProgress), ]); List _setEmptyTimeProgressList( List timeProgressList, TimeProgressListNotLoadedAction action) { return []; } List _setLoadedTimeProgressList( List timeProgressList, TimeProgressListLoadedAction action) { return action.timeProgressList; } List _addTimeProgress( List timeProgressList, AddTimeProgressAction action) => List.from(timeProgressList) ..add(action.timeProgress) ..toList(growable: false); List _updateTimeProgress( List timeProgressList, UpdateTimeProgressAction action) => timeProgressList .map((timeProgress) => timeProgress.id == action.id ? action.timeProgress : timeProgress) .toList(growable: false); List _deleteTimeProgress( List timeProgressList, DeleteTimeProgressAction action) => timeProgressList .where((timeProgress) => timeProgress.id != action.id) .toList(growable: false); final appSettingsReducers = combineReducers([ TypedReducer(_updateAppSettings), TypedReducer(_updateAppSettings), TypedReducer(_setDefaultSettings) ]); AppSettings _setDefaultSettings( AppSettings appSettings, AppSettingsNotLoadedAction action) => AppSettings.defaults(); AppSettings _updateAppSettings( AppSettings appSettings, AppSettingsAction action) => action.appSettings;