More work with redux, and location edit (wip)

This commit is contained in:
vjrj 2018-07-03 13:07:02 +02:00
parent e97a5a1a9f
commit e55edce3d4
17 changed files with 311 additions and 186 deletions

View file

@ -1,2 +1,3 @@
export 'appActions.dart';
export 'yourLocationActions.dart';
export 'yourLocationActions.dart';
export 'fireMapActions.dart';

View file

@ -36,6 +36,16 @@ void fetchYourLocationsMiddleware(
createUser(store, store.state.user.lang, action.token);
}
if (action is EditConfirmYourLocationAction) {
if (action.loc.subscribed) {
// FXIME save lat/lon
} else {
// No subscribed (only local)
store.dispatch(new UpdateYourLocationAction(action.loc));
persistYourLocations(store.state.yourLocations);
}
}
if (action is AddYourLocationAction) {
if (action.loc.subscribed) {
subscribeViaApi(store, action.loc,
@ -64,25 +74,28 @@ void fetchYourLocationsMiddleware(
.then((result) => store.dispatch(result));
}
if (action is UpdateLocalYourLocationAction) {
if (action is UpdateYourLocationAction) {
if (action.loc.subscribed)
Debounce.seconds(
2,
() => api
.getYourLocationFireStats(store.state, action.loc)
.then((result) => store.dispatch(result)));
else {
// FIXME do something?
}
}
if (action is SubscribeConfirmAction) {
subscribeViaApi(store, action.loc, (sub) {
store.dispatch(new UpdateLocalYourLocationAction(action.loc));
store.dispatch(new UpdateYourLocationAction(action.loc));
persistYourLocations(store.state.yourLocations);
});
}
if (action is UnSubscribeAction) {
unsubsViaApi(store, action.loc.id, () {
store.dispatch(new UpdateLocalYourLocationAction(action.loc));
store.dispatch(new UpdateYourLocationAction(action.loc));
persistYourLocations(store.state.yourLocations);
});
}

View file

@ -13,6 +13,13 @@ final fireMapReducer = combineReducers<FireMapState>([
_subscribeConfirmYourLocationMap),
new TypedReducer<FireMapState, UnSubscribeAction>(
_unsubscribeYourLocationMap),
new TypedReducer<FireMapState, EditYourLocationAction>(_editYourLocationMap),
new TypedReducer<FireMapState, EditConfirmYourLocationAction>(
_editConfirmYourLocationMap),
new TypedReducer<FireMapState, EditCancelYourLocationAction>(
_editCancelYourLocationMap),
new TypedReducer<FireMapState, UpdateYourLocationMapAction>(
_updateYourLocationMap)
]);
FireMapState _updateYourLocationMapStats(
@ -24,6 +31,11 @@ FireMapState _updateYourLocationMapStats(
industries: action.industries);
}
FireMapState _updateYourLocationMap(
FireMapState state, UpdateYourLocationMapAction action) {
return state.copyWith(yourLocation: action.loc);
}
FireMapState _showYourLocationMap(
FireMapState state, ShowYourLocationMapAction action) {
return state.copyWith(
@ -47,3 +59,21 @@ FireMapState _unsubscribeYourLocationMap(
FireMapState state, UnSubscribeAction action) {
return state.copyWith(status: FireMapStatus.view);
}
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));
}
FireMapStatus restoreStatusAfterSave(loc) =>
loc.subscribed ? FireMapStatus.unsubscribe : FireMapStatus.view;

View file

@ -16,25 +16,6 @@ class AddedYourLocationAction extends YourLocationActions {
AddedYourLocationAction(this.loc);
}
class ShowYourLocationMapAction extends YourLocationActions {
YourLocation loc;
ShowYourLocationMapAction(this.loc);
}
class UpdateYourLocationMapStatsAction extends YourLocationActions {
int numFires;
List<dynamic> fires = [];
List<dynamic> falsePos = [];
List<dynamic> industries = [];
UpdateYourLocationMapStatsAction(
{@required this.numFires,
@required this.fires,
@required this.falsePos,
@required this.industries});
}
class DeleteYourLocationAction extends YourLocationActions {
YourLocation loc;
@ -47,10 +28,10 @@ class DeletedYourLocationAction extends YourLocationActions {
DeletedYourLocationAction(this.id);
}
class UpdateLocalYourLocationAction extends YourLocationActions {
class UpdateYourLocationAction extends YourLocationActions {
YourLocation loc;
UpdateLocalYourLocationAction(this.loc);
UpdateYourLocationAction(this.loc);
}
class ToggleSubscriptionAction extends YourLocationActions {
@ -81,3 +62,19 @@ class UnSubscribeAction extends YourLocationActions {
UnSubscribeAction(this.loc);
}
class EditYourLocationAction extends YourLocationActions {
YourLocation loc;
EditYourLocationAction(this.loc);
}
class EditConfirmYourLocationAction extends YourLocationActions {
YourLocation loc;
EditConfirmYourLocationAction(this.loc);
}
class EditCancelYourLocationAction extends YourLocationActions {
YourLocation loc;
EditCancelYourLocationAction(this.loc);
}

View file

@ -8,8 +8,8 @@ final yourLocationsReducer = combineReducers<List<YourLocation>>([
_addedYourLocation),
new TypedReducer<List<YourLocation>, DeletedYourLocationAction>(
_deletedYourLocation),
new TypedReducer<List<YourLocation>, UpdateLocalYourLocationAction>(
_updateLocalYourLocation),
new TypedReducer<List<YourLocation>, UpdateYourLocationAction>(
_updateYourLocation),
new TypedReducer<List<YourLocation>, ToggledSubscriptionAction>(
_toggledSubscriptionAction)
]);
@ -26,8 +26,8 @@ List<YourLocation> _deletedYourLocation(
.toList();
}
List<YourLocation> _updateLocalYourLocation(
List<YourLocation> yourLocations, UpdateLocalYourLocationAction action) {
List<YourLocation> _updateYourLocation(
List<YourLocation> yourLocations, UpdateYourLocationAction action) {
return yourLocations
.map((yourLocation) =>
yourLocation.id == action.loc.id ? action.loc : yourLocation)