diff --git a/examples/folio/app/shared/src/commonMain/kotlin/app/folio/feature/account/AddAccountViewModel.kt b/examples/folio/app/shared/src/commonMain/kotlin/app/folio/feature/account/AddAccountViewModel.kt index 5929284..0262050 100644 --- a/examples/folio/app/shared/src/commonMain/kotlin/app/folio/feature/account/AddAccountViewModel.kt +++ b/examples/folio/app/shared/src/commonMain/kotlin/app/folio/feature/account/AddAccountViewModel.kt @@ -5,6 +5,7 @@ import androidx.lifecycle.viewModelScope import app.folio.core.data.Repository import app.folio.navigation.Navigator import app.folio.navigation.Route +import dev.zacsweers.metro.Inject import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow @@ -22,6 +23,7 @@ sealed interface AddAccountEvent { data object Back : AddAccountEvent } +@Inject class AddAccountViewModel( private val repository: Repository, private val navigator: Navigator, diff --git a/examples/folio/app/shared/src/commonMain/kotlin/app/folio/feature/auth/LoginViewModel.kt b/examples/folio/app/shared/src/commonMain/kotlin/app/folio/feature/auth/LoginViewModel.kt index 72b9dcd..bcfd389 100644 --- a/examples/folio/app/shared/src/commonMain/kotlin/app/folio/feature/auth/LoginViewModel.kt +++ b/examples/folio/app/shared/src/commonMain/kotlin/app/folio/feature/auth/LoginViewModel.kt @@ -5,6 +5,7 @@ import androidx.lifecycle.viewModelScope import app.folio.core.data.Repository import app.folio.navigation.Navigator import app.folio.navigation.Route +import dev.zacsweers.metro.Inject import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow @@ -26,6 +27,7 @@ sealed interface LoginEvent { data object Submit : LoginEvent } +@Inject class LoginViewModel( private val repository: Repository, private val navigator: Navigator, diff --git a/examples/folio/app/shared/src/commonMain/kotlin/app/folio/feature/home/HomeViewModel.kt b/examples/folio/app/shared/src/commonMain/kotlin/app/folio/feature/home/HomeViewModel.kt index 75bf68d..c41d0a8 100644 --- a/examples/folio/app/shared/src/commonMain/kotlin/app/folio/feature/home/HomeViewModel.kt +++ b/examples/folio/app/shared/src/commonMain/kotlin/app/folio/feature/home/HomeViewModel.kt @@ -7,6 +7,7 @@ import app.folio.core.data.Repository import app.folio.core.data.Transaction import app.folio.navigation.Navigator import app.folio.navigation.Route +import dev.zacsweers.metro.Inject import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.combine @@ -25,6 +26,7 @@ sealed interface HomeEvent { data class OpenAccount(val accountId: String) : HomeEvent } +@Inject class HomeViewModel( private val repository: Repository, private val navigator: Navigator, diff --git a/examples/folio/app/shared/src/commonMain/kotlin/app/folio/feature/ledger/AddTransactionViewModel.kt b/examples/folio/app/shared/src/commonMain/kotlin/app/folio/feature/ledger/AddTransactionViewModel.kt index 315719a..60bc0aa 100644 --- a/examples/folio/app/shared/src/commonMain/kotlin/app/folio/feature/ledger/AddTransactionViewModel.kt +++ b/examples/folio/app/shared/src/commonMain/kotlin/app/folio/feature/ledger/AddTransactionViewModel.kt @@ -8,6 +8,9 @@ import app.folio.core.data.TxnType import app.folio.navigation.Navigator import app.folio.navigation.Route import app.folio.util.parseCents +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.AssistedInject import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow @@ -36,10 +39,11 @@ sealed interface AddTransactionEvent { data object BackToHome : AddTransactionEvent } +@AssistedInject class AddTransactionViewModel( private val repository: Repository, private val navigator: Navigator, - private val accountId: String, + @Assisted private val accountId: String, ) : ViewModel() { private val form = MutableStateFlow(AddTransactionUiState()) @@ -85,4 +89,9 @@ class AddTransactionViewModel( } } } + + @AssistedFactory + fun interface Factory { + fun create(accountId: String): AddTransactionViewModel + } } diff --git a/examples/folio/app/shared/src/commonMain/kotlin/app/folio/feature/ledger/LedgerViewModel.kt b/examples/folio/app/shared/src/commonMain/kotlin/app/folio/feature/ledger/LedgerViewModel.kt index 3aaa0d1..e5c9bae 100644 --- a/examples/folio/app/shared/src/commonMain/kotlin/app/folio/feature/ledger/LedgerViewModel.kt +++ b/examples/folio/app/shared/src/commonMain/kotlin/app/folio/feature/ledger/LedgerViewModel.kt @@ -7,6 +7,9 @@ import app.folio.core.data.Repository import app.folio.core.data.Transaction import app.folio.navigation.Navigator import app.folio.navigation.Route +import dev.zacsweers.metro.Assisted +import dev.zacsweers.metro.AssistedFactory +import dev.zacsweers.metro.AssistedInject import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.combine @@ -24,10 +27,11 @@ sealed interface LedgerEvent { data object BackToHome : LedgerEvent } +@AssistedInject class LedgerViewModel( private val repository: Repository, private val navigator: Navigator, - private val accountId: String, + @Assisted private val accountId: String, ) : ViewModel() { val state: StateFlow = combine( repository.accounts, @@ -49,4 +53,9 @@ class LedgerViewModel( LedgerEvent.BackToHome -> navigator.replace(Route.Home) } } + + @AssistedFactory + fun interface Factory { + fun create(accountId: String): LedgerViewModel + } }