refactor(folio): resolve ViewModels through LocalAppGraph in routes

Each *Route composable now reads the AppGraph from CompositionLocal
and pulls its VM via the appropriate accessor or AssistedFactory.
This commit is contained in:
pj committed 2026-04-26 16:05:49 +07:00
1 parent 9cadf27301
commit 02f28aeac1
5 files changed
+15 -15

No files matched your search

@@ -12,7 +12,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import app.folio.LocalAppComponent
import app.folio.di.LocalAppGraph
import app.folio.ui.BackHandler
import app.folio.ui.component.AppButton
import app.folio.ui.component.BackButton
@@ -27,8 +27,8 @@ import app.folio.ui.theme.Type
@Composable
fun AddAccountRoute() {
val component = LocalAppComponent.current
val vm: AddAccountViewModel = viewModel { AddAccountViewModel(component.repository, component.navigator) }
val graph = LocalAppGraph.current
val vm: AddAccountViewModel = viewModel { graph.addAccountViewModel }
val state by vm.state.collectAsState()
AddAccountScreen(state = state, onEvent = vm::onEvent)
}
@@ -15,7 +15,7 @@ import androidx.compose.ui.platform.testTag
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import app.folio.LocalAppComponent
import app.folio.di.LocalAppGraph
import app.folio.ui.component.AppButton
import app.folio.ui.component.ButtonStyle
import app.folio.ui.component.Card
@@ -28,8 +28,8 @@ import app.folio.ui.theme.Type
@Composable
fun LoginRoute() {
val component = LocalAppComponent.current
val vm: LoginViewModel = viewModel { LoginViewModel(component.repository, component.navigator) }
val graph = LocalAppGraph.current
val vm: LoginViewModel = viewModel { graph.loginViewModel }
val state by vm.state.collectAsState()
LoginScreen(state = state, onEvent = vm::onEvent)
}
@@ -23,7 +23,7 @@ import androidx.compose.ui.semantics.Role
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import app.folio.LocalAppComponent
import app.folio.di.LocalAppGraph
import app.folio.util.balanceOf
import app.folio.util.formatCents
import app.folio.util.initialsOf
@@ -41,8 +41,8 @@ import app.folio.ui.theme.Type
@Composable
fun HomeRoute() {
val component = LocalAppComponent.current
val vm: HomeViewModel = viewModel { HomeViewModel(component.repository, component.navigator) }
val graph = LocalAppGraph.current
val vm: HomeViewModel = viewModel { graph.homeViewModel }
val state by vm.state.collectAsState()
HomeScreen(state = state, onEvent = vm::onEvent)
}
@@ -13,8 +13,8 @@ import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import app.folio.LocalAppComponent
import app.folio.core.data.TxnType
import app.folio.di.LocalAppGraph
import app.folio.ui.BackHandler
import app.folio.ui.component.AppButton
import app.folio.ui.component.BackButton
@@ -30,9 +30,9 @@ import app.folio.ui.theme.Type
@Composable
fun AddTransactionRoute(accountId: String) {
val component = LocalAppComponent.current
val graph = LocalAppGraph.current
val vm: AddTransactionViewModel = viewModel(key = "addTxn:$accountId") {
AddTransactionViewModel(component.repository, component.navigator, accountId)
graph.addTransactionViewModelFactory.create(accountId)
}
val state by vm.state.collectAsState()
AddTransactionScreen(state = state, onEvent = vm::onEvent)
@@ -22,8 +22,8 @@ import androidx.compose.ui.platform.testTag
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import app.folio.LocalAppComponent
import app.folio.core.data.TxnType
import app.folio.di.LocalAppGraph
import app.folio.util.balanceOf
import app.folio.util.formatCents
import app.folio.util.formatDate
@@ -42,9 +42,9 @@ import app.folio.ui.theme.Type
@Composable
fun LedgerRoute(accountId: String) {
val component = LocalAppComponent.current
val graph = LocalAppGraph.current
val vm: LedgerViewModel = viewModel(key = "ledger:$accountId") {
LedgerViewModel(component.repository, component.navigator, accountId)
graph.ledgerViewModelFactory.create(accountId)
}
val state by vm.state.collectAsState()
LedgerScreen(state = state, onEvent = vm::onEvent)