Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,11 @@ kotlin {
compilerOptions {
optIn = listOf("kotlin.js.ExperimentalJsExport")
allWarningsAsErrors = true
freeCompilerArgs.addAll("-Xexpect-actual-classes", "-Xconsistent-data-class-copy-visibility")
freeCompilerArgs.addAll(
"-Xexpect-actual-classes",
"-Xcontext-sensitive-resolution",
"-Xconsistent-data-class-copy-visibility",
)
}

jvm()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import co.pokeapi.pokekotlin.PokeApi
import co.pokeapi.pokekotlin.demoapp.util.ioDispatcher
import co.pokeapi.pokekotlin.model.NamedApiResource
import co.pokeapi.pokekotlin.model.Handle
import co.pokeapi.pokekotlin.model.PokemonVariety
import coil3.compose.AsyncImage
import kotlinx.coroutines.launch
Expand All @@ -36,13 +36,13 @@ sealed interface LoadingStatus<out T> {
data object Loading : LoadingStatus<Nothing>
}

typealias PokemonListStatus = LoadingStatus<List<NamedApiResource>>
typealias PokemonListStatus = LoadingStatus<List<Handle.Named<PokemonVariety>>>

typealias PokemonListItemStatus = LoadingStatus<PokemonVariety>

class PokemonListScreenViewModel(private val api: PokeApi) : ViewModel() {
val summaries = mutableStateOf<PokemonListStatus>(LoadingStatus.Loading)
val details = mutableStateMapOf<NamedApiResource, PokemonListItemStatus>()
val details = mutableStateMapOf<Handle<PokemonVariety>, PokemonListItemStatus>()

init {
loadPokemonList()
Expand All @@ -65,7 +65,7 @@ class PokemonListScreenViewModel(private val api: PokeApi) : ViewModel() {
}
}

fun loadPokemonDetails(pokemon: NamedApiResource) {
fun loadPokemonDetails(pokemon: Handle<PokemonVariety>) {
if (details[pokemon] == LoadingStatus.Loading || details[pokemon] is LoadingStatus.Success)
return // Already loading or loaded

Expand Down Expand Up @@ -127,7 +127,10 @@ fun PokemonListScreen(viewModel: PokemonListScreenViewModel = koinViewModel()) {
}

@Composable
private fun PokemonListItem(viewModel: PokemonListScreenViewModel, item: NamedApiResource) {
private fun PokemonListItem(
viewModel: PokemonListScreenViewModel,
item: Handle.Named<PokemonVariety>,
) {
LaunchedEffect(item) { viewModel.loadPokemonDetails(item) }

Card(modifier = Modifier.padding(8.dp).fillMaxWidth()) {
Expand Down
Loading
Loading