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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user