This is an automated email from the ASF dual-hosted git repository.

joergrade pushed a commit to branch spring6-kroviz
in repository https://gitbox.apache.org/repos/asf/causeway.git


The following commit(s) were added to refs/heads/spring6-kroviz by this push:
     new 4c416902a7 CAUSEWAY-3264 vega diagram shown in second row of table
4c416902a7 is described below

commit 4c416902a70aa7d6d8a50dd20b809b438ec5936f
Author: Jörg Rade <[email protected]>
AuthorDate: Wed Nov 8 20:35:55 2023 +0100

    CAUSEWAY-3264 vega diagram shown in second row of table
---
 .../client/kroviz/ui/core/ColumnFactory.kt         | 22 +++++-----------------
 .../client/kroviz/ui/core/FormPanelFactory.kt      | 20 ++++++--------------
 .../causeway/client/kroviz/ui/core/RoMenuBar.kt    |  3 ++-
 .../causeway/client/kroviz/ui/dialog/VegaPanel.kt  |  4 +---
 4 files changed, 14 insertions(+), 35 deletions(-)

diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/core/ColumnFactory.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/core/ColumnFactory.kt
index 4268d572ae..93db8f833c 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/core/ColumnFactory.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/core/ColumnFactory.kt
@@ -19,7 +19,6 @@
 package org.apache.causeway.client.kroviz.ui.core
 
 import io.kvision.core.Component
-import io.kvision.panel.VPanel
 import io.kvision.tabulator.Align
 import io.kvision.tabulator.ColumnDefinition
 import io.kvision.tabulator.Editor
@@ -31,9 +30,8 @@ import org.apache.causeway.client.kroviz.core.model.Exposer
 import org.apache.causeway.client.kroviz.core.model.PropertyDetails
 import org.apache.causeway.client.kroviz.to.TObject
 import org.apache.causeway.client.kroviz.to.ValueType
-import org.apache.causeway.client.kroviz.to.Vega5
+import org.apache.causeway.client.kroviz.ui.dialog.VegaPanel
 import org.apache.causeway.client.kroviz.ui.menu.DynamicMenuBuilder
-import org.apache.causeway.client.kroviz.utils.js.Vega
 
 /**
  * Create ColumnDefinitions for Tabulator tables
@@ -143,7 +141,7 @@ class ColumnFactory {
             title = it.name,
             field = it.id,
             width = (it.typicalLength * 8).toString(),
-            formatterComponentFunction = { cellComponent: 
Tabulator.CellComponent, _: (callback: () -> Unit) -> Unit, nothing: Nothing ->
+            formatterComponentFunction = { cellComponent: 
Tabulator.CellComponent, _: (callback: () -> Unit) -> Unit, _: Nothing ->
                 buildDiagramPanel(cellComponent)
             }
         )
@@ -152,19 +150,9 @@ class ColumnFactory {
     private fun buildDiagramPanel(cellComponent: Tabulator.CellComponent): 
Component {
         console.log("[CF_buildDiagramPanel]")
         console.log(cellComponent)
-        val panel = VPanel()
-        panel.addAfterInsertHook {
-            val json = cellComponent.getValue().unsafeCast<String>()
-            console.log(json)
-            val spec = JSON.parse<Vega5>(json)
-            val view = Vega.View(Vega.parse(spec), obj {
-                this.renderer = "canvas"
-                //this.container = getElement()
-                this.hover = true
-            })
-            view.runAsync()
-        }
-        return panel
+        val json = cellComponent.getValue().unsafeCast<String>()
+        console.log(json)
+        return VegaPanel(json)
     }
 
     private fun buildLink(): ColumnDefinition<dynamic> {
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/core/FormPanelFactory.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/core/FormPanelFactory.kt
index 4024243000..f27d9ebe94 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/core/FormPanelFactory.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/core/FormPanelFactory.kt
@@ -36,6 +36,7 @@ import io.kvision.html.Button
 import io.kvision.html.Div
 import io.kvision.html.Iframe
 import io.kvision.html.Image
+import io.kvision.panel.SimplePanel
 import io.kvision.panel.VPanel
 import io.kvision.panel.vPanel
 import io.kvision.utils.auto
@@ -45,6 +46,7 @@ import io.kvision.utils.vh
 import org.apache.causeway.client.kroviz.to.ValueType
 import org.apache.causeway.client.kroviz.to.Vega5
 import org.apache.causeway.client.kroviz.ui.dialog.Controller
+import org.apache.causeway.client.kroviz.ui.dialog.VegaPanel
 import org.apache.causeway.client.kroviz.ui.panel.SvgPanel
 import org.apache.causeway.client.kroviz.utils.DateHelper
 import org.apache.causeway.client.kroviz.utils.IconManager
@@ -77,7 +79,7 @@ class FormPanelFactory(items: List<FormItem>) : VPanel() {
                     ValueType.SVG_INLINE -> add(createInline(fi))
                     ValueType.SVG_MAPPED -> add(createSvgMap(fi))
                     ValueType.BUTTON -> add(createButton(fi))
-                    ValueType.CANVAS -> add(createCanvas(fi))
+                    ValueType.CANVAS -> add(createVega(fi))
                     else -> {
                     }
                 }
@@ -248,20 +250,10 @@ class FormPanelFactory(items: List<FormItem>) : VPanel() {
         return item
     }
 
-    private fun createCanvas(fi: FormItem): VPanel {
+    private fun createVega(fi: FormItem): SimplePanel {
         console.log("[FPF_createCanvas]")
-        val panel = VPanel()
-        panel.addAfterInsertHook {
-            val json = fi.content as String
-            val specFromClass = JSON.parse<Vega5>(json)
-//            console.log(specFromClass)
-            val view = Vega.View(Vega.parse(specFromClass), obj {
-                this.renderer = "canvas"
-                this.container = getElement()
-                this.hover = true
-            })
-            view.runAsync()
-        }
+        val json = fi.content as String
+        val panel = VegaPanel(json)
         console.log(panel)
         return panel
     }
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/core/RoMenuBar.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/core/RoMenuBar.kt
index 130ccfb1d0..0cbb2b023b 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/core/RoMenuBar.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/core/RoMenuBar.kt
@@ -35,6 +35,7 @@ import org.apache.causeway.client.kroviz.core.Session
 import org.apache.causeway.client.kroviz.core.aggregator.ActionDispatcher
 import org.apache.causeway.client.kroviz.core.event.ResourceProxy
 import org.apache.causeway.client.kroviz.to.Menubars
+import org.apache.causeway.client.kroviz.to.VEGA_SAMPLE
 import org.apache.causeway.client.kroviz.ui.dialog.*
 import org.apache.causeway.client.kroviz.ui.menu.DropDownMenuBuilder
 import org.apache.causeway.client.kroviz.ui.panel.GeoMap
@@ -204,7 +205,7 @@ class RoMenuBar : SimplePanel() {
 
         val vegaTitle = "Vega Sample"
         subMenu.add(
-            buildMenuEntry(vegaTitle, "Image", { ViewManager.add(vegaTitle, 
VegaPanel()) })
+            buildMenuEntry(vegaTitle, "Image", { ViewManager.add(vegaTitle, 
VegaPanel(VEGA_SAMPLE.str)) })
         )
 
         mainMenu.add(subMenu)
diff --git 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/dialog/VegaPanel.kt
 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/dialog/VegaPanel.kt
index 1aed9ffda5..99f6dd528e 100644
--- 
a/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/dialog/VegaPanel.kt
+++ 
b/incubator/clients/kroviz/src/main/kotlin/org/apache/causeway/client/kroviz/ui/dialog/VegaPanel.kt
@@ -20,17 +20,15 @@ package org.apache.causeway.client.kroviz.ui.dialog
 
 import io.kvision.panel.SimplePanel
 import io.kvision.utils.obj
-import org.apache.causeway.client.kroviz.to.VEGA_SAMPLE
 import org.apache.causeway.client.kroviz.to.Vega5
 import org.apache.causeway.client.kroviz.utils.js.Vega
 
-class VegaPanel : SimplePanel() {
+class VegaPanel(val json: String) : SimplePanel() {
 
     // https://vega.github.io/vega/examples/
 
     init {
         this.addAfterInsertHook {
-            val json = VEGA_SAMPLE.str
             val specFromClass = JSON.parse<Vega5>(json)
             console.log("[VP#init]")
             console.log(specFromClass)

Reply via email to