diff --git a/android/build.gradle.kts b/android/build.gradle.kts index c7655f2c..cc155e30 100644 --- a/android/build.gradle.kts +++ b/android/build.gradle.kts @@ -23,7 +23,7 @@ dependencies { implementation(libs.voyager.core) implementation(libs.voyager.navigation) implementation(libs.voyager.transitions) - implementation(libs.voyager.androidx) + implementation(libs.voyager.screenmodel) implementation(libs.accompanist.pager) implementation(libs.accompanist.pagerIndicators) implementation(libs.accompanist.flowLayout) @@ -68,6 +68,10 @@ dependencies { implementation(libs.ktorfit.lib) ksp(libs.ktorfit.ksp) + // Apollo GraphQL + implementation(libs.apollo.runtime) + implementation(libs.apollo.engine.ktor) + // Logging implementation(libs.logging.kmlogging) diff --git a/data/build.gradle.kts b/data/build.gradle.kts index 3c0e334e..1914894b 100644 --- a/data/build.gradle.kts +++ b/data/build.gradle.kts @@ -6,6 +6,7 @@ plugins { id(libs.plugins.ksp.get().pluginId) id(libs.plugins.buildkonfig.get().pluginId) id(libs.plugins.kotlinter.get().pluginId) + id(libs.plugins.ktorfit.get().pluginId) id(libs.plugins.apollo.get().pluginId) } @@ -128,5 +129,9 @@ apollo { packageName.set("ca.gosyer.jui.data.graphql") generateMethods.set(listOf("equalsHashCode")) mapScalar("LongString","kotlin.Long", "ca.gosyer.jui.data.scalars.LongStringScalar") + introspection { + endpointUrl.set("http://localhost:4567/api/graphql") + schemaFile.set(file("src/main/graphql/schema.graphqls")) + } } } diff --git a/data/src/commonMain/kotlin/ca/gosyer/jui/data/DataComponent.kt b/data/src/commonMain/kotlin/ca/gosyer/jui/data/DataComponent.kt index 65b7ce6d..a6d27930 100644 --- a/data/src/commonMain/kotlin/ca/gosyer/jui/data/DataComponent.kt +++ b/data/src/commonMain/kotlin/ca/gosyer/jui/data/DataComponent.kt @@ -21,8 +21,11 @@ import ca.gosyer.jui.domain.settings.service.SettingsRepository import ca.gosyer.jui.domain.source.service.SourceRepository import ca.gosyer.jui.domain.updates.service.UpdatesRepository import com.apollographql.apollo3.ApolloClient +import com.apollographql.apollo3.annotations.ApolloExperimental import com.apollographql.apollo3.network.ktorClient import de.jensklingenberg.ktorfit.Ktorfit +import io.ktor.http.URLBuilder +import io.ktor.http.appendPathSegments import me.tatarka.inject.annotations.Provides interface DataComponent { @@ -37,12 +40,17 @@ interface DataComponent { .baseUrl(serverPreferences.serverUrl().get().toString().addSuffix('/')) .build() + @OptIn(ApolloExperimental::class) @Provides fun apolloClient( http: Http, serverPreferences: ServerPreferences, ) = ApolloClient.Builder() - .serverUrl(serverPreferences.serverUrl().get().toString()) + .serverUrl( + URLBuilder(serverPreferences.serverUrl().get()) + .appendPathSegments("api", "graphql") + .buildString() + ) .ktorClient(http) .build() diff --git a/desktop/build.gradle.kts b/desktop/build.gradle.kts index 67dce008..4557ff2f 100644 --- a/desktop/build.gradle.kts +++ b/desktop/build.gradle.kts @@ -32,6 +32,7 @@ dependencies { implementation(libs.voyager.core) implementation(libs.voyager.navigation) implementation(libs.voyager.transitions) + implementation(libs.voyager.screenmodel) implementation(libs.accompanist.pager) implementation(libs.accompanist.pagerIndicators) implementation(libs.accompanist.flowLayout) @@ -67,6 +68,10 @@ dependencies { implementation(libs.ktorfit.lib) ksp(libs.ktorfit.ksp) + // Apollo GraphQL + implementation(libs.apollo.runtime) + implementation(libs.apollo.engine.ktor) + // Logging implementation(libs.logging.slf4j.api) implementation(libs.logging.slf4j.jul) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index bfb6108e..7358102f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,7 +10,7 @@ json = "1.6.3" composeGradle = "1.6.1" # Compose Libraries -voyager = "1.0.0-rc10" +voyager = "1.0.0" accompanist = "0.30.1" googleAccompanist = "0.30.1" imageloader = "1.7.8" @@ -91,7 +91,7 @@ serialization-json-okio = { module = "org.jetbrains.kotlinx:kotlinx-serializatio voyager-core = { module = "cafe.adriel.voyager:voyager-core", version.ref = "voyager" } voyager-navigation = { module = "cafe.adriel.voyager:voyager-navigator", version.ref = "voyager" } voyager-transitions = { module = "cafe.adriel.voyager:voyager-transitions", version.ref = "voyager" } -voyager-androidx = { module = "cafe.adriel.voyager:voyager-androidx", version.ref = "voyager" } +voyager-screenmodel = { module = "cafe.adriel.voyager:voyager-screenmodel", version.ref = "voyager" } accompanist-pager = { module = "ca.gosyer:accompanist-pager", version.ref = "accompanist" } accompanist-pagerIndicators = { module = "ca.gosyer:accompanist-pager-indicators", version.ref = "accompanist" } accompanist-flowLayout = { module = "ca.gosyer:accompanist-flowlayout", version.ref = "accompanist" } diff --git a/ios/build.gradle.kts b/ios/build.gradle.kts index 9f5bea42..0f176134 100644 --- a/ios/build.gradle.kts +++ b/ios/build.gradle.kts @@ -53,6 +53,7 @@ kotlin { implementation(libs.voyager.core) implementation(libs.voyager.navigation) implementation(libs.voyager.transitions) + implementation(libs.voyager.screenmodel) implementation(libs.accompanist.pager) implementation(libs.accompanist.pagerIndicators) implementation(libs.accompanist.flowLayout) @@ -82,6 +83,10 @@ kotlin { // Ktorfit implementation(libs.ktorfit.lib) + // Apollo GraphQL + implementation(libs.apollo.runtime) + implementation(libs.apollo.engine.ktor) + // Logging implementation(libs.logging.kmlogging) diff --git a/presentation/build.gradle.kts b/presentation/build.gradle.kts index cbd67d79..62117b0a 100644 --- a/presentation/build.gradle.kts +++ b/presentation/build.gradle.kts @@ -64,6 +64,7 @@ kotlin { api(libs.voyager.core) api(libs.voyager.navigation) api(libs.voyager.transitions) + api(libs.voyager.screenmodel) api(libs.materialDialogs.core) api(libs.accompanist.pager) api(libs.accompanist.pagerIndicators) @@ -120,7 +121,6 @@ kotlin { api(libs.androidx.core) api(libs.androidx.appCompat) api(libs.androidx.activity.compose) - api(libs.voyager.androidx) } } val androidUnitTest by getting { diff --git a/presentation/src/androidMain/kotlin/ca/gosyer/jui/ui/base/screen/BaseScreen.kt b/presentation/src/androidMain/kotlin/ca/gosyer/jui/ui/base/screen/BaseScreen.kt index 93324a79..ef916cc3 100644 --- a/presentation/src/androidMain/kotlin/ca/gosyer/jui/ui/base/screen/BaseScreen.kt +++ b/presentation/src/androidMain/kotlin/ca/gosyer/jui/ui/base/screen/BaseScreen.kt @@ -6,6 +6,10 @@ package ca.gosyer.jui.ui.base.screen -import cafe.adriel.voyager.androidx.AndroidScreen +import cafe.adriel.voyager.core.screen.Screen +import cafe.adriel.voyager.core.screen.ScreenKey +import cafe.adriel.voyager.core.screen.uniqueScreenKey -actual typealias BaseScreen = AndroidScreen +actual abstract class BaseScreen : Screen { + override val key: ScreenKey = uniqueScreenKey +} diff --git a/ui-core/build.gradle.kts b/ui-core/build.gradle.kts index e3c68e15..bdf5eb77 100644 --- a/ui-core/build.gradle.kts +++ b/ui-core/build.gradle.kts @@ -59,6 +59,7 @@ kotlin { api(libs.imageloader.core) api(libs.imageloader.moko) api(libs.voyager.core) + api(libs.voyager.screenmodel) api(libs.dateTime) api(libs.immutableCollections) api(projects.core)