make it possible to connect modules in project

This commit is contained in:
2022-03-17 23:23:35 +06:00
parent 31047f9382
commit 1dafe0a679
8 changed files with 78 additions and 41 deletions

View File

@@ -2,6 +2,7 @@ plugins {
id "org.jetbrains.kotlin.multiplatform"
id "org.jetbrains.kotlin.plugin.serialization"
id "com.android.library"
alias(libs.plugins.compose)
}
apply from: "$mppProjectWithSerializationPresetPath"

View File

@@ -3,39 +3,37 @@ package dev.inmo.postssystem.features.content.text.client
import androidx.compose.runtime.*
import dev.inmo.jsuikit.modifiers.UIKitWidth
import dev.inmo.jsuikit.modifiers.include
import dev.inmo.micro_utils.common.compose.renderComposableAndLinkToRoot
import dev.inmo.postssystem.features.common.common.*
import dev.inmo.postssystem.features.content.client.ContentClientProvider
import dev.inmo.postssystem.features.content.common.Content
import dev.inmo.postssystem.features.content.text.common.TextContent
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import org.jetbrains.compose.web.dom.TextArea
import org.jetbrains.compose.web.renderComposable
import org.w3c.dom.HTMLElement
import org.koin.core.module.Module
val loadingClientModule = ModuleLoader {
singleWithRandomQualifier<ContentClientProvider> {
TextContentClientProvider
object LoadingClientModule : ModuleLoader {
init {
AdditionalModules.addModule(this)
}
override fun Module.load() {
singleWithRandomQualifier<ContentClientProvider> {
TextContentClientProvider
}
}
}.also {
AdditionalModules.addModule(it)
}
private val loadingClientModuleForLoadingAtRuntime = LoadingClientModule
object TextContentClientProvider : ContentClientProvider {
override fun contentTypeNameForUser(): String = "Text"
override fun drawNewContent(root: HTMLElement): StateFlow<Content> {
val flow = MutableStateFlow(TextContent(""))
renderComposableAndLinkToRoot(root) {
val state = remember { flow.collectAsState() }
TextArea(state.value.text) {
include(UIKitWidth.Expand)
onInput { flow.value = TextContent(it.value) }
}
@Composable
override fun renderNewInstance(state: MutableState<Content?>) {
console.log(state.value)
val value = state.value as? TextContent
TextArea(value ?.text) {
include(UIKitWidth.Expand)
onInput { state.value = TextContent(it.value) }
}
return flow
}
}