jwstegemann / fritz2

Easily build reactive web-apps in Kotlin based on flows and coroutines.
https://www.fritz2.dev
MIT License
627 stars 25 forks source link

Avoid events in flatMapLatest #830

Closed metin-kale closed 6 months ago

metin-kale commented 6 months ago

The current code contains lots of statements like

state.flatMapLatest { value ->
    clicks.map { ... }
} handledBy ...

The problem here is, that

  1. the listener is attached after a minimal delay
  2. event-calls might get lost, because the outer flow changes

For flows, which represent a state, it should be no problem to use flatMapLatest, but because events are one-shot operations, they should not be used within another flow transformation. While it seems to work for normal usage, it causes lots of problems for automated ui-tests e.g. using playwright. Actions might get lost or are not ready yet, what causes failing/flaky tests.

With this PR i replaced all event-Flows within Flow-Transformations i could found. The replacement always a followed similiar pattern. The above example code would be

clicks.map {
     val value = state.first()
     ...
} handledBy ...

Or if state is the flow of a store, i used Store.current rather than first()