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
14 changes: 9 additions & 5 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.vanniktech.maven.publish.SonatypeHost
import fr.brouillard.oss.jgitver.Strategies
import love.forte.plugin.suspendtrans.configuration.SuspendTransformConfigurations.kotlinJsExportIgnoreClassInfo
import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
import org.jetbrains.kotlin.gradle.targets.native.tasks.KotlinNativeSimulatorTest
import ru.vyarus.gradle.plugin.mkdocs.task.MkdocsTask
Expand All @@ -17,8 +18,7 @@ plugins {
alias(libs.plugins.dokka)
alias(libs.plugins.mkdocs)
alias(libs.plugins.jgitver)
alias(libs.plugins.ksp)
alias(libs.plugins.ktorfit)
alias(libs.plugins.suspendTransformCompiler)
id("maven-publish")
}

Expand Down Expand Up @@ -85,7 +85,6 @@ kotlin {
implementation(libs.kotlinx.serialization.json)
implementation(libs.ktor.client.content.negotiation)
implementation(libs.ktor.serialization.kotlinx.json)
implementation(libs.ktorfit)
}

val nonJsMain by creating { dependsOn(commonMain.get()) }
Expand Down Expand Up @@ -123,8 +122,13 @@ kotlin {
}
}

// Gradle complains if we don't have this; unclear why.
tasks.getByName("sourcesJar").dependsOn("kspCommonMainKotlinMetadata")
suspendTransformPlugin {
transformers {
addJvmAsync()
addJvmBlocking()
addJsPromise { addCopyAnnotationExclude { from(kotlinJsExportIgnoreClassInfo) } }
}
}

// Standalone mode is missing certificates, which causes our LiveTest to fail.
// This should resolve it but requires us to start the simulator(s) beforehand.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,26 +1,11 @@
package co.pokeapi.pokekotlin.demoapp

import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.consumeWindowInsets
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.ColorScheme
import androidx.compose.material3.ListItem
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextOverflow
Expand Down Expand Up @@ -67,7 +52,7 @@ fun PokemonList(padding: PaddingValues, pokemon: NamedApiResourceList) {
LazyColumn(contentPadding = padding) {
items(pokemon.results) { summary ->
var result by remember { mutableStateOf<Result<PokemonSpecies>?>(null) }
LaunchedEffect(Unit) { result = PokeApi.getPokemonSpecies(summary.id) }
LaunchedEffect(Unit) { result = runCatching { PokeApi.getPokemonSpecies(summary.id) } }
result
?.onSuccess { PokemonListItem(it) }
?.onFailure { PokemonListItemError(summary, it.message ?: "Unknown error") }
Expand Down Expand Up @@ -104,16 +89,15 @@ fun DemoApp() {
topBar = { TopAppBar(title = { Text("PokeKotlin Demo") }) },
content = { innerPadding ->
var result by remember { mutableStateOf<Result<NamedApiResourceList>?>(null) }
LaunchedEffect(Unit) { result = PokeApi.getPokemonSpeciesList(0, 100000) }
when {
result == null -> CenteredLoading(innerPadding)
result!!.isSuccess -> PokemonList(innerPadding, result!!.getOrThrow())
result!!.isFailure ->
LaunchedEffect(Unit) { result = runCatching { PokeApi.getPokemonSpeciesList(0, 100000) } }
result
?.onSuccess { PokemonList(innerPadding, it) }
?.onFailure {
ErrorMessage(
padding = innerPadding,
message = result!!.exceptionOrNull()!!.message ?: "Unknown error",
)
}
} ?: CenteredLoading(innerPadding)
},
)
}
Expand Down
7 changes: 2 additions & 5 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,12 @@ ktor = "3.1.3"
gradle-android = "8.7.2"
gradle-compose = "1.8.1"
gradle-kotlin = "2.1.21"
gradle-ksp = "2.1.21-2.0.1" # first part is Kotlin version
gradle-ktorfit = "2.5.2"
gradle-dokka = "2.0.0"
gradle-jgitver = "0.10.0-rc03"
gradle-mavenPublish = "0.32.0"
gradle-mkdocs = "4.0.1"
gradle-spotless = "7.0.4"
gradle-suspendTransformCompiler = "2.1.20-0.12.0"
tool-prettier = "3.5.3"

[libraries]
Expand All @@ -26,7 +25,6 @@ kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutine
kotlinx-coroutines-swing = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-swing", version.ref = "kotlinx-coroutines" }
kotlinx-io = { module = "org.jetbrains.kotlinx:kotlinx-io-core", version.ref = "kotlinx-io" }
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinx-serialization" }
ktorfit = { module = "de.jensklingenberg.ktorfit:ktorfit-lib", version.ref = "gradle-ktorfit" }
ktor-client-okhttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "ktor" }
ktor-client-darwin = { module = "io.ktor:ktor-client-darwin", version.ref = "ktor" }
ktor-client-winhttp = { module = "io.ktor:ktor-client-winhttp", version.ref = "ktor" }
Expand All @@ -44,8 +42,7 @@ jgitver = { id = "fr.brouillard.oss.gradle.jgitver", version.ref = "gradle-jgitv
kotlin-composeCompiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "gradle-kotlin" }
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "gradle-kotlin" }
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "gradle-kotlin" }
ksp = { id = "com.google.devtools.ksp", version.ref = "gradle-ksp" }
ktorfit = { id = "de.jensklingenberg.ktorfit", version.ref = "gradle-ktorfit" }
mavenPublish = { id = "com.vanniktech.maven.publish", version.ref = "gradle-mavenPublish" }
mkdocs = { id = "ru.vyarus.mkdocs-build", version.ref = "gradle-mkdocs" }
spotless = { id = "com.diffplug.spotless", version.ref = "gradle-spotless" }
suspendTransformCompiler = { id = "love.forte.plugin.suspend-transform", version.ref = "gradle-suspendTransformCompiler" }
Loading
Loading