Coverage Summary for Class: ViewModelModule (com.vsevolodganin.clicktrack.di.module)
| Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| ViewModelModule$BindsMirror |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/2)
|
| ViewModelModule$Companion |
0%
(0/5)
|
|
0%
(0/8)
|
0%
(0/39)
|
| ViewModelModule$Companion$ProvideDrawerNavigationImplMetroFactory |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/8)
|
| ViewModelModule$Companion$ProvideDrawerViewModelMetroFactory |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/18)
|
| ViewModelModule$Companion$ProvideDrawerViewModelMetroFactory$Companion |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/13)
|
| ViewModelModule$Companion$ProvideScreenStackNavigationMetroFactory |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/8)
|
| ViewModelModule$Companion$ProvideScreenStackStateMetroFactory |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/25)
|
| ViewModelModule$Companion$ProvideScreenStackStateMetroFactory$Companion |
0%
(0/1)
|
|
0%
(0/1)
|
0%
(0/15)
|
| Total |
0%
(0/12)
|
|
0%
(0/15)
|
0%
(0/128)
|
package com.vsevolodganin.clicktrack.di.module
import com.arkivanov.decompose.ComponentContext
import com.arkivanov.decompose.childContext
import com.arkivanov.decompose.router.stack.StackNavigation
import com.arkivanov.decompose.router.stack.childStack
import com.arkivanov.essenty.instancekeeper.InstanceKeeperOwner
import com.arkivanov.essenty.lifecycle.LifecycleOwner
import com.arkivanov.essenty.statekeeper.StateKeeperOwner
import com.vsevolodganin.clicktrack.ScreenConfiguration
import com.vsevolodganin.clicktrack.ScreenStackNavigation
import com.vsevolodganin.clicktrack.ScreenStackState
import com.vsevolodganin.clicktrack.ScreenViewModelFactory
import com.vsevolodganin.clicktrack.di.component.MainControllerScope
import com.vsevolodganin.clicktrack.drawer.DrawerNavigation
import com.vsevolodganin.clicktrack.drawer.DrawerNavigationImpl
import com.vsevolodganin.clicktrack.drawer.DrawerNavigationSource
import com.vsevolodganin.clicktrack.drawer.DrawerViewModel
import com.vsevolodganin.clicktrack.drawer.DrawerViewModelImpl
import dev.zacsweers.metro.BindingContainer
import dev.zacsweers.metro.Binds
import dev.zacsweers.metro.ContributesTo
import dev.zacsweers.metro.Provides
import dev.zacsweers.metro.SingleIn
import kotlinx.serialization.serializer
@ContributesTo(MainControllerScope::class)
@BindingContainer
interface ViewModelModule {
@Binds
fun provideLifecycleOwner(componentContext: ComponentContext): LifecycleOwner
@Binds
fun provideStateKeeperOwner(componentContext: ComponentContext): StateKeeperOwner
@Binds
fun provideInstanceKeeperOwner(componentContext: ComponentContext): InstanceKeeperOwner
@Binds
fun provideDrawerNavigation(drawerNavigationImpl: DrawerNavigationImpl): DrawerNavigation
@Binds
fun provideDrawerNavigationSource(drawerNavigationImpl: DrawerNavigationImpl): DrawerNavigationSource
companion object {
@Provides
@SingleIn(MainControllerScope::class)
fun provideDrawerNavigationImpl(): DrawerNavigationImpl = DrawerNavigationImpl()
@Provides
@SingleIn(MainControllerScope::class)
fun provideScreenStackNavigation(): ScreenStackNavigation = StackNavigation()
@Provides
@SingleIn(MainControllerScope::class)
fun provideScreenStackState(
componentContext: ComponentContext,
stackNavigation: ScreenStackNavigation,
screenViewModelFactory: ScreenViewModelFactory,
): ScreenStackState = componentContext.childStack(
source = stackNavigation,
initialStack = { listOf(ScreenConfiguration.ClickTrackList) },
childFactory = screenViewModelFactory::create,
serializer = serializer(),
)
@Provides
@SingleIn(MainControllerScope::class)
fun provideDrawerViewModel(
componentContext: ComponentContext,
drawerViewModelFactory: DrawerViewModelImpl.Factory,
): DrawerViewModel = drawerViewModelFactory.create(componentContext.childContext("Drawer"))
}
}