electrolobzik
03/19/2024, 5:18 PMrouter
which could make this logging, I am looking in direction of making a copy of DefaultStackNavigation
but I really don’t like this solution much. Also it doesn’t cover slot navigation and has a lot of other cons.Arkadii Ivanov
03/19/2024, 5:28 PMArkadii Ivanov
03/19/2024, 5:30 PMelectrolobzik
03/19/2024, 5:33 PMelectrolobzik
03/19/2024, 5:33 PMelectrolobzik
03/19/2024, 5:35 PMelectrolobzik
03/19/2024, 5:51 PMArkadii Ivanov
03/19/2024, 5:53 PMchildren
extension function would be part of the ComponentContext interface. In this case one could create a custom component context and wrap the children call. I will think about it, but currently this looks overcomplicated.electrolobzik
03/19/2024, 6:00 PMchildStack
method which will allow to pass a lambda for logging stack changes?electrolobzik
03/19/2024, 6:02 PMArkadii Ivanov
03/19/2024, 6:06 PMMaybe it’s possible to add a parameter to childStack method which will allow to pass a lambda for logging stack changes?
This is essentially equivalent to creating a custom wrapper for StackNavigation. This could be as simple as
val nav = LoggingStackNavigation<Config>()
electrolobzik
03/19/2024, 6:07 PMDefaultStackNavigation
?Arkadii Ivanov
03/19/2024, 6:08 PMval nav = StackNavigation<Config>()
val stack = childStack(source = nav.logged(), ...)
Arkadii Ivanov
03/19/2024, 6:09 PMelectrolobzik
03/19/2024, 6:10 PMArkadii Ivanov
03/19/2024, 7:08 PMclass LoggingStackNavigation<C : Any>(
private val delegate: StackNavigation<C> = StackNavigation(),
) : StackNavigation<C>, StackNavigationSource<C> by delegate {
override fun navigate(
transformer: (stack: List<C>) -> List<C>,
onComplete: (newStack: List<C>, oldStack: List<C>) -> Unit,
) {
delegate.navigate(transformer) { newStack, oldStack ->
println("Stack changed to $newStack. Old stack: $oldStack.")
onComplete(newStack, oldStack)
}
}
}