1
1
package com.github.skyfe79.android.reactcomponentkit.redux
2
2
3
- import io.reactivex.Observable
4
3
import io.reactivex.Single
5
- import io.reactivex.android.schedulers.AndroidSchedulers
6
4
import io.reactivex.disposables.CompositeDisposable
7
5
import io.reactivex.plugins.RxJavaPlugins
8
6
import io.reactivex.rxkotlin.subscribeBy
@@ -14,6 +12,7 @@ class Store<S: State> {
14
12
lateinit var state: S
15
13
private set
16
14
private lateinit var reducers: Array <Reducer <S >>
15
+ private lateinit var reducers2: MutableMap <Action , List <Reducer2 <S >>>
17
16
private lateinit var afters: Array <After <S >>
18
17
private val disposables = CompositeDisposable ()
19
18
@@ -30,15 +29,21 @@ class Store<S: State> {
30
29
afters : Array <After <S >> = emptyArray()) {
31
30
this .state = initialState
32
31
this .reducers = reducers
32
+ this .reducers2 = mutableMapOf ()
33
33
this .afters = afters
34
34
}
35
35
36
36
fun deinitialize () {
37
37
reducers = emptyArray()
38
+ reducers2 = mutableMapOf ()
38
39
afters = emptyArray()
39
40
disposables.clear()
40
41
}
41
42
43
+ fun map (action : Action , vararg r : Reducer2 <S >) {
44
+ reducers2[action] = r.toList()
45
+ }
46
+
42
47
/* *
43
48
* Do something after dispatching new state.
44
49
* For example, reset route on Android
@@ -55,12 +60,12 @@ class Store<S: State> {
55
60
return Single .create { single ->
56
61
// reset error
57
62
this @Store.state.error = null
58
-
59
- val disposable = reducers .toObservable()
63
+ val reducersForAction : List < Reducer2 < S >> = reducers2[action] ? : emptyList()
64
+ val disposable = reducersForAction .toObservable()
60
65
.subscribeOn(Schedulers .single())
61
66
.observeOn(Schedulers .single())
62
67
.map { reducer ->
63
- reducer(action )
68
+ reducer(this @Store.state )
64
69
}
65
70
.doOnNext { modifiedState ->
66
71
this @Store.state = modifiedState
0 commit comments