1
1
package com.yogeshpaliyal.keypass.ui.redux
2
2
3
+ import androidx.compose.runtime.Composable
4
+ import androidx.compose.runtime.DisallowComposableCalls
5
+ import androidx.compose.runtime.DisposableEffect
6
+ import androidx.compose.runtime.mutableStateOf
7
+ import androidx.compose.runtime.remember
3
8
import com.yogeshpaliyal.keypass.ui.redux.actions.BatchActions
4
9
import com.yogeshpaliyal.keypass.ui.redux.actions.BottomSheetAction
5
10
import com.yogeshpaliyal.keypass.ui.redux.actions.GoBackAction
@@ -16,7 +21,9 @@ import com.yogeshpaliyal.keypass.ui.redux.states.KeyPassState
16
21
import com.yogeshpaliyal.keypass.ui.redux.states.ScreenState
17
22
import com.yogeshpaliyal.keypass.ui.redux.states.generateDefaultState
18
23
import org.reduxkotlin.Reducer
24
+ import org.reduxkotlin.TypedStore
19
25
import org.reduxkotlin.applyMiddleware
26
+ import org.reduxkotlin.compose.rememberStore
20
27
import org.reduxkotlin.createStore
21
28
22
29
object KeyPassRedux {
@@ -100,3 +107,44 @@ object KeyPassRedux {
100
107
applyMiddleware(utilityMiddleware, intentNavigationMiddleware)
101
108
)
102
109
}
110
+
111
+
112
+
113
+ /* *
114
+ * * These are function copied from
115
+ * * https://github.com/reduxkotlin/redux-kotlin-compose/blob/master/redux-kotlin-compose/src/commonMain/kotlin/org/reduxkotlin/compose/selectState.kt
116
+ * Selects a value from the local store.
117
+ * @param selector to extract the value
118
+ * @param State state type
119
+ * @param Slice extracted value type
120
+ * @return selected value
121
+ */
122
+ @Composable
123
+ public inline fun <reified State , Slice > selectState (
124
+ crossinline selector : @DisallowComposableCalls State .() -> Slice
125
+ ): androidx.compose.runtime.State <Slice > {
126
+ return rememberStore<State >().selectState(selector)
127
+ }
128
+
129
+ /* *
130
+ * These are function copied from
131
+ * https://github.com/reduxkotlin/redux-kotlin-compose/blob/master/redux-kotlin-compose/src/commonMain/kotlin/org/reduxkotlin/compose/selectState.kt
132
+ *
133
+ * Selects a value from the local store.
134
+ * @receiver a store to extract the value from
135
+ * @param selector to extract the value
136
+ * @param State state type
137
+ * @param Slice extracted value type
138
+ * @return selected value
139
+ */
140
+ @Composable
141
+ public inline fun <State , Slice > TypedStore <State , * >.selectState (
142
+ crossinline selector : @DisallowComposableCalls State .() -> Slice
143
+ ): androidx.compose.runtime.State <Slice > {
144
+ val result = remember { mutableStateOf(state.selector()) }
145
+ DisposableEffect (result) {
146
+ val unsubscribe = subscribe { result.value = state.selector() }
147
+ onDispose(unsubscribe)
148
+ }
149
+ return result
150
+ }
0 commit comments