aboutsummaryrefslogtreecommitdiffstats
path: root/client/src
diff options
context:
space:
mode:
Diffstat (limited to 'client/src')
-rw-r--r--client/src/main/java/com/vaadin/client/connectors/grid/EditorConnector.java27
1 files changed, 27 insertions, 0 deletions
diff --git a/client/src/main/java/com/vaadin/client/connectors/grid/EditorConnector.java b/client/src/main/java/com/vaadin/client/connectors/grid/EditorConnector.java
index 50704c4262..c8c60c9620 100644
--- a/client/src/main/java/com/vaadin/client/connectors/grid/EditorConnector.java
+++ b/client/src/main/java/com/vaadin/client/connectors/grid/EditorConnector.java
@@ -19,6 +19,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import com.google.gwt.core.client.Scheduler;
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.client.ComponentConnector;
import com.vaadin.client.ConnectorMap;
@@ -28,6 +29,7 @@ import com.vaadin.client.extensions.AbstractExtensionConnector;
import com.vaadin.client.widget.grid.EditorHandler;
import com.vaadin.client.widgets.Grid;
import com.vaadin.client.widgets.Grid.Column;
+import com.vaadin.shared.Range;
import com.vaadin.shared.data.DataCommunicatorConstants;
import com.vaadin.shared.ui.Connect;
import com.vaadin.shared.ui.grid.editor.EditorClientRpc;
@@ -46,6 +48,9 @@ import elemental.json.JsonObject;
@Connect(EditorImpl.class)
public class EditorConnector extends AbstractExtensionConnector {
+ private Integer currentEditedRow = null;
+ private boolean waitingForAvailableData = false;
+
/**
* EditorHandler for communicating with the server-side implementation.
*/
@@ -56,6 +61,20 @@ public class EditorConnector extends AbstractExtensionConnector {
public CustomEditorHandler() {
registerRpc(EditorClientRpc.class, new EditorClientRpc() {
+
+ @Override
+ public void bind(final int rowIndex) {
+ // call this deferred to avoid issues with editing on init
+ Scheduler.get().scheduleDeferred(() -> {
+ currentEditedRow = rowIndex;
+ // might need to wait for available data,
+ // if data is available, ensureAvailability will immediately trigger the handler anyway,
+ // so no need for alternative "immediately available" logic
+ waitingForAvailableData = true;
+ getParent().getDataSource().ensureAvailability(rowIndex, 1);
+ });
+ }
+
@Override
public void cancel() {
serverInitiated = true;
@@ -110,6 +129,7 @@ public class EditorConnector extends AbstractExtensionConnector {
// a confirmation from the server
rpc.cancel(afterBeingSaved);
}
+ currentEditedRow = null;
}
@Override
@@ -198,6 +218,13 @@ public class EditorConnector extends AbstractExtensionConnector {
protected void extend(ServerConnector target) {
Grid<JsonObject> grid = getParent().getWidget();
grid.getEditor().setHandler(new CustomEditorHandler());
+ grid.addDataAvailableHandler((event) -> {
+ Range range = event.getAvailableRows();
+ if (waitingForAvailableData && currentEditedRow != null && range.contains(currentEditedRow)) {
+ getParent().getWidget().editRow(currentEditedRow);
+ waitingForAvailableData = false;
+ }
+ });
}
@Override