Created redux middleware to store timers
Signed-off-by: Andreas Fahrecker <AndreasFahrecker@gmail.com>
This commit is contained in:
parent
51448c5555
commit
90b19e304d
42
lib/middleware/store_timers_middleware.dart
Normal file
42
lib/middleware/store_timers_middleware.dart
Normal file
@ -0,0 +1,42 @@
|
||||
import 'package:redux/redux.dart';
|
||||
import 'package:time_progress_calculator/actions/timer_actions.dart';
|
||||
import 'package:time_progress_calculator/models/app_state.dart';
|
||||
import 'package:time_progress_calculator/models/timer.dart';
|
||||
import 'package:time_progress_calculator/persistence/timer_entity.dart';
|
||||
import 'package:time_progress_calculator/persistence/timers_repository.dart';
|
||||
import 'package:time_progress_calculator/selectors/timer_selectors.dart';
|
||||
|
||||
List<Middleware<AppState>> createStoreTimersMiddleware(
|
||||
TimersRepository repository) {
|
||||
final saveTimers = _createSaveTimers(repository);
|
||||
final loadTimers = _createLoadTimers(repository);
|
||||
|
||||
return [
|
||||
TypedMiddleware<AppState, LoadTimersAction>(loadTimers),
|
||||
TypedMiddleware<AppState, AddTimerAction>(saveTimers),
|
||||
TypedMiddleware<AppState, UpdateTimerAction>(saveTimers),
|
||||
TypedMiddleware<AppState, DeleteTimerAction>(saveTimers),
|
||||
];
|
||||
}
|
||||
|
||||
Middleware<AppState> _createSaveTimers(TimersRepository repository) {
|
||||
return (Store<AppState> store, dynamic action, NextDispatcher next) {
|
||||
next(action);
|
||||
|
||||
repository.saveTimers(
|
||||
timersSelector(store.state)
|
||||
.map<TimerEntity>((timer) => timer.toEntity())
|
||||
.toList(growable: false),
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
Middleware<AppState> _createLoadTimers(TimersRepository repository) {
|
||||
return (Store<AppState> store, dynamic action, NextDispatcher next) {
|
||||
repository.loadTimers().then((timers) {
|
||||
store.dispatch(
|
||||
TimersLoadedAction(timers.map<Timer>(Timer.fromEntity).toList()),
|
||||
);
|
||||
}).catchError((_) => store.dispatch(TimersNotLoadedAction()));
|
||||
};
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user