Disable edit buttons while edit is updated

Users shouldn't poke the buttons and trigger multiple requests to
update a change edit at the same time.

Change-Id: I26d96a2b0eac4b115483376cce60d7e3c408eadc
Signed-off-by: Edwin Kempin <ekempin@google.com>
This commit is contained in:
Edwin Kempin
2016-08-23 10:45:18 +02:00
parent d0383c131c
commit 173977e48a
2 changed files with 21 additions and 10 deletions

View File

@@ -605,18 +605,18 @@ public class ChangeScreen extends Screen {
@UiHandler("publishEdit")
void onPublishEdit(@SuppressWarnings("unused") ClickEvent e) {
EditActions.publishEdit(changeId);
EditActions.publishEdit(changeId, publishEdit, rebaseEdit, deleteEdit);
}
@UiHandler("rebaseEdit")
void onRebaseEdit(@SuppressWarnings("unused") ClickEvent e) {
EditActions.rebaseEdit(changeId);
EditActions.rebaseEdit(changeId, publishEdit, rebaseEdit, deleteEdit);
}
@UiHandler("deleteEdit")
void onDeleteEdit(@SuppressWarnings("unused") ClickEvent e) {
if (Window.confirm(Resources.C.deleteChangeEdit())) {
EditActions.deleteEdit(changeId);
EditActions.deleteEdit(changeId, publishEdit, rebaseEdit, deleteEdit);
}
}

View File

@@ -20,23 +20,25 @@ import com.google.gerrit.client.rpc.GerritCallback;
import com.google.gerrit.common.PageLinks;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.user.client.ui.Button;
public class EditActions {
static void deleteEdit(Change.Id id) {
ChangeApi.deleteEdit(id.get(), cs(id));
static void deleteEdit(Change.Id id, Button... editButtons) {
ChangeApi.deleteEdit(id.get(), cs(id, editButtons));
}
static void publishEdit(Change.Id id) {
ChangeApi.publishEdit(id.get(), cs(id));
static void publishEdit(Change.Id id, Button... editButtons) {
ChangeApi.publishEdit(id.get(), cs(id, editButtons));
}
static void rebaseEdit(Change.Id id) {
ChangeApi.rebaseEdit(id.get(), cs(id));
static void rebaseEdit(Change.Id id, Button... editButtons) {
ChangeApi.rebaseEdit(id.get(), cs(id, editButtons));
}
public static GerritCallback<JavaScriptObject> cs(
final Change.Id id) {
final Change.Id id, final Button... editButtons) {
setEnabled(false, editButtons);
return new GerritCallback<JavaScriptObject>() {
@Override
public void onSuccess(JavaScriptObject result) {
@@ -45,6 +47,7 @@ public class EditActions {
@Override
public void onFailure(Throwable err) {
setEnabled(true, editButtons);
if (SubmitFailureDialog.isConflict(err)) {
new SubmitFailureDialog(err.getMessage()).center();
Gerrit.display(PageLinks.toChange(id));
@@ -54,4 +57,12 @@ public class EditActions {
}
};
}
private static void setEnabled(boolean enabled, Button... editButtons) {
if (editButtons != null) {
for (Button b : editButtons) {
b.setEnabled(enabled);
}
}
}
}