import 'package:objectid/objectid.dart'; import 'package:redux/redux.dart'; import '../models/fire_map_state.dart'; import '../models/your_location.dart'; import 'actions.dart'; final Reducer fireMapReducer = combineReducers(>[ TypedReducer(_showYourLocationMap), TypedReducer( _showFireNotificationMap), TypedReducer( _updateYourLocationMapStats), TypedReducer(_subscribeYourLocationMap), TypedReducer( _subscribeConfirmYourLocationMap), TypedReducer(_unsubscribeYourLocationMap), TypedReducer(_editYourLocationMap), TypedReducer( _editConfirmYourLocationMap), TypedReducer( _editCancelYourLocationMap), TypedReducer(_selectMapLayer), TypedReducer( _updateYourLocationMap) ]); FireMapState _updateYourLocationMapStats( FireMapState state, UpdateFireMapStatsAction action) { return state.copyWith( numFires: action.numFires, fires: action.fires, falsePos: action.falsePos, industries: action.industries); } FireMapState _updateYourLocationMap( FireMapState state, UpdateYourLocationMapAction action) { return state.copyWith(yourLocation: action.loc); } FireMapState _showYourLocationMap( FireMapState state, ShowYourLocationMapAction action) { return state.copyWith( status: action.loc.subscribed ? FireMapStatus.unsubscribe : FireMapStatus.view, yourLocation: action.loc); } FireMapState _showFireNotificationMap( FireMapState state, ShowFireNotificationMapAction action) { // TODO(developer): use here real location instead of notification location? final YourLocation pseudoLoc = YourLocation( id: ObjectId(), lat: action.notif.lat, lon: action.notif.lon, description: action.notif.description); return state.copyWith( status: FireMapStatus.viewFireNotification, yourLocation: pseudoLoc, fireNotication: action.notif); } FireMapState _subscribeYourLocationMap( FireMapState state, SubscribeAction action) { return state.copyWith(status: FireMapStatus.subscriptionConfirm); } FireMapState _subscribeConfirmYourLocationMap( FireMapState state, SubscribeConfirmAction action) { return state.copyWith( status: FireMapStatus.unsubscribe, yourLocation: action.loc); } FireMapState _unsubscribeYourLocationMap( FireMapState state, UnSubscribeAction action) { return state.copyWith(status: FireMapStatus.view, yourLocation: action.loc); } FireMapState _editYourLocationMap( FireMapState state, EditYourLocationAction action) { return state.copyWith(status: FireMapStatus.edit); } FireMapState _editConfirmYourLocationMap( FireMapState state, EditConfirmYourLocationAction action) { return state.copyWith(status: restoreStatusAfterSave(action.loc)); } FireMapState _editCancelYourLocationMap( FireMapState state, EditCancelYourLocationAction action) { return state.copyWith( status: restoreStatusAfterSave(action.loc), yourLocation: action.loc); } FireMapStatus restoreStatusAfterSave(YourLocation loc) => loc.subscribed ? FireMapStatus.unsubscribe : FireMapStatus.view; FireMapState _selectMapLayer(FireMapState state, SelectMapLayerAction action) { return state.copyWith(layer: action.layer); }