11package com.yogeshpaliyal.keypass.ui.redux
22
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
38import com.yogeshpaliyal.keypass.ui.redux.actions.BatchActions
49import com.yogeshpaliyal.keypass.ui.redux.actions.BottomSheetAction
510import com.yogeshpaliyal.keypass.ui.redux.actions.GoBackAction
@@ -16,7 +21,9 @@ import com.yogeshpaliyal.keypass.ui.redux.states.KeyPassState
1621import com.yogeshpaliyal.keypass.ui.redux.states.ScreenState
1722import com.yogeshpaliyal.keypass.ui.redux.states.generateDefaultState
1823import org.reduxkotlin.Reducer
24+ import org.reduxkotlin.TypedStore
1925import org.reduxkotlin.applyMiddleware
26+ import org.reduxkotlin.compose.rememberStore
2027import org.reduxkotlin.createStore
2128
2229object KeyPassRedux {
@@ -100,3 +107,44 @@ object KeyPassRedux {
100107 applyMiddleware(utilityMiddleware, intentNavigationMiddleware)
101108 )
102109}
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