diff --git a/core/common/build.gradle.kts b/core/common/build.gradle.kts index 06ee493d9..8fccfdcc6 100644 --- a/core/common/build.gradle.kts +++ b/core/common/build.gradle.kts @@ -1,6 +1,7 @@ -@file:OptIn(ExperimentalKotlinGradlePluginApi::class) +@file:OptIn(ExperimentalKotlinGradlePluginApi::class, ExperimentalWasmDsl::class) import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi +import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl plugins { alias(libs.plugins.kotlin.multiplatform) @@ -15,6 +16,24 @@ kotlin { iosX64() iosArm64() iosSimulatorArm64() + js { + moduleName = "composeApp" + browser { + commonWebpackConfig { + outputFileName = "composeApp.js" + } + } + binaries.executable() + } + wasmJs { + moduleName = "composeApp" + browser { + commonWebpackConfig { + outputFileName = "composeApp.js" + } + } + binaries.executable() + } sourceSets { commonMain.dependencies { diff --git a/core/common/src/androidMain/kotlin/org/michaelbel/movies/common/dispatchers/IoDispatcher.android.kt b/core/common/src/androidMain/kotlin/org/michaelbel/movies/common/dispatchers/IoDispatcher.android.kt new file mode 100644 index 000000000..893825dbd --- /dev/null +++ b/core/common/src/androidMain/kotlin/org/michaelbel/movies/common/dispatchers/IoDispatcher.android.kt @@ -0,0 +1,6 @@ +package org.michaelbel.movies.common.dispatchers + +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.Dispatchers + +internal actual val ioDispatcher: CoroutineDispatcher = Dispatchers.IO \ No newline at end of file diff --git a/core/common/src/commonMain/kotlin/org/michaelbel/movies/common/dispatchers/IoDispatcher.kt b/core/common/src/commonMain/kotlin/org/michaelbel/movies/common/dispatchers/IoDispatcher.kt new file mode 100644 index 000000000..6c8ebb820 --- /dev/null +++ b/core/common/src/commonMain/kotlin/org/michaelbel/movies/common/dispatchers/IoDispatcher.kt @@ -0,0 +1,5 @@ +package org.michaelbel.movies.common.dispatchers + +import kotlinx.coroutines.CoroutineDispatcher + +internal expect val ioDispatcher: CoroutineDispatcher \ No newline at end of file diff --git a/core/common/src/commonMain/kotlin/org/michaelbel/movies/common/dispatchers/impl/MoviesDispatchersImpl.kt b/core/common/src/commonMain/kotlin/org/michaelbel/movies/common/dispatchers/impl/MoviesDispatchersImpl.kt index 276362b69..bd730222d 100644 --- a/core/common/src/commonMain/kotlin/org/michaelbel/movies/common/dispatchers/impl/MoviesDispatchersImpl.kt +++ b/core/common/src/commonMain/kotlin/org/michaelbel/movies/common/dispatchers/impl/MoviesDispatchersImpl.kt @@ -2,8 +2,8 @@ package org.michaelbel.movies.common.dispatchers.impl import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.IO import org.michaelbel.movies.common.dispatchers.MoviesDispatchers +import org.michaelbel.movies.common.dispatchers.ioDispatcher import org.michaelbel.movies.common.dispatchers.uiDispatcher internal class MoviesDispatchersImpl: MoviesDispatchers { @@ -12,7 +12,7 @@ internal class MoviesDispatchersImpl: MoviesDispatchers { get() = Dispatchers.Default override val io: CoroutineDispatcher - get() = Dispatchers.IO + get() = ioDispatcher override val main: CoroutineDispatcher get() = Dispatchers.Main diff --git a/core/common/src/iosMain/kotlin/org/michaelbel/movies/common/dispatchers/IoDispatcher.ios.kt b/core/common/src/iosMain/kotlin/org/michaelbel/movies/common/dispatchers/IoDispatcher.ios.kt new file mode 100644 index 000000000..7279acc52 --- /dev/null +++ b/core/common/src/iosMain/kotlin/org/michaelbel/movies/common/dispatchers/IoDispatcher.ios.kt @@ -0,0 +1,6 @@ +package org.michaelbel.movies.common.dispatchers + +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.Dispatchers + +internal actual val ioDispatcher: CoroutineDispatcher = Dispatchers.Default \ No newline at end of file diff --git a/core/common/src/jsMain/kotlin/org/michaelbel/movies/common/browser/Browser.js.kt b/core/common/src/jsMain/kotlin/org/michaelbel/movies/common/browser/Browser.js.kt new file mode 100644 index 000000000..0e9e4b82e --- /dev/null +++ b/core/common/src/jsMain/kotlin/org/michaelbel/movies/common/browser/Browser.js.kt @@ -0,0 +1,5 @@ +package org.michaelbel.movies.common.browser + +fun openUrl(url: String) { + +} \ No newline at end of file diff --git a/core/common/src/jsMain/kotlin/org/michaelbel/movies/common/dispatchers/IoDispatcher.js.kt b/core/common/src/jsMain/kotlin/org/michaelbel/movies/common/dispatchers/IoDispatcher.js.kt new file mode 100644 index 000000000..7279acc52 --- /dev/null +++ b/core/common/src/jsMain/kotlin/org/michaelbel/movies/common/dispatchers/IoDispatcher.js.kt @@ -0,0 +1,6 @@ +package org.michaelbel.movies.common.dispatchers + +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.Dispatchers + +internal actual val ioDispatcher: CoroutineDispatcher = Dispatchers.Default \ No newline at end of file diff --git a/core/common/src/jsMain/kotlin/org/michaelbel/movies/common/dispatchers/UiDispatcher.js.kt b/core/common/src/jsMain/kotlin/org/michaelbel/movies/common/dispatchers/UiDispatcher.js.kt new file mode 100644 index 000000000..c0dbd0185 --- /dev/null +++ b/core/common/src/jsMain/kotlin/org/michaelbel/movies/common/dispatchers/UiDispatcher.js.kt @@ -0,0 +1,6 @@ +package org.michaelbel.movies.common.dispatchers + +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.Dispatchers + +internal actual val uiDispatcher: CoroutineDispatcher = Dispatchers.Default \ No newline at end of file diff --git a/core/common/src/jsMain/kotlin/org/michaelbel/movies/common/ktx/SavedStateHandleKtx.js.kt b/core/common/src/jsMain/kotlin/org/michaelbel/movies/common/ktx/SavedStateHandleKtx.js.kt new file mode 100644 index 000000000..89a92b25e --- /dev/null +++ b/core/common/src/jsMain/kotlin/org/michaelbel/movies/common/ktx/SavedStateHandleKtx.js.kt @@ -0,0 +1,5 @@ +package org.michaelbel.movies.common.ktx + +import androidx.lifecycle.SavedStateHandle + +fun SavedStateHandle.require(key: String): T = requireNotNull(this[key]) \ No newline at end of file diff --git a/core/common/src/jsMain/kotlin/org/michaelbel/movies/common/log/Logger.js.kt b/core/common/src/jsMain/kotlin/org/michaelbel/movies/common/log/Logger.js.kt new file mode 100644 index 000000000..cc66cad1f --- /dev/null +++ b/core/common/src/jsMain/kotlin/org/michaelbel/movies/common/log/Logger.js.kt @@ -0,0 +1,3 @@ +package org.michaelbel.movies.common.log + +actual fun log(throwable: Throwable) {} \ No newline at end of file diff --git a/core/common/src/jsMain/kotlin/org/michaelbel/movies/common/viewmodel/BaseViewModel.kt b/core/common/src/jsMain/kotlin/org/michaelbel/movies/common/viewmodel/BaseViewModel.kt new file mode 100644 index 000000000..4a7260333 --- /dev/null +++ b/core/common/src/jsMain/kotlin/org/michaelbel/movies/common/viewmodel/BaseViewModel.kt @@ -0,0 +1,18 @@ +package org.michaelbel.movies.common.viewmodel + +import androidx.annotation.CallSuper +import androidx.lifecycle.ViewModel +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.SupervisorJob +import org.michaelbel.movies.common.dispatchers.uiDispatcher +import org.michaelbel.movies.common.log.log + +open class BaseViewModel: ViewModel( + viewModelScope = CoroutineScope(uiDispatcher + SupervisorJob()) +) { + + @CallSuper + protected open fun handleError(throwable: Throwable) { + log(throwable) + } +} \ No newline at end of file diff --git a/core/common/src/jvmMain/kotlin/org/michaelbel/movies/common/dispatchers/IoDispatcher.desktop.kt b/core/common/src/jvmMain/kotlin/org/michaelbel/movies/common/dispatchers/IoDispatcher.desktop.kt new file mode 100644 index 000000000..893825dbd --- /dev/null +++ b/core/common/src/jvmMain/kotlin/org/michaelbel/movies/common/dispatchers/IoDispatcher.desktop.kt @@ -0,0 +1,6 @@ +package org.michaelbel.movies.common.dispatchers + +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.Dispatchers + +internal actual val ioDispatcher: CoroutineDispatcher = Dispatchers.IO \ No newline at end of file diff --git a/core/common/src/wasmJsMain/kotlin/org/michaelbel/movies/common/browser/Browser.wasm.kt b/core/common/src/wasmJsMain/kotlin/org/michaelbel/movies/common/browser/Browser.wasm.kt new file mode 100644 index 000000000..0e9e4b82e --- /dev/null +++ b/core/common/src/wasmJsMain/kotlin/org/michaelbel/movies/common/browser/Browser.wasm.kt @@ -0,0 +1,5 @@ +package org.michaelbel.movies.common.browser + +fun openUrl(url: String) { + +} \ No newline at end of file diff --git a/core/common/src/wasmJsMain/kotlin/org/michaelbel/movies/common/dispatchers/IoDispatcher.wasm.kt b/core/common/src/wasmJsMain/kotlin/org/michaelbel/movies/common/dispatchers/IoDispatcher.wasm.kt new file mode 100644 index 000000000..7279acc52 --- /dev/null +++ b/core/common/src/wasmJsMain/kotlin/org/michaelbel/movies/common/dispatchers/IoDispatcher.wasm.kt @@ -0,0 +1,6 @@ +package org.michaelbel.movies.common.dispatchers + +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.Dispatchers + +internal actual val ioDispatcher: CoroutineDispatcher = Dispatchers.Default \ No newline at end of file diff --git a/core/common/src/wasmJsMain/kotlin/org/michaelbel/movies/common/dispatchers/UiDispatcher.wasm.kt b/core/common/src/wasmJsMain/kotlin/org/michaelbel/movies/common/dispatchers/UiDispatcher.wasm.kt new file mode 100644 index 000000000..c0dbd0185 --- /dev/null +++ b/core/common/src/wasmJsMain/kotlin/org/michaelbel/movies/common/dispatchers/UiDispatcher.wasm.kt @@ -0,0 +1,6 @@ +package org.michaelbel.movies.common.dispatchers + +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.Dispatchers + +internal actual val uiDispatcher: CoroutineDispatcher = Dispatchers.Default \ No newline at end of file diff --git a/core/common/src/wasmJsMain/kotlin/org/michaelbel/movies/common/ktx/SavedStateHandleKtx.wasm.kt b/core/common/src/wasmJsMain/kotlin/org/michaelbel/movies/common/ktx/SavedStateHandleKtx.wasm.kt new file mode 100644 index 000000000..89a92b25e --- /dev/null +++ b/core/common/src/wasmJsMain/kotlin/org/michaelbel/movies/common/ktx/SavedStateHandleKtx.wasm.kt @@ -0,0 +1,5 @@ +package org.michaelbel.movies.common.ktx + +import androidx.lifecycle.SavedStateHandle + +fun SavedStateHandle.require(key: String): T = requireNotNull(this[key]) \ No newline at end of file diff --git a/core/common/src/wasmJsMain/kotlin/org/michaelbel/movies/common/log/Logger.wasm.kt b/core/common/src/wasmJsMain/kotlin/org/michaelbel/movies/common/log/Logger.wasm.kt new file mode 100644 index 000000000..cc66cad1f --- /dev/null +++ b/core/common/src/wasmJsMain/kotlin/org/michaelbel/movies/common/log/Logger.wasm.kt @@ -0,0 +1,3 @@ +package org.michaelbel.movies.common.log + +actual fun log(throwable: Throwable) {} \ No newline at end of file diff --git a/core/common/src/wasmJsMain/kotlin/org/michaelbel/movies/common/viewmodel/BaseViewModel.kt b/core/common/src/wasmJsMain/kotlin/org/michaelbel/movies/common/viewmodel/BaseViewModel.kt new file mode 100644 index 000000000..4a7260333 --- /dev/null +++ b/core/common/src/wasmJsMain/kotlin/org/michaelbel/movies/common/viewmodel/BaseViewModel.kt @@ -0,0 +1,18 @@ +package org.michaelbel.movies.common.viewmodel + +import androidx.annotation.CallSuper +import androidx.lifecycle.ViewModel +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.SupervisorJob +import org.michaelbel.movies.common.dispatchers.uiDispatcher +import org.michaelbel.movies.common.log.log + +open class BaseViewModel: ViewModel( + viewModelScope = CoroutineScope(uiDispatcher + SupervisorJob()) +) { + + @CallSuper + protected open fun handleError(throwable: Throwable) { + log(throwable) + } +} \ No newline at end of file diff --git a/core/platform-services/foss/build.gradle.kts b/core/platform-services/foss/build.gradle.kts index 91b85fc16..835d61eaa 100644 --- a/core/platform-services/foss/build.gradle.kts +++ b/core/platform-services/foss/build.gradle.kts @@ -1,6 +1,7 @@ -@file:OptIn(ExperimentalKotlinGradlePluginApi::class) +@file:OptIn(ExperimentalKotlinGradlePluginApi::class, ExperimentalWasmDsl::class) import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi +import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl plugins { alias(libs.plugins.kotlin.multiplatform) @@ -13,6 +14,24 @@ kotlin { iosX64() iosArm64() iosSimulatorArm64() + js { + moduleName = "composeApp" + browser { + commonWebpackConfig { + outputFileName = "composeApp.js" + } + } + binaries.executable() + } + wasmJs { + moduleName = "composeApp" + browser { + commonWebpackConfig { + outputFileName = "composeApp.js" + } + } + binaries.executable() + } sourceSets { commonMain.dependencies { diff --git a/core/platform-services/foss/src/jsMain/kotlin/org/michaelbel/movies/platform/impl/analytics/AnalyticsServiceImpl.kt b/core/platform-services/foss/src/jsMain/kotlin/org/michaelbel/movies/platform/impl/analytics/AnalyticsServiceImpl.kt new file mode 100644 index 000000000..603d96951 --- /dev/null +++ b/core/platform-services/foss/src/jsMain/kotlin/org/michaelbel/movies/platform/impl/analytics/AnalyticsServiceImpl.kt @@ -0,0 +1,14 @@ +@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") + +package org.michaelbel.movies.platform.impl.analytics + +import org.michaelbel.movies.platform.analytics.AnalyticsService + +actual class AnalyticsServiceImpl: AnalyticsService { + + override val screenView: String = "" + + override val screenName: String = "" + + override fun logEvent(name: String, params: HashMap) {} +} \ No newline at end of file diff --git a/core/platform-services/foss/src/jsMain/kotlin/org/michaelbel/movies/platform/impl/review/ReviewServiceImpl.kt b/core/platform-services/foss/src/jsMain/kotlin/org/michaelbel/movies/platform/impl/review/ReviewServiceImpl.kt new file mode 100644 index 000000000..ba5a9e5a5 --- /dev/null +++ b/core/platform-services/foss/src/jsMain/kotlin/org/michaelbel/movies/platform/impl/review/ReviewServiceImpl.kt @@ -0,0 +1,7 @@ +@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") + +package org.michaelbel.movies.platform.impl.review + +import org.michaelbel.movies.platform.review.ReviewService + +actual class ReviewServiceImpl: ReviewService \ No newline at end of file diff --git a/core/platform-services/foss/src/jsMain/kotlin/org/michaelbel/movies/platform/impl/update/UpdateServiceImpl.kt b/core/platform-services/foss/src/jsMain/kotlin/org/michaelbel/movies/platform/impl/update/UpdateServiceImpl.kt new file mode 100644 index 000000000..abb226a7e --- /dev/null +++ b/core/platform-services/foss/src/jsMain/kotlin/org/michaelbel/movies/platform/impl/update/UpdateServiceImpl.kt @@ -0,0 +1,7 @@ +@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") + +package org.michaelbel.movies.platform.impl.update + +import org.michaelbel.movies.platform.update.UpdateService + +actual class UpdateServiceImpl: UpdateService \ No newline at end of file diff --git a/core/platform-services/foss/src/wasmJsMain/kotlin/org/michaelbel/movies/platform/impl/analytics/AnalyticsServiceImpl.kt b/core/platform-services/foss/src/wasmJsMain/kotlin/org/michaelbel/movies/platform/impl/analytics/AnalyticsServiceImpl.kt new file mode 100644 index 000000000..603d96951 --- /dev/null +++ b/core/platform-services/foss/src/wasmJsMain/kotlin/org/michaelbel/movies/platform/impl/analytics/AnalyticsServiceImpl.kt @@ -0,0 +1,14 @@ +@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") + +package org.michaelbel.movies.platform.impl.analytics + +import org.michaelbel.movies.platform.analytics.AnalyticsService + +actual class AnalyticsServiceImpl: AnalyticsService { + + override val screenView: String = "" + + override val screenName: String = "" + + override fun logEvent(name: String, params: HashMap) {} +} \ No newline at end of file diff --git a/core/platform-services/foss/src/wasmJsMain/kotlin/org/michaelbel/movies/platform/impl/review/ReviewServiceImpl.kt b/core/platform-services/foss/src/wasmJsMain/kotlin/org/michaelbel/movies/platform/impl/review/ReviewServiceImpl.kt new file mode 100644 index 000000000..ba5a9e5a5 --- /dev/null +++ b/core/platform-services/foss/src/wasmJsMain/kotlin/org/michaelbel/movies/platform/impl/review/ReviewServiceImpl.kt @@ -0,0 +1,7 @@ +@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") + +package org.michaelbel.movies.platform.impl.review + +import org.michaelbel.movies.platform.review.ReviewService + +actual class ReviewServiceImpl: ReviewService \ No newline at end of file diff --git a/core/platform-services/foss/src/wasmJsMain/kotlin/org/michaelbel/movies/platform/impl/update/UpdateServiceImpl.kt b/core/platform-services/foss/src/wasmJsMain/kotlin/org/michaelbel/movies/platform/impl/update/UpdateServiceImpl.kt new file mode 100644 index 000000000..abb226a7e --- /dev/null +++ b/core/platform-services/foss/src/wasmJsMain/kotlin/org/michaelbel/movies/platform/impl/update/UpdateServiceImpl.kt @@ -0,0 +1,7 @@ +@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") + +package org.michaelbel.movies.platform.impl.update + +import org.michaelbel.movies.platform.update.UpdateService + +actual class UpdateServiceImpl: UpdateService \ No newline at end of file diff --git a/core/platform-services/inject-web/build.gradle.kts b/core/platform-services/inject-web/build.gradle.kts new file mode 100644 index 000000000..27e68e7a2 --- /dev/null +++ b/core/platform-services/inject-web/build.gradle.kts @@ -0,0 +1,34 @@ +@file:OptIn(ExperimentalWasmDsl::class) + +import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl + +plugins { + alias(libs.plugins.kotlin.multiplatform) +} + +kotlin { + js { + moduleName = "composeApp" + browser { + commonWebpackConfig { + outputFileName = "composeApp.js" + } + } + binaries.executable() + } + wasmJs { + moduleName = "composeApp" + browser { + commonWebpackConfig { + outputFileName = "composeApp.js" + } + } + binaries.executable() + } + + sourceSets { + commonMain.dependencies { + implementation(project(":core:platform-services:foss")) + } + } +} \ No newline at end of file diff --git a/core/platform-services/inject-web/src/commonMain/kotlin/org/michaelbel/movies/platform/inject/FlavorServiceKtorModule.web.kt b/core/platform-services/inject-web/src/commonMain/kotlin/org/michaelbel/movies/platform/inject/FlavorServiceKtorModule.web.kt new file mode 100644 index 000000000..4afd38757 --- /dev/null +++ b/core/platform-services/inject-web/src/commonMain/kotlin/org/michaelbel/movies/platform/inject/FlavorServiceKtorModule.web.kt @@ -0,0 +1,33 @@ +package org.michaelbel.movies.platform.inject + +import org.koin.core.module.dsl.bind +import org.koin.core.module.dsl.singleOf +import org.koin.dsl.module +import org.michaelbel.movies.platform.analytics.AnalyticsService +import org.michaelbel.movies.platform.app.AppService +import org.michaelbel.movies.platform.config.ConfigService +import org.michaelbel.movies.platform.crashlytics.CrashlyticsService +import org.michaelbel.movies.platform.impl.analytics.AnalyticsServiceImpl +import org.michaelbel.movies.platform.impl.app.AppServiceImpl +import org.michaelbel.movies.platform.impl.config.ConfigServiceImpl +import org.michaelbel.movies.platform.impl.crashlytics.CrashlyticsServiceImpl +import org.michaelbel.movies.platform.impl.messaging.MessagingServiceImpl +import org.michaelbel.movies.platform.impl.platformKoinModule +import org.michaelbel.movies.platform.impl.review.ReviewServiceImpl +import org.michaelbel.movies.platform.impl.update.UpdateServiceImpl +import org.michaelbel.movies.platform.messaging.MessagingService +import org.michaelbel.movies.platform.review.ReviewService +import org.michaelbel.movies.platform.update.UpdateService + +val flavorServiceKtorModule = module { + includes( + platformKoinModule + ) + singleOf(::AnalyticsServiceImpl) { bind() } + singleOf(::AppServiceImpl) { bind() } + singleOf(::ConfigServiceImpl) { bind() } + singleOf(::CrashlyticsServiceImpl) { bind() } + singleOf(::MessagingServiceImpl) { bind() } + singleOf(::ReviewServiceImpl) { bind() } + singleOf(::UpdateServiceImpl) { bind() } +} \ No newline at end of file diff --git a/core/platform-services/interactor/build.gradle.kts b/core/platform-services/interactor/build.gradle.kts index bb232aae2..59ed62952 100644 --- a/core/platform-services/interactor/build.gradle.kts +++ b/core/platform-services/interactor/build.gradle.kts @@ -1,6 +1,7 @@ -@file:OptIn(ExperimentalKotlinGradlePluginApi::class) +@file:OptIn(ExperimentalKotlinGradlePluginApi::class, ExperimentalWasmDsl::class) import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi +import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl plugins { alias(libs.plugins.kotlin.multiplatform) @@ -13,6 +14,24 @@ kotlin { iosX64() iosArm64() iosSimulatorArm64() + js { + moduleName = "composeApp" + browser { + commonWebpackConfig { + outputFileName = "composeApp.js" + } + } + binaries.executable() + } + wasmJs { + moduleName = "composeApp" + browser { + commonWebpackConfig { + outputFileName = "composeApp.js" + } + } + binaries.executable() + } sourceSets { commonMain.dependencies { diff --git a/core/platform-services/interactor/src/jsMain/kotlin/org/michaelbel/movies/platform/analytics/AnalyticsService.kt b/core/platform-services/interactor/src/jsMain/kotlin/org/michaelbel/movies/platform/analytics/AnalyticsService.kt new file mode 100644 index 000000000..b2f611687 --- /dev/null +++ b/core/platform-services/interactor/src/jsMain/kotlin/org/michaelbel/movies/platform/analytics/AnalyticsService.kt @@ -0,0 +1,12 @@ +@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") + +package org.michaelbel.movies.platform.analytics + +actual interface AnalyticsService { + + val screenView: String + + val screenName: String + + fun logEvent(name: String, params: HashMap) +} \ No newline at end of file diff --git a/core/platform-services/interactor/src/jsMain/kotlin/org/michaelbel/movies/platform/review/ReviewService.kt b/core/platform-services/interactor/src/jsMain/kotlin/org/michaelbel/movies/platform/review/ReviewService.kt new file mode 100644 index 000000000..317de3959 --- /dev/null +++ b/core/platform-services/interactor/src/jsMain/kotlin/org/michaelbel/movies/platform/review/ReviewService.kt @@ -0,0 +1,5 @@ +@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") + +package org.michaelbel.movies.platform.review + +actual interface ReviewService \ No newline at end of file diff --git a/core/platform-services/interactor/src/jsMain/kotlin/org/michaelbel/movies/platform/update/UpdateService.kt b/core/platform-services/interactor/src/jsMain/kotlin/org/michaelbel/movies/platform/update/UpdateService.kt new file mode 100644 index 000000000..c80d02be2 --- /dev/null +++ b/core/platform-services/interactor/src/jsMain/kotlin/org/michaelbel/movies/platform/update/UpdateService.kt @@ -0,0 +1,5 @@ +@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") + +package org.michaelbel.movies.platform.update + +actual interface UpdateService \ No newline at end of file diff --git a/core/platform-services/interactor/src/wasmJsMain/kotlin/org/michaelbel/movies/platform/analytics/AnalyticsService.kt b/core/platform-services/interactor/src/wasmJsMain/kotlin/org/michaelbel/movies/platform/analytics/AnalyticsService.kt new file mode 100644 index 000000000..b2f611687 --- /dev/null +++ b/core/platform-services/interactor/src/wasmJsMain/kotlin/org/michaelbel/movies/platform/analytics/AnalyticsService.kt @@ -0,0 +1,12 @@ +@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") + +package org.michaelbel.movies.platform.analytics + +actual interface AnalyticsService { + + val screenView: String + + val screenName: String + + fun logEvent(name: String, params: HashMap) +} \ No newline at end of file diff --git a/core/platform-services/interactor/src/wasmJsMain/kotlin/org/michaelbel/movies/platform/review/ReviewService.kt b/core/platform-services/interactor/src/wasmJsMain/kotlin/org/michaelbel/movies/platform/review/ReviewService.kt new file mode 100644 index 000000000..317de3959 --- /dev/null +++ b/core/platform-services/interactor/src/wasmJsMain/kotlin/org/michaelbel/movies/platform/review/ReviewService.kt @@ -0,0 +1,5 @@ +@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") + +package org.michaelbel.movies.platform.review + +actual interface ReviewService \ No newline at end of file diff --git a/core/platform-services/interactor/src/wasmJsMain/kotlin/org/michaelbel/movies/platform/update/UpdateService.kt b/core/platform-services/interactor/src/wasmJsMain/kotlin/org/michaelbel/movies/platform/update/UpdateService.kt new file mode 100644 index 000000000..c80d02be2 --- /dev/null +++ b/core/platform-services/interactor/src/wasmJsMain/kotlin/org/michaelbel/movies/platform/update/UpdateService.kt @@ -0,0 +1,5 @@ +@file:Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") + +package org.michaelbel.movies.platform.update + +actual interface UpdateService \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9e6d2b8e8..a34e4b922 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -95,6 +95,7 @@ kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" } kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinx-coroutines" } kotlinx-coroutines-swing = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-swing", version.ref = "kotlinx-coroutines" } +kotlinx-coroutines-js = { module = "org.jetbrains.kotlinx:kotlinx--coroutines-core-wasm-js", version.ref = "kotlinx-coroutines" } kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinx-datetime" } kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinx-serialization" } google-services-base = { module = "com.google.android.gms:play-services-base", version.ref = "google-services-base" } diff --git a/settings.gradle.kts b/settings.gradle.kts index bbf56cebb..aefffaff6 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -41,6 +41,7 @@ include( ":core:platform-services:inject-android", ":core:platform-services:inject-desktop", ":core:platform-services:inject-ios", + ":core:platform-services:inject-web", ":core:platform-services:interactor", ":core:analytics", diff --git a/webApp/build.gradle.kts b/webApp/build.gradle.kts index 0cd9f0818..69b7f673f 100755 --- a/webApp/build.gradle.kts +++ b/webApp/build.gradle.kts @@ -38,6 +38,9 @@ kotlin { sourceSets { commonMain.dependencies { + implementation(project(":core:platform-services:inject-web")) + //implementation(project(":feature:main-impl")) + implementation(compose.runtime) implementation(compose.foundation) implementation(compose.material3) @@ -48,6 +51,16 @@ kotlin { } } +/*compose { + resources { + publicResClass = true + generateResClass = always + } + experimental { + web.application {} + } +}*/ + compose.resources { publicResClass = true generateResClass = always diff --git a/webApp/src/commonMain/kotlin/org/michaelbel/movies/di/AppKoinModule.kt b/webApp/src/commonMain/kotlin/org/michaelbel/movies/di/AppKoinModule.kt new file mode 100644 index 000000000..4fe414a34 --- /dev/null +++ b/webApp/src/commonMain/kotlin/org/michaelbel/movies/di/AppKoinModule.kt @@ -0,0 +1,26 @@ +package org.michaelbel.movies.di + +/*import org.koin.dsl.module +import org.michaelbel.movies.account.di.accountKoinModule +import org.michaelbel.movies.auth.di.authKoinModule +import org.michaelbel.movies.details.di.detailsKoinModule +import org.michaelbel.movies.feed.di.feedKoinModule +import org.michaelbel.movies.gallery.di.galleryKoinModule +import org.michaelbel.movies.main.di.mainKoinModule +import org.michaelbel.movies.platform.inject.flavorServiceKtorModule +import org.michaelbel.movies.search.di.searchKoinModule +import org.michaelbel.movies.settings.di.settingsKoinModule + +internal val appKoinModule = module { + includes( + flavorServiceKtorModule, + mainKoinModule, + accountKoinModule, + authKoinModule, + detailsKoinModule, + feedKoinModule, + galleryKoinModule, + searchKoinModule, + settingsKoinModule + ) +}*/ \ No newline at end of file