* Rebuild calendar pop-up on readOnly state change Fixes https://github.com/vaadin/framework/issues/6565tags/8.7.0.alpha1
@@ -938,6 +938,15 @@ public abstract class VAbstractCalendarPanel<R extends Enum<R>> | |||
renderCalendar(true); | |||
} | |||
/** | |||
* Returns the value of initialRenderDone | |||
* | |||
* @since | |||
*/ | |||
public boolean isInitialRenderDone() { | |||
return initialRenderDone; | |||
} | |||
/** | |||
* For internal use only. May be removed or replaced in the future. | |||
* |
@@ -117,7 +117,7 @@ public abstract class TextualDateConnector<PANEL extends VAbstractCalendarPanel< | |||
@Override | |||
public void onStateChanged(StateChangeEvent stateChangeEvent) { | |||
String oldLocale = getWidget().getCurrentLocale(); | |||
boolean isReadOnly = getWidget().isReadonly(); | |||
getWidget().parsable = getState().parsable; | |||
super.onStateChanged(stateChangeEvent); | |||
@@ -159,6 +159,10 @@ public abstract class TextualDateConnector<PANEL extends VAbstractCalendarPanel< | |||
} else { | |||
getWidget().calendarToggle.removeStyleName( | |||
VAbstractPopupCalendar.CLASSNAME + "-button-readonly"); | |||
if (getState().readOnly != isReadOnly | |||
&& getWidget().calendar.isInitialRenderDone()) { | |||
getWidget().calendar.renderCalendar(); | |||
} | |||
} | |||
getWidget().setDescriptionForAssistiveDevices( |
@@ -0,0 +1,37 @@ | |||
package com.vaadin.tests.components.datefield; | |||
import com.vaadin.annotations.Widgetset; | |||
import com.vaadin.server.VaadinRequest; | |||
import com.vaadin.shared.ui.datefield.DateTimeResolution; | |||
import com.vaadin.tests.components.AbstractTestUI; | |||
import com.vaadin.ui.Button; | |||
import com.vaadin.ui.DateTimeField; | |||
import java.time.LocalDateTime; | |||
import java.util.Locale; | |||
@Widgetset("com.vaadin.DefaultWidgetSet") | |||
public class DateTimeFieldAfterReadOnly extends AbstractTestUI { | |||
@Override | |||
protected void setup(VaadinRequest request) { | |||
final DateTimeField timeField = new DateTimeField( | |||
"A read-only datefield"); | |||
timeField.setResolution(DateTimeResolution.MINUTE); | |||
timeField.setLocale(new Locale("fi")); | |||
timeField.setId("dF"); | |||
// Set date so that testing always has same time | |||
timeField.setValue(LocalDateTime.now()); | |||
timeField.setReadOnly(true); | |||
addComponent(timeField); | |||
Button b = new Button("Switch read-only"); | |||
b.addClickListener(event -> { | |||
timeField.setReadOnly(!timeField.isReadOnly()); | |||
}); | |||
b.setId("readOnlySwitch"); | |||
addComponent(b); | |||
} | |||
} |
@@ -0,0 +1,33 @@ | |||
package com.vaadin.tests.components.datefield; | |||
import com.vaadin.testbench.By; | |||
import com.vaadin.testbench.elements.AbstractDateFieldElement; | |||
import com.vaadin.tests.tb3.MultiBrowserTest; | |||
import org.junit.Test; | |||
import static junit.framework.TestCase.assertEquals; | |||
public class DateTimeFieldAfterReadOnlyTest extends MultiBrowserTest { | |||
@Test | |||
public void readOnlyDateFieldPopupShouldNotOpen() { | |||
openTestURL(); | |||
toggleReadOnly(); | |||
openPopup(); | |||
assertEquals(2, numberOfSelectsField()); | |||
} | |||
private void openPopup() { | |||
$(AbstractDateFieldElement.class).first() | |||
.findElement(By.tagName("button")).click(); | |||
} | |||
private void toggleReadOnly() { | |||
findElement(By.id("readOnlySwitch")).click(); | |||
} | |||
private int numberOfSelectsField() { | |||
return findElement(By.className("v-datefield-calendarpanel-time")) | |||
.findElements(By.className("v-select")).size(); | |||
} | |||
} |