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 '../../app_state.dart';
6 : import '../actions/create_adventure_node_action.dart';
7 :
8 : class CreateAdventureNodeMiddleware
9 : extends TypedMiddleware<AppState, CreateAdventureNodeAction> {
10 1 : CreateAdventureNodeMiddleware()
11 2 : : super((store, action, next) async {
12 1 : next(action);
13 :
14 : try {
15 4 : var uid = store.state.auth.userData?.uid;
16 : if (uid == null) return;
17 :
18 1 : var service = RedFireLocator.getDatabaseService();
19 :
20 3 : if (store.state.adventures.selected == null) {
21 3 : await service.createDocument(at: 'adventures', from: {
22 1 : 'ownerIds': [uid],
23 1 : 'name': action.name
24 : });
25 : return;
26 : }
27 :
28 3 : if (store.state.challenges.selected == null) {
29 3 : await service.createDocument(at: 'challenges', from: {
30 1 : 'ownerIds': [uid],
31 1 : 'name': action.name,
32 5 : 'parentIds': [store.state.adventures.selected!.id]
33 : });
34 :
35 : return;
36 : }
37 :
38 3 : if (store.state.tasks.selected == null) {
39 3 : await service.createDocument(at: 'tasks', from: {
40 1 : 'ownerIds': [uid],
41 1 : 'name': action.name,
42 5 : 'parentIds': [store.state.challenges.selected!.id]
43 : });
44 :
45 : return;
46 : }
47 :
48 3 : if (store.state.steps.selected == null) {
49 3 : await service.createDocument(at: 'steps', from: {
50 1 : 'ownerIds': [uid],
51 1 : 'name': action.name,
52 5 : 'parentIds': [store.state.tasks.selected!.id]
53 : });
54 :
55 : return;
56 : }
57 : } catch (error, trace) {
58 1 : store.dispatchProblem(error, trace);
59 : }
60 : });
61 : }
|