Ivan Pavlov
09/28/2021, 9:07 PMbind
function, probably I just don't understand how should I work with it. Details in threadIvan Pavlov
09/28/2021, 9:07 PMval restaurantsState = MutableStateFlow(listOf<RestaurantDto>())
val selectedRestaurantBind = MutableStateFlow<String?>(null)
val selectedRestaurantSubscribe = MutableStateFlow<String?>(null)
root("kvapp") {
select(label = "Restaurant bind").bind(restaurantsState.observableState) { restaurants ->
options = restaurants.map { it.id.value to it.name }
}.bindTo(selectedRestaurantBind)
select(label = "Restaurant subscribe") {
restaurantsState.observableState.subscribe { restaurants ->
options = restaurants.map { it.id.value to it.name }
}
}.bindTo(selectedRestaurantSubscribe)
listTag(ListType.UL).bindEach(restaurantsState) { restaurant ->
+restaurant.name
}
button("Add restaurant") {
var count = 0
onClick {
restaurantsState.update { it + RestaurantDto(RestaurantId(count.toString()), "Restaurant $count") }
count++
}
}
}
Whenever I click the "Add restaurant" button, new restaurant does not appear in "Restaurant bind" select and appears in "Restaurant subscribe". In fact, "Restaurant bind" contains previous state, so if I add 3 restaurants it shows "Restaurant 0" and "Restaurant 1".
What am I doing wrong and what should I do for such use case?Ivan Pavlov
09/28/2021, 9:25 PMlistTag(ListType.UL)
.bind(restaurantsState) { restaurants ->
elements = restaurants.map { it.name }
}
List tag renders all items properly with the similar approachRobert Jaros
09/29/2021, 4:35 AMRobert Jaros
09/29/2021, 4:36 AMselect
with simpleSelect
component.Robert Jaros
09/29/2021, 4:36 AMSelect
component.Robert Jaros
09/29/2021, 4:38 AMIvan Pavlov
09/29/2021, 7:59 AMsimpleSelect
it works fine. I created an issue https://github.com/rjaros/kvision/issues/312Robert Jaros
09/29/2021, 12:14 PM