mirror of
https://github.com/priyanshujain/sanderling.git
synced 2026-10-03 19:47:10 +00:00
feat(folio): introduce Metro AppGraph in commonMain
Single shared @DependencyGraph(AppScope::class) that exposes Repository, Navigator, and ViewModels. LedgerDatabase enters the graph via @DependencyGraph.Factory.create(database) so the suspend DriverFactory.create() can stay outside the DI surface. @Binds wires SqlLedgerStore to LedgerStore; Navigator is provided explicitly so its Route.Home start state stays in DI rather than relying on a default-parameter being honored by the graph.
This commit is contained in:
1 parent
d0b1c3f07c
commit
2f1633abdf
1 file changed
+42
@@ -0,0 +1,42 @@
|
||||
package app.folio.di
|
||||
|
||||
import app.folio.core.data.LedgerStore
|
||||
import app.folio.core.data.Repository
|
||||
import app.folio.core.data.SqlLedgerStore
|
||||
import app.folio.db.LedgerDatabase
|
||||
import app.folio.feature.account.AddAccountViewModel
|
||||
import app.folio.feature.auth.LoginViewModel
|
||||
import app.folio.feature.home.HomeViewModel
|
||||
import app.folio.feature.ledger.AddTransactionViewModel
|
||||
import app.folio.feature.ledger.LedgerViewModel
|
||||
import app.folio.navigation.Navigator
|
||||
import app.folio.navigation.Route
|
||||
import dev.zacsweers.metro.AppScope
|
||||
import dev.zacsweers.metro.Binds
|
||||
import dev.zacsweers.metro.DependencyGraph
|
||||
import dev.zacsweers.metro.Provides
|
||||
import dev.zacsweers.metro.SingleIn
|
||||
|
||||
@SingleIn(AppScope::class)
|
||||
@DependencyGraph(AppScope::class)
|
||||
interface AppGraph {
|
||||
val repository: Repository
|
||||
val navigator: Navigator
|
||||
|
||||
val loginViewModel: LoginViewModel
|
||||
val homeViewModel: HomeViewModel
|
||||
val addAccountViewModel: AddAccountViewModel
|
||||
val ledgerViewModelFactory: LedgerViewModel.Factory
|
||||
val addTransactionViewModelFactory: AddTransactionViewModel.Factory
|
||||
|
||||
@Binds val SqlLedgerStore.bindLedgerStore: LedgerStore
|
||||
|
||||
@SingleIn(AppScope::class)
|
||||
@Provides
|
||||
fun provideNavigator(): Navigator = Navigator(initial = Route.Home)
|
||||
|
||||
@DependencyGraph.Factory
|
||||
fun interface Factory {
|
||||
fun create(@Provides database: LedgerDatabase): AppGraph
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user