Line data Source code
1 : import 'package:redfire/extensions.dart';
2 : import 'package:redfire/services.dart';
3 : import 'package:redux/redux.dart';
4 :
5 : import '../../adventures/models/adventure_model.dart';
6 : import '../../app_state.dart';
7 : import '../../challenges/models/challenge_model.dart';
8 : import '../../tasks/models/task_model.dart';
9 : import '../actions/select_adventure_node_action.dart';
10 : import '../actions/set_adventure_nodes_action.dart';
11 : import '../extensions/json_list_extension.dart';
12 :
13 : class SelectAdventureNodeMiddleware
14 : extends TypedMiddleware<AppState, SelectAdventureNodeAction> {
15 1 : SelectAdventureNodeMiddleware()
16 2 : : super((store, action, next) async {
17 1 : next(action);
18 :
19 : try {
20 1 : final service = RedFireLocator.getDatabaseService();
21 :
22 2 : if (action.selection.isAdventure()) {
23 2 : var jsonList = await service.getDocuments(
24 : at: 'challenges',
25 : where: 'parentIds',
26 2 : arrayContains: (action.selection as AdventureModel).id);
27 1 : store.dispatch(SetAdventureNodesAction(jsonList.toChallenges()));
28 :
29 : return;
30 : }
31 :
32 0 : if (action.selection.isChallenge()) {
33 0 : var jsonList = await service.getDocuments(
34 : at: 'tasks',
35 : where: 'parentIds',
36 0 : arrayContains: (action.selection as ChallengeModel).id);
37 0 : store.dispatch(SetAdventureNodesAction(jsonList.toTasks()));
38 :
39 : return;
40 : }
41 :
42 0 : if (action.selection.isTask()) {
43 0 : var jsonList = await service.getDocuments(
44 : at: 'steps',
45 : where: 'parentIds',
46 0 : arrayContains: (action.selection as TaskModel).id);
47 0 : store.dispatch(SetAdventureNodesAction(jsonList.toSteps()));
48 :
49 : return;
50 : }
51 : } catch (error, trace) {
52 1 : store.dispatchProblem(error, trace);
53 : }
54 : });
55 : }
|