sigmadelta
09/27/2024, 8:25 AMsigmadelta
09/27/2024, 8:29 AMwhen (input) {
is ExploreScreenContract.Inputs.InitMainScreen -> {
sideJob("LoadDraftRoutes") {
postInput(ExploreScreenContract.Inputs.LoadDraftRoutes)
}
sideJob("LoadUserRoutes") {
postInput(ExploreScreenContract.Inputs.LoadUserRoutes)
}
sideJob("LoadPublicRoutes") {
postInput(ExploreScreenContract.Inputs.LoadPublicRoutes)
}
}
My original approach was just having a LaunchedEffect(Unit)
inside of the main composable which posts the 3 inputs, but there I crashed into the LIFO issue. In this latter case I really thought that creating a sidejob for all 3 inputs would resolve it but even then I still get the child cancellation exception. Is changing the strategy to FIFO really the only option when you encounter a case such as this one?Casey Brooks
09/27/2024, 2:17 PMwhen (input) {
is ExploreScreenContract.Inputs.InitMainScreen -> {
sideJob("LoadDraftRoutes") {
val draftRoutesResponse = getDraftRoutesFromLocalStorage()
postInput(ExploreScreenContract.Inputs.DraftRoutesLoaded(draftRoutesResponse))
}
sideJob("LoadUserRoutes") {
val userRoutesResponse = getUserRoutesFromAuthenticatedApi()
postInput(ExploreScreenContract.Inputs.UserRoutesLoaded(userRoutesResponse))
}
sideJob("LoadPublicRoutes") {
val publicRoutesResponse = getPublicRoutesFromPublicApi()
postInput(ExploreScreenContract.Inputs.PublicRoutesLoaded(publicRoutesResponse))
}
}
is ExploreScreenContract.Inputs.DraftRoutesLoaded -> {
updateState { it.copy(draftRoutes = input.routes) }
}
is ExploreScreenContract.Inputs.UserRoutesLoaded -> {
updateState { it.copy(userRoutes = input.routes) }
}
is ExploreScreenContract.Inputs.PublicRoutesLoaded -> {
updateState { it.copy(publicRoutes = input.routes) }
}
}
suspend fun getDraftRoutesFromLocalStorage() { ... }
suspend fun getUserRoutesFromAuthenticatedApi() { ... }
suspend fun getPublicRoutesFromPublicApi() { ... }
rocketraman
09/27/2024, 5:25 PMsigmadelta
09/29/2024, 7:10 PMsigmadelta
09/29/2024, 7:13 PMInitMainScreen
to be interpreted as FIFO and the rest of the of the inputs as LIFO. Would this require creating a separate Input-/EventHandler + ViewModel trio or can the scoping f.e. be done by input?rocketraman
09/30/2024, 1:14 PMCasey Brooks
10/01/2024, 3:43 PM