Skip to content

Commit

Permalink
Web app
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelbel committed Sep 3, 2024
1 parent ab72fc8 commit 5092887
Show file tree
Hide file tree
Showing 38 changed files with 379 additions and 5 deletions.
21 changes: 20 additions & 1 deletion core/common/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -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)
Expand All @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package org.michaelbel.movies.common.dispatchers

import kotlinx.coroutines.CoroutineDispatcher

internal expect val ioDispatcher: CoroutineDispatcher
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package org.michaelbel.movies.common.browser

fun openUrl(url: String) {

}
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package org.michaelbel.movies.common.ktx

import androidx.lifecycle.SavedStateHandle

fun <T> SavedStateHandle.require(key: String): T = requireNotNull(this[key])
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package org.michaelbel.movies.common.log

actual fun log(throwable: Throwable) {}
Original file line number Diff line number Diff line change
@@ -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)
}
}
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package org.michaelbel.movies.common.browser

fun openUrl(url: String) {

}
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package org.michaelbel.movies.common.ktx

import androidx.lifecycle.SavedStateHandle

fun <T> SavedStateHandle.require(key: String): T = requireNotNull(this[key])
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package org.michaelbel.movies.common.log

actual fun log(throwable: Throwable) {}
Original file line number Diff line number Diff line change
@@ -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)
}
}
21 changes: 20 additions & 1 deletion core/platform-services/foss/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -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)
Expand All @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
@@ -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<String, String>) {}
}
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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<String, String>) {}
}
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
34 changes: 34 additions & 0 deletions core/platform-services/inject-web/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -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"))
}
}
}
Original file line number Diff line number Diff line change
@@ -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<AnalyticsService>() }
singleOf(::AppServiceImpl) { bind<AppService>() }
singleOf(::ConfigServiceImpl) { bind<ConfigService>() }
singleOf(::CrashlyticsServiceImpl) { bind<CrashlyticsService>() }
singleOf(::MessagingServiceImpl) { bind<MessagingService>() }
singleOf(::ReviewServiceImpl) { bind<ReviewService>() }
singleOf(::UpdateServiceImpl) { bind<UpdateService>() }
}
Loading

0 comments on commit 5092887

Please sign in to comment.