41 lines
1.2 KiB
Kotlin
41 lines
1.2 KiB
Kotlin
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
|
|
}
|