ross_a
02/22/2020, 2:55 PMRobert Jaros
02/22/2020, 2:57 PMRobert Jaros
02/24/2020, 11:25 PMRobert Jaros
02/24/2020, 11:26 PMRobert Jaros
02/24/2020, 11:29 PMRobert Jaros
02/24/2020, 11:31 PMLars Erik Rojeras
02/27/2020, 9:29 AMRobert Jaros
02/27/2020, 9:35 AMRobert Jaros
02/27/2020, 9:36 AMRobert Jaros
02/27/2020, 9:37 AMLars Erik Rojeras
02/27/2020, 9:46 AMRobert Jaros
02/27/2020, 10:13 AMRobert Jaros
02/27/2020, 10:14 AMbuild.gradle.kts
implementation(npm("google-charts"))
Robert Jaros
02/27/2020, 10:16 AMdynamic
types (or create Kotlin bindings if you like):
import com.github.snabbdom.VNode
import pl.treksoft.kvision.Application
import pl.treksoft.kvision.core.Widget
import pl.treksoft.kvision.panel.root
import pl.treksoft.kvision.require
import pl.treksoft.kvision.startApplication
import pl.treksoft.kvision.utils.createInstance
class Chart(val gchart: dynamic) : Widget() {
override fun afterInsert(node: VNode) {
gchart.load {
val data = gchart.api.visualization.arrayToDataTable(
arrayOf(
arrayOf("Chart thing", "Chart amount"),
arrayOf("Lorem ipsum", 60),
arrayOf("Dolor sit", 22),
arrayOf("Sit amet", 18)
)
)
val pie_1_chartConstructor: Any = gchart.api.visualization.PieChart
val pie_1_chart = pie_1_chartConstructor.createInstance<Any>(getElement())
pie_1_chart.asDynamic().draw(data)
}
}
}
class App : Application() {
val googleCharts: dynamic
init {
googleCharts = require("google-charts").GoogleCharts
}
override fun start() {
root("kvapp") {
add(Chart(googleCharts))
}
}
}
fun main() {
startApplication(::App)
}
Robert Jaros
02/27/2020, 10:18 AMRobert Jaros
02/27/2020, 10:21 AMChart
class is rendered as div
. afterInsert
will be called when the DOM element is ready, so you can safely use getElement()
, initialize and draw google chartsRobert Jaros
02/27/2020, 10:23 AMcreateInstance
is a helper function declared in KVision, which do some magic to treat a JS code as a constructor to create new JS object instance (we cast dynamic
to Any
and then back to dynamic
, as we do not have any external class definitions)Robert Jaros
02/27/2020, 10:25 AMRobert Jaros
02/27/2020, 10:26 AMLars Erik Rojeras
02/27/2020, 2:12 PMRobert Jaros
03/04/2020, 9:08 AMRobert Jaros
03/04/2020, 9:10 AMRobert Jaros
03/04/2020, 3:53 PMRobert Jaros
03/04/2020, 6:26 PMLars Erik Rojeras
03/06/2020, 11:01 AMLars Erik Rojeras
03/06/2020, 11:02 AMRobert Jaros
03/06/2020, 11:07 AMRobert Jaros
03/06/2020, 11:42 AMRobert Jaros
03/06/2020, 11:43 AMLars Erik Rojeras
03/06/2020, 12:13 PM