Comments (2)
Pretty sure that to change store state to val state: StateFlow<State>
, the signature of fun optionalView
would have to change to something like:
fun <ViewState : Any, ViewAction : Any> optionalView(
mapToLocalState: (State) -> ViewState?,
mapToGlobalAction: (ViewAction) -> Action?
): Store<ViewState?, ViewAction>
or:
fun <ViewState : Any, ViewAction : Any> optionalView(
initialState: ViewState,
mapToLocalState: (State) -> ViewState?,
mapToGlobalAction: (ViewAction) -> Action?
): Store<ViewState, ViewAction>
When the mapToLocalState
lambda returns an optional, there is no good way (?) to provide a non-optional initial value for a stateIn()
function. For example from MutableStateFlowStore
the required mapToLocalState(state.value)!!
would cause crashes when the mapToLocalState
lambda returns null.
For example:
override fun <ViewState : Any, ViewAction : Any> optionalView(
mapToLocalState: (State) -> ViewState?,
mapToGlobalAction: (ViewAction) -> Action?
): Store<ViewState, ViewAction> = MutableStateFlowStore(
state = state.mapNotNull { mapToLocalState(it) }
.stateIn(storeScope, SharingStarted.WhileSubscribed(), mapToLocalState(state.value)!!),
sendFn = { actions ->
val globalActions = actions.mapNotNull(mapToGlobalAction)
sendFn(globalActions)
}
)
from komposable-architecture.
What sveltema said above is the reason we didn't implement this change while I was at toggl. We couldn't agree on what the API for optionalView should look like 🤔
from komposable-architecture.
Related Issues (20)
- Convert Groovy gradle files to Kotlin
- Use gradle dependency catalog
- Disable Jetifier
- Return merged effect from reducers rather than a list of effects HOT 4
- Introduce DebugReducer for build-in high quality logs
- Add ForEach composition method
- 💚 Introduce TestStore and make effects easier to test HOT 1
- Move away from Mutable<T> and return State + Effect(s) instead
- Add tests for ReducerExtension methods
- 🔥 Get rid of the current complex TODO sample app
- Code generation proposal HOT 6
- 🆙 Effects 1.0.0
- Create Todos sample app
- Create CaseStudies sample code
- Implement debounce effect modifier
- Kotlin Multiplatform HOT 8
- Broken link on README for TODO sample app
- Unable to un-complete todo in Todos Sample
- Test library doesn't provide latest changes
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from komposable-architecture.