Disable draft buttons while draft is updated

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

Change-Id: I3f314c08cd73166146a33b4bf763f42812cc4358
Signed-off-by: Edwin Kempin <ekempin@google.com>
This commit is contained in:
Edwin Kempin
2016-08-23 13:22:35 +02:00
parent 3612f890d7
commit 9d2bc80893
2 changed files with 27 additions and 11 deletions

View File

@@ -627,20 +627,22 @@ public class ChangeScreen extends Screen {
@UiHandler("publish")
void onPublish(@SuppressWarnings("unused") ClickEvent e) {
DraftActions.publish(changeId, revision);
DraftActions.publish(changeId, revision, publish, deleteRevision,
deleteChange);
}
@UiHandler("deleteRevision")
void onDeleteRevision(@SuppressWarnings("unused") ClickEvent e) {
if (Window.confirm(Resources.C.deleteDraftRevision())) {
DraftActions.delete(changeId, revision);
DraftActions.delete(changeId, revision, publish, deleteRevision,
deleteChange);
}
}
@UiHandler("deleteChange")
void onDeleteChange(@SuppressWarnings("unused") ClickEvent e) {
if (Window.confirm(Resources.C.deleteDraftChange())) {
DraftActions.delete(changeId);
DraftActions.delete(changeId, publish, deleteRevision, deleteChange);
}
}

View File

@@ -21,23 +21,25 @@ 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.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
public class DraftActions {
static void publish(Change.Id id, String revision) {
ChangeApi.publish(id.get(), revision, cs(id));
static void publish(Change.Id id, String revision, Button... draftButtons) {
ChangeApi.publish(id.get(), revision, cs(id, draftButtons));
}
static void delete(Change.Id id, String revision) {
ChangeApi.deleteRevision(id.get(), revision, cs(id));
static void delete(Change.Id id, String revision, Button... draftButtons) {
ChangeApi.deleteRevision(id.get(), revision, cs(id, draftButtons));
}
static void delete(Change.Id id) {
ChangeApi.deleteChange(id.get(), mine());
static void delete(Change.Id id, Button... draftButtons) {
ChangeApi.deleteChange(id.get(), mine(draftButtons));
}
public static GerritCallback<JavaScriptObject> cs(
final Change.Id id) {
final Change.Id id, final Button... draftButtons) {
setEnabled(false, draftButtons);
return new GerritCallback<JavaScriptObject>() {
@Override
public void onSuccess(JavaScriptObject result) {
@@ -46,6 +48,7 @@ public class DraftActions {
@Override
public void onFailure(Throwable err) {
setEnabled(true, draftButtons);
if (SubmitFailureDialog.isConflict(err)) {
new SubmitFailureDialog(err.getMessage()).center();
Gerrit.display(PageLinks.toChange(id));
@@ -56,7 +59,9 @@ public class DraftActions {
};
}
private static AsyncCallback<JavaScriptObject> mine() {
private static AsyncCallback<JavaScriptObject> mine(
final Button... draftButtons) {
setEnabled(false, draftButtons);
return new GerritCallback<JavaScriptObject>() {
@Override
public void onSuccess(JavaScriptObject result) {
@@ -65,6 +70,7 @@ public class DraftActions {
@Override
public void onFailure(Throwable err) {
setEnabled(true, draftButtons);
if (SubmitFailureDialog.isConflict(err)) {
new SubmitFailureDialog(err.getMessage()).center();
Gerrit.display(PageLinks.MINE);
@@ -74,4 +80,12 @@ public class DraftActions {
}
};
}
private static void setEnabled(boolean enabled, Button... draftButtons) {
if (draftButtons != null) {
for (Button b : draftButtons) {
b.setEnabled(enabled);
}
}
}
}