Skip to content

Commit ecc1c2d

Browse files
authored
refactor resource handles to be generic (#153)
1 parent 91c5845 commit ecc1c2d

File tree

37 files changed

+1158
-1175
lines changed

37 files changed

+1158
-1175
lines changed

build.gradle.kts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,11 @@ kotlin {
3535
compilerOptions {
3636
optIn = listOf("kotlin.js.ExperimentalJsExport")
3737
allWarningsAsErrors = true
38-
freeCompilerArgs.addAll("-Xexpect-actual-classes", "-Xconsistent-data-class-copy-visibility")
38+
freeCompilerArgs.addAll(
39+
"-Xexpect-actual-classes",
40+
"-Xcontext-sensitive-resolution",
41+
"-Xconsistent-data-class-copy-visibility",
42+
)
3943
}
4044

4145
jvm()

demo-app/src/commonMain/kotlin/co/pokeapi/pokekotlin/demoapp/screens/PokemonListScreen.kt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import androidx.lifecycle.ViewModel
2121
import androidx.lifecycle.viewModelScope
2222
import co.pokeapi.pokekotlin.PokeApi
2323
import co.pokeapi.pokekotlin.demoapp.util.ioDispatcher
24-
import co.pokeapi.pokekotlin.model.NamedApiResource
24+
import co.pokeapi.pokekotlin.model.Handle
2525
import co.pokeapi.pokekotlin.model.PokemonVariety
2626
import coil3.compose.AsyncImage
2727
import kotlinx.coroutines.launch
@@ -36,13 +36,13 @@ sealed interface LoadingStatus<out T> {
3636
data object Loading : LoadingStatus<Nothing>
3737
}
3838

39-
typealias PokemonListStatus = LoadingStatus<List<NamedApiResource>>
39+
typealias PokemonListStatus = LoadingStatus<List<Handle.Named<PokemonVariety>>>
4040

4141
typealias PokemonListItemStatus = LoadingStatus<PokemonVariety>
4242

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

4747
init {
4848
loadPokemonList()
@@ -65,7 +65,7 @@ class PokemonListScreenViewModel(private val api: PokeApi) : ViewModel() {
6565
}
6666
}
6767

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

@@ -127,7 +127,10 @@ fun PokemonListScreen(viewModel: PokemonListScreenViewModel = koinViewModel()) {
127127
}
128128

129129
@Composable
130-
private fun PokemonListItem(viewModel: PokemonListScreenViewModel, item: NamedApiResource) {
130+
private fun PokemonListItem(
131+
viewModel: PokemonListScreenViewModel,
132+
item: Handle.Named<PokemonVariety>,
133+
) {
131134
LaunchedEffect(item) { viewModel.loadPokemonDetails(item) }
132135

133136
Card(modifier = Modifier.padding(8.dp).fillMaxWidth()) {

0 commit comments

Comments
 (0)