Skip to content

Commit e8cf480

Browse files
fix: non Event objects do not need processing before serialization
If the event object was a string, we would call pickSerializable on it which would convert it to an object, which results in a dict on the Python side.
1 parent fa1668c commit e8cf480

File tree

2 files changed

+37
-4
lines changed

2 files changed

+37
-4
lines changed

js/src/VueRenderer.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,10 @@ function pickSerializable(object, depth=0, max_depth=2) {
7575
}
7676

7777
export function eventToObject(event) {
78-
if (event == null) {
79-
return event;
78+
if (event instanceof Event) {
79+
return pickSerializable(event);
8080
}
81-
return pickSerializable(event);
81+
return event;
8282
}
8383

8484
export function vueRender(createElement, model, parentView, slotScopes) {

tests/ui/test_template.py

+34-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import playwright.sync_api
99

1010
from IPython.display import display
11-
from traitlets import default, Int
11+
from traitlets import default, Int, Callable, Unicode
1212

1313

1414
class MyTemplate(vue.VueTemplate):
@@ -37,3 +37,36 @@ def kernel_code():
3737
widget.wait_for()
3838
widget.click()
3939
page_session.locator("text=Clicked 1").wait_for()
40+
41+
42+
class MyEventTemplate(vue.VueTemplate):
43+
on_custom = Callable()
44+
text = Unicode("Click Me").tag(sync=True)
45+
46+
@default("template")
47+
def _default_vue_template(self):
48+
return """
49+
<template>
50+
<div @click="custom_event('not-an-event-object')">{{text}}</div>
51+
</template>
52+
"""
53+
54+
def vue_custom_event(self, data):
55+
self.on_custom(data)
56+
57+
58+
def test_template_custom_event(solara_test, page_session: playwright.sync_api.Page):
59+
last_event_data = None
60+
61+
def on_custom(data):
62+
nonlocal last_event_data
63+
last_event_data = data
64+
div.text = "Clicked"
65+
66+
div = MyEventTemplate(on_custom=on_custom)
67+
68+
display(div)
69+
70+
page_session.locator("text=Click Me").click()
71+
page_session.locator("text=Clicked").wait_for()
72+
assert last_event_data == "not-an-event-object"

0 commit comments

Comments
 (0)