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