aboutsummaryrefslogtreecommitdiff
path: root/kvision-modules/kvision-redux/src/main/kotlin/pl/treksoft/kvision
diff options
context:
space:
mode:
authorRobert Jaros <rjaros@finn.pl>2019-06-21 15:37:03 +0200
committerRobert Jaros <rjaros@finn.pl>2019-06-21 15:37:03 +0200
commit075280076d373dad01666397f7b857aad8450b7c (patch)
treebdd44a43c9594fbd6d4a418e6d5663a727a17d36 /kvision-modules/kvision-redux/src/main/kotlin/pl/treksoft/kvision
parentd9f1a90c772719d14540eb2bf7bc3b8384fa7a72 (diff)
downloadkvision-075280076d373dad01666397f7b857aad8450b7c.tar.gz
kvision-075280076d373dad01666397f7b857aad8450b7c.tar.bz2
kvision-075280076d373dad01666397f7b857aad8450b7c.zip
Simplification of the Redux module.
Diffstat (limited to 'kvision-modules/kvision-redux/src/main/kotlin/pl/treksoft/kvision')
-rw-r--r--kvision-modules/kvision-redux/src/main/kotlin/pl/treksoft/kvision/redux/ReduxStore.kt30
1 files changed, 11 insertions, 19 deletions
diff --git a/kvision-modules/kvision-redux/src/main/kotlin/pl/treksoft/kvision/redux/ReduxStore.kt b/kvision-modules/kvision-redux/src/main/kotlin/pl/treksoft/kvision/redux/ReduxStore.kt
index 246ccef5..bfe7bc50 100644
--- a/kvision-modules/kvision-redux/src/main/kotlin/pl/treksoft/kvision/redux/ReduxStore.kt
+++ b/kvision-modules/kvision-redux/src/main/kotlin/pl/treksoft/kvision/redux/ReduxStore.kt
@@ -21,11 +21,7 @@
*/
package pl.treksoft.kvision.redux
-import kotlinx.serialization.ImplicitReflectionSerializer
-import kotlinx.serialization.KSerializer
-import kotlinx.serialization.serializer
import pl.treksoft.kvision.KVManagerRedux
-import pl.treksoft.kvision.utils.JSON
import redux.RAction
import redux.Reducer
import redux.Store
@@ -43,49 +39,45 @@ typealias ActionCreator<A, S> = (Dispatch<A>, GetState<S>) -> Unit
* @param initialState an initial state
* @param middlewares a list of optional Redux JS middlewares
*/
-@UseExperimental(ImplicitReflectionSerializer::class)
-inline fun <reified S : Any, A : RAction> createReduxStore(
- noinline reducer: Reducer<S, A>,
+fun <S : Any, A : RAction> createReduxStore(
+ reducer: Reducer<S, A>,
initialState: S,
vararg middlewares: dynamic
): ReduxStore<S, A> {
@Suppress("SpreadOperator")
- return ReduxStore(reducer, initialState, S::class.serializer(), *middlewares)
+ return ReduxStore(reducer, initialState, *middlewares)
}
/**
* A class implementing redux pattern backed by the original Redux JS library.
- * It requires @Serializable state.
*
* @constructor Creates a Redux store with given reducer function and initial state.
- * @param S redux state type (@Serializable)
+ * @param S redux state type
* @param A redux action type
* @param reducer a reducer function
* @param initialState an initial state
- * @param stateSerializer a serializer for the state type
* @param middlewares a list of optional Redux JS middlewares
*/
class ReduxStore<S : Any, A : RAction>(
reducer: Reducer<S, A>,
initialState: S,
- val stateSerializer: KSerializer<S>,
vararg middlewares: dynamic
) {
- private val store: Store<String, dynamic, WrapperAction>
+ private val store: Store<S, dynamic, WrapperAction>
init {
@Suppress("UnsafeCastFromDynamic")
store = KVManagerRedux.createStore(
- { s: String, a: RAction ->
+ { s: S, a: RAction ->
@Suppress("UnsafeCastFromDynamic")
if (a == undefined || (a.asDynamic().type is String && a.asDynamic().type.startsWith("@@"))) {
s
} else {
@Suppress("UNCHECKED_CAST")
- JSON.plain.stringify(stateSerializer, reducer(JSON.plain.parse(stateSerializer, s), a as A))
+ reducer(s, a as A)
}
},
- JSON.plain.stringify(stateSerializer, initialState),
+ initialState,
@Suppress("SpreadOperator")
KVManagerRedux.compose(KVManagerRedux.applyMiddleware(KVManagerRedux.reduxThunk, *middlewares), rEnhancer())
)
@@ -95,7 +87,7 @@ class ReduxStore<S : Any, A : RAction>(
* Returns the current state.
*/
fun getState(): S {
- return JSON.plain.parse(stateSerializer, store.getState())
+ return store.getState()
}
/**
@@ -109,7 +101,7 @@ class ReduxStore<S : Any, A : RAction>(
* Dispatches an asynchronous action function.
*/
fun dispatch(actionCreator: ActionCreator<dynamic, S>): WrapperAction {
- return store.dispatch({ reduxDispatch: Dispatch<dynamic>, reduxGetState: GetState<String> ->
+ return store.dispatch({ reduxDispatch: Dispatch<dynamic>, reduxGetState: GetState<S> ->
val newDispatch: Dispatch<dynamic> = { elem ->
@Suppress("UnsafeCastFromDynamic")
if (js("typeof elem === 'function'")) {
@@ -118,7 +110,7 @@ class ReduxStore<S : Any, A : RAction>(
reduxDispatch(elem)
}
}
- actionCreator(newDispatch) { JSON.plain.parse(stateSerializer, reduxGetState()) }
+ actionCreator(newDispatch) { reduxGetState() }
})
}