Search in sources :

Example 11 with DomListenerRegistration

use of com.vaadin.flow.dom.DomListenerRegistration 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;
}
Also used : Consumer(java.util.function.Consumer) DomEvent(com.vaadin.flow.dom.DomEvent) DomEventListener(com.vaadin.flow.dom.DomEventListener) Component(com.vaadin.flow.component.Component) HtmlComponent(com.vaadin.flow.component.HtmlComponent) Element(com.vaadin.flow.dom.Element) Label(com.vaadin.flow.component.html.Label) ViewTestLayout(com.vaadin.flow.uitest.servlet.ViewTestLayout) DomListenerRegistration(com.vaadin.flow.dom.DomListenerRegistration) Route(com.vaadin.flow.router.Route) Element(com.vaadin.flow.dom.Element) Label(com.vaadin.flow.component.html.Label) DomEventListener(com.vaadin.flow.dom.DomEventListener) DomListenerRegistration(com.vaadin.flow.dom.DomListenerRegistration) DomEvent(com.vaadin.flow.dom.DomEvent)

Example 12 with DomListenerRegistration

use of com.vaadin.flow.dom.DomListenerRegistration in project flow by vaadin.

the class AbstractSinglePropertyFieldTest method synchronizedEvent_redefined.

@Test
public void synchronizedEvent_redefined() {
    StringField stringField = new StringField();
    DomListenerRegistration origReg = stringField.getSynchronizationRegistration();
    SerializableRunnable unregisterListener = Mockito.mock(SerializableRunnable.class);
    origReg.onUnregister(unregisterListener);
    stringField.setSynchronizedEvent("blur");
    DomListenerRegistration recentReg = stringField.getSynchronizationRegistration();
    Mockito.verify(unregisterListener).run();
    Assert.assertNotSame(origReg, recentReg);
    Assert.assertEquals("blur", recentReg.getEventType());
}
Also used : SerializableRunnable(com.vaadin.flow.function.SerializableRunnable) DomListenerRegistration(com.vaadin.flow.dom.DomListenerRegistration) Test(org.junit.Test)

Example 13 with DomListenerRegistration

use of com.vaadin.flow.dom.DomListenerRegistration in project flow by vaadin.

the class ElementListenersTest method synchronizeProperty_hasExpressionToken.

@Test
public void synchronizeProperty_hasExpressionToken() {
    DomListenerRegistration registration = ns.add("foo", noOp);
    Assert.assertEquals(Collections.emptySet(), getExpressions("foo"));
    registration.synchronizeProperty("name");
    Assert.assertEquals(Collections.singleton(JsonConstants.SYNCHRONIZE_PROPERTY_TOKEN + "name"), getExpressions("foo"));
}
Also used : DomListenerRegistration(com.vaadin.flow.dom.DomListenerRegistration) Test(org.junit.Test)

Example 14 with DomListenerRegistration

use of com.vaadin.flow.dom.DomListenerRegistration in project flow by vaadin.

the class ElementListenersTest method synchronizeProperty_hasSynchronizedProperty.

@Test
public void synchronizeProperty_hasSynchronizedProperty() {
    DomListenerRegistration registration = ns.add("foo", noOp);
    Assert.assertNull(ns.getPropertySynchronizationMode("name"));
    registration.synchronizeProperty("anotherName");
    Assert.assertNull(ns.getPropertySynchronizationMode("name"));
    registration.synchronizeProperty("name");
    Assert.assertSame(DisabledUpdateMode.ONLY_WHEN_ENABLED, ns.getPropertySynchronizationMode("name"));
}
Also used : DomListenerRegistration(com.vaadin.flow.dom.DomListenerRegistration) Test(org.junit.Test)

Example 15 with DomListenerRegistration

use of com.vaadin.flow.dom.DomListenerRegistration 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());
}
Also used : StateTree(com.vaadin.flow.internal.StateTree) UI(com.vaadin.flow.component.UI) Element(com.vaadin.flow.dom.Element) JsonObject(elemental.json.JsonObject) AtomicReference(java.util.concurrent.atomic.AtomicReference) DomListenerRegistration(com.vaadin.flow.dom.DomListenerRegistration) DomEvent(com.vaadin.flow.dom.DomEvent) Test(org.junit.Test)

Aggregations

DomListenerRegistration (com.vaadin.flow.dom.DomListenerRegistration)17 Test (org.junit.Test)12 Element (com.vaadin.flow.dom.Element)7 DomEvent (com.vaadin.flow.dom.DomEvent)5 StateTree (com.vaadin.flow.internal.StateTree)4 JsonObject (elemental.json.JsonObject)4 AtomicReference (java.util.concurrent.atomic.AtomicReference)4 UI (com.vaadin.flow.component.UI)3 Registration (com.vaadin.flow.shared.Registration)2 Serializable (java.io.Serializable)2 HashSet (java.util.HashSet)2 Set (java.util.Set)2 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)2 Component (com.vaadin.flow.component.Component)1 HtmlComponent (com.vaadin.flow.component.HtmlComponent)1 Label (com.vaadin.flow.component.html.Label)1 DebouncePhase (com.vaadin.flow.dom.DebouncePhase)1 DisabledUpdateMode (com.vaadin.flow.dom.DisabledUpdateMode)1 DomEventListener (com.vaadin.flow.dom.DomEventListener)1 PropertyChangeEvent (com.vaadin.flow.dom.PropertyChangeEvent)1