Skip to content

Commit

Permalink
Fix bugs: Dirty highlight was not clreared in all cases. Grid selecti…
Browse files Browse the repository at this point in the history
…on was not preserved when canceling confirm dialog. Added corresponding unit tests.
  • Loading branch information
TatuJLund committed Jul 3, 2024
1 parent 31a9db9 commit 5116a4f
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -204,14 +204,18 @@ private void flagStockCountAndAvailabilityInvalid(boolean invalid) {

public void showForm(boolean visible) {
if (visible) {
updateDirtyIndicators();
clearDirtyIndicators();
layout.addStyleName(VaadinCreateTheme.BOOKFORM_WRAPPER_VISIBLE);
} else {
layout.removeStyleName(VaadinCreateTheme.BOOKFORM_WRAPPER_VISIBLE);
}
setEnabled(visible);
}

public Product getProduct() {
return currentProduct;
}

public boolean isShown() {
var isShown = layout.getStyleName()
.contains(VaadinCreateTheme.BOOKFORM_WRAPPER_VISIBLE);
Expand All @@ -230,13 +234,17 @@ public boolean hasChanges() {
}

public void updateDirtyIndicators() {
binder.getFields().forEach(field -> ((Component) field)
.removeStyleName(VaadinCreateTheme.BOOKFORM_FIELD_DIRTY));
clearDirtyIndicators();
binder.getChangedBindings()
.forEach(binding -> ((Component) binding.getField())
.addStyleName(VaadinCreateTheme.BOOKFORM_FIELD_DIRTY));
}

private void clearDirtyIndicators() {
binder.getFields().forEach(field -> ((Component) field)
.removeStyleName(VaadinCreateTheme.BOOKFORM_FIELD_DIRTY));
}

private void buildForm() {
layout.addStyleNames(VaadinCreateTheme.BOOKFORM,
VaadinCreateTheme.BOOKFORM_WRAPPER);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,16 +81,21 @@ public BooksView() {

grid = new BookGrid();
grid.asSingleSelect().addValueChangeListener(event -> {
if (form.hasChanges()) {
var dialog = createDiscardChangesConfirmDialog();
dialog.open();
dialog.addConfirmedListener(e -> {
presenter.unlockBook();
form.showForm(false);
setFragmentParameter("");
});
} else {
presenter.rowSelected(event.getValue());
if (event.isUserOriginated()) {
if (form.hasChanges()) {
var dialog = createDiscardChangesConfirmDialog();
dialog.open();
dialog.addConfirmedListener(e -> {
presenter.unlockBook();
form.showForm(false);
setFragmentParameter("");
});
dialog.addCancelListener(e -> {
grid.select(form.getProduct());
});
} else {
presenter.rowSelected(event.getValue());
}
}
});
grid.setVisible(false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,51 @@ public void editAndCancel() {
book.getId()) != null);
}

@Test
public void editAndSelectAndConfirmCancel() {
test(grid).click(1, 0);
assertTrue(form.isShown());

test(form.productName).setValue("Changed book");

test(grid).click(1, 1);
assertTrue(form.productName.getStyleName()
.contains(VaadinCreateTheme.BOOKFORM_FIELD_DIRTY));
var dialog = $(Window.class).id("confirm-dialog");
test($(dialog, Button.class).id("confirm-button")).click();
assertFalse(form.isShown());

test(grid).click(1, 0);
assertTrue(form.isShown());
assertFalse(form.productName.getStyleName()
.contains(VaadinCreateTheme.BOOKFORM_FIELD_DIRTY));
}

@Test
public void editAndSelectAndCancelCancel() {
var book = test(grid).item(0);
test(grid).click(1, 0);
assertTrue(form.isShown());

test(form.productName).setValue("Changed book");

test(grid).click(1, 1);
assertTrue(form.productName.getStyleName()
.contains(VaadinCreateTheme.BOOKFORM_FIELD_DIRTY));
var dialog = $(Window.class).id("confirm-dialog");
test($(dialog, Button.class).id("cancel-button")).click();

assertTrue(form.isShown());
assertTrue(form.productName.getStyleName()
.contains(VaadinCreateTheme.BOOKFORM_FIELD_DIRTY));

assertEquals(book, grid.getSelectedRow());

test(form.discard).click();
assertFalse(form.productName.getStyleName()
.contains(VaadinCreateTheme.BOOKFORM_FIELD_DIRTY));
}

@Test
public void openProductChangedByOtherUser() {
var book = test(grid).item(0);
Expand Down

0 comments on commit 5116a4f

Please sign in to comment.