1. Для того чтобы добавить собственный компонент и...
# russian
s
2. Для того чтобы добавить собственный компонент и иметь возможность пользоваться им в dsl, нужно: вариант 1: Кроме класса компонента объявить и функцию билдер. Несколько я вижу в anko и javafx ровно так и делают. вариант 2: Для react-а сделали по другому:
Copy code
class HomeView : ReactDOMComponent<HomeView.Props, HomeView.State>() {
    companion object : ReactComponentSpec<HomeView, Props, State>
При этом все Props-ы обязаны быть mutable, иначе dsl не будет работать вариант 3: Если использовать подход с оператором
+
, то для объявления компонента достаточно объявить сам компонент (наследовать определенный класс или интерфейс), а опретаор
+
будет уже определен.
Copy code
{
    +Section(key = "s1", title = "About") {
      +"About contents"
    }
  }

  class Section(key: Any?, val title: String, val body: WidgetBody) : StatelessWidget(key)
А с HKT (https://github.com/47deg/KEEP/blob/2f2f27ebbab143933a1d63fcdaf40c8292cd2f97/proposals/type-classes.md), вобще можно будет объявить higher-kind класс Rendreable, добавлять его к существющим классом, и, соответсвенно рендерить:
Copy code
// in existed module
data class User(val name: String)

object UserRenderrer: Renderable<User> {
    fun User.render() = Row {
        + Column { +"Name: " }
        + Column { +name }        
    }
}

fun someOtherComponent(user: User) given Renderable<User> = Row { +user }
3️⃣ 2
2️⃣ 1
1️⃣ 2