use of com.vaadin.flow.dom.DomEvent in project flow by vaadin.
the class ElementListenersTest method eventDataInEvent.
@Test
public void eventDataInEvent() {
AtomicReference<JsonObject> eventDataReference = new AtomicReference<>();
ns.add("foo", e -> {
Assert.assertNull(eventDataReference.get());
eventDataReference.set(e.getEventData());
});
Assert.assertNull(eventDataReference.get());
JsonObject eventData = Json.createObject();
eventData.put("baz", true);
ns.fireEvent(new DomEvent(new Element("element"), "foo", eventData));
JsonObject capturedJson = eventDataReference.get();
Assert.assertNotNull(capturedJson);
Assert.assertEquals(1, capturedJson.keys().length);
Assert.assertEquals("true", capturedJson.get("baz").toJson());
}
use of com.vaadin.flow.dom.DomEvent in project flow by vaadin.
the class ElementListenersTest method addAndRemoveEventData.
@Test
public void addAndRemoveEventData() {
ns.add("eventType", noOp).addEventData("data1").addEventData("data2");
Set<String> expressions = getExpressions("eventType");
Assert.assertTrue(expressions.contains("data1"));
Assert.assertTrue(expressions.contains("data2"));
Assert.assertFalse(expressions.contains("data3"));
Registration handle = ns.add("eventType", new DomEventListener() {
/*
* Can't use the existing noOp instance since there would then not
* be any listeners left after calling remove()
*/
@Override
public void handleEvent(DomEvent event) {
// no op
}
}).addEventData("data3");
expressions = getExpressions("eventType");
Assert.assertTrue(expressions.contains("data1"));
Assert.assertTrue(expressions.contains("data2"));
Assert.assertTrue(expressions.contains("data3"));
handle.remove();
expressions = getExpressions("eventType");
Assert.assertTrue(expressions.contains("data1"));
Assert.assertTrue(expressions.contains("data2"));
// due to fix to #5090, data3 won't be present after removal
Assert.assertFalse(expressions.contains("data3"));
}
use of com.vaadin.flow.dom.DomEvent in project flow by vaadin.
the class ElementListenersTest method testAddAndRemoveEventData.
@Test
public void testAddAndRemoveEventData() {
ns.add("eventType", noOp, new String[] { "data1", "data2" });
Set<String> expressions = getExpressions("eventType");
Assert.assertTrue(expressions.contains("data1"));
Assert.assertTrue(expressions.contains("data2"));
Assert.assertFalse(expressions.contains("data3"));
Registration handle = ns.add("eventType", new DomEventListener() {
/*
* Can't use the existing noOp instance since there would
* then not be any listeners left after calling remove()
*/
@Override
public void handleEvent(DomEvent event) {
// no op
}
}, new String[] { "data3" });
expressions = getExpressions("eventType");
Assert.assertTrue(expressions.contains("data1"));
Assert.assertTrue(expressions.contains("data2"));
Assert.assertTrue(expressions.contains("data3"));
handle.remove();
expressions = getExpressions("eventType");
Assert.assertTrue(expressions.contains("data1"));
Assert.assertTrue(expressions.contains("data2"));
// data3 might still be there, but we don't care
}
use of com.vaadin.flow.dom.DomEvent in project flow by vaadin.
the class DebounceSynchronizePropertyView method createModeToggle.
private Component createModeToggle(String caption, String id, Consumer<DomListenerRegistration> configurator) {
Element checkbox = new Element("input");
checkbox.setAttribute("type", "checkbox");
checkbox.setAttribute("id", id);
checkbox.addEventListener("change", new DomEventListener() {
private DomListenerRegistration registration = null;
@Override
public void handleEvent(DomEvent event) {
if (event.getEventData().getBoolean("element.checked")) {
assert registration == null;
registration = inputElement.addPropertyChangeListener("value", "input", propertyChange -> addChangeMessage(propertyChange.getValue()));
configurator.accept(registration);
} else {
registration.remove();
registration = null;
}
}
}).addEventData("element.checked");
Label label = new Label(caption);
label.getElement().insertChild(0, checkbox);
label.getElement().getStyle().set("display", "block");
return label;
}
use of com.vaadin.flow.dom.DomEvent in project flow by vaadin.
the class ElementListenersTest method mapEventTargetToElement_targetNodeIdInJsonData_elementMapped.
@Test
public void mapEventTargetToElement_targetNodeIdInJsonData_elementMapped() {
Element parent = new Element("parent");
Element child = new Element("child");
Element grandChild = new Element("grandChild");
parent.appendChild(child.appendChild(grandChild));
new StateTree(new UI().getInternals(), ElementChildrenList.class).getUI().getElement().appendChild(parent);
final String eventType = "click";
AtomicReference<Element> capturedTarget = new AtomicReference<>();
final DomListenerRegistration registration = parent.addEventListener(eventType, e -> {
capturedTarget.set(e.getEventTarget().orElse(null));
});
final ElementListenerMap listenerMap = parent.getNode().getFeature(ElementListenerMap.class);
Set<String> expressions = getExpressions(listenerMap, eventType);
Assert.assertEquals(0, expressions.size());
registration.mapEventTargetElement();
expressions = getExpressions(listenerMap, eventType);
Assert.assertEquals(1, expressions.size());
Assert.assertEquals(JsonConstants.MAP_STATE_NODE_EVENT_DATA, expressions.iterator().next());
// child
final JsonObject eventData = Json.createObject();
eventData.put(JsonConstants.MAP_STATE_NODE_EVENT_DATA, child.getNode().getId());
listenerMap.fireEvent(new DomEvent(parent, eventType, eventData));
Assert.assertEquals(child, capturedTarget.get());
// nothing reported -> empty optional
listenerMap.fireEvent(new DomEvent(parent, eventType, Json.createObject()));
Assert.assertNull("no element should be reported", capturedTarget.get());
// grandchild
eventData.put(JsonConstants.MAP_STATE_NODE_EVENT_DATA, grandChild.getNode().getId());
listenerMap.fireEvent(new DomEvent(parent, eventType, eventData));
Assert.assertEquals(grandChild, capturedTarget.get());
// -1 -> empty optional
eventData.put(JsonConstants.MAP_STATE_NODE_EVENT_DATA, -1);
listenerMap.fireEvent(new DomEvent(parent, eventType, eventData));
Assert.assertNull("no element should be reported", capturedTarget.get());
}
Aggregations