temporal unworkable progress
This commit is contained in:
client
features
common
client
common
src
commonMain
kotlin
dev
inmo
postssystem
features
common
common
content
client
src
jsMain
kotlin
dev
inmo
postssystem
features
content
client
text
client
gradle
server/src/main/resources/web
services/posts
client
src
commonMain
kotlin
dev
inmo
postssystem
services
posts
server
src
jvmMain
kotlin
dev
inmo
postssystem
services
posts
targets/telegram
content
polls
client
build.gradle
src
common
server
loader
client
server
template
40
features/content/client/src/jsMain/kotlin/dev/inmo/postssystem/features/content/client/ContentClientProvider.kt
Normal file
40
features/content/client/src/jsMain/kotlin/dev/inmo/postssystem/features/content/client/ContentClientProvider.kt
Normal file
@ -0,0 +1,40 @@
|
||||
package dev.inmo.postssystem.features.content.client
|
||||
|
||||
import androidx.compose.runtime.*
|
||||
import dev.inmo.postssystem.features.content.common.Content
|
||||
|
||||
interface ContentClientProvider {
|
||||
fun contentTypeNameForUser(): String
|
||||
|
||||
interface ContentRenderer {
|
||||
val state: State<Content?>
|
||||
|
||||
@Composable
|
||||
fun render()
|
||||
|
||||
class Default<T : Content?>(
|
||||
initValue: T,
|
||||
private val onRender: @Composable (MutableState<T>) -> Unit
|
||||
) : ContentRenderer {
|
||||
private val mutableState = mutableStateOf(initValue)
|
||||
override val state: State<Content?>
|
||||
get() = mutableState
|
||||
|
||||
@Composable
|
||||
override fun render() { onRender(mutableState) }
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun <T: Content> default(onRender: @Composable (MutableState<T?>) -> Unit) = Default(
|
||||
null,
|
||||
onRender
|
||||
)
|
||||
fun <T: Content?> default(initValue: T, onRender: @Composable (MutableState<T>) -> Unit) = Default(
|
||||
initValue,
|
||||
onRender
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun createNewContentRenderer(): ContentRenderer
|
||||
}
|
@ -12,6 +12,7 @@ kotlin {
|
||||
dependencies {
|
||||
api project(":postssystem.features.content.text.common")
|
||||
api project(":postssystem.features.common.client")
|
||||
api project(":postssystem.features.content.client")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
32
features/content/text/client/src/jsMain/kotlin/dev/inmo/postssystem/features/content/text/client/TextContentClientProvider.kt
Normal file
32
features/content/text/client/src/jsMain/kotlin/dev/inmo/postssystem/features/content/text/client/TextContentClientProvider.kt
Normal file
@ -0,0 +1,32 @@
|
||||
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.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 org.jetbrains.compose.web.dom.TextArea
|
||||
import org.w3c.dom.Text
|
||||
|
||||
val loadingClientModule = ModuleLoader {
|
||||
singleWithRandomQualifier<ContentClientProvider> {
|
||||
TextContentClientProvider
|
||||
}
|
||||
}.also {
|
||||
AdditionalModules.addModule(it)
|
||||
}
|
||||
|
||||
object TextContentClientProvider : ContentClientProvider {
|
||||
override fun contentTypeNameForUser(): String = "Text"
|
||||
|
||||
override fun createNewContentRenderer(): ContentClientProvider.ContentRenderer {
|
||||
return ContentClientProvider.ContentRenderer.default(TextContent("")) { state ->
|
||||
TextArea(state.value.text) {
|
||||
include(UIKitWidth.Expand)
|
||||
onInput { state.value = TextContent(it.value) }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user