Skip to content

Commit

Permalink
Merge pull request #214 from vaadin/fix/event-order-on-sort
Browse files Browse the repository at this point in the history
Fixed order of events on column sort (fixes #206)
  • Loading branch information
Saulis committed Oct 20, 2015
2 parents a4325a8 + acfbc4b commit 8601b69
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 6 deletions.
1 change: 1 addition & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
- Hiding the header/footer declarative requires the element to have at least one cell (#135)
- JSRow reference data with single column ds fixed
- Column header text should default to name if none is given (#136)
- Fire sort event before clearing the selection (#206)

#### API changes:
- `grid.data.source` is now `grid.items` for Arrays and `grid.datasource` for Functions. (#160)
Expand Down
3 changes: 1 addition & 2 deletions java/src/main/java/com/vaadin/elements/grid/GridElement.java
Original file line number Diff line number Diff line change
Expand Up @@ -512,13 +512,12 @@ private JSArray<JSSortOrder> mapToJSSortOrders(List<SortOrder> sortOrders) {

@Override
public void sort(SortEvent<Object> event) {
getSelectionModel().reset();

if (event.isUserOriginated()) {
JsUtils.prop(container, "sortOrder",
mapToJSSortOrders(event.getOrder()));
}

getSelectionModel().reset();
clearDataSourceCache();
}

Expand Down
45 changes: 45 additions & 0 deletions test/grid-sorting-rows.html
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,18 @@
<script>
describe.feature('sorting rows', function() {

var sortListener;

before(function() {
grid.addEventListener('sort-order-changed', function() {
sortListener();
});
});

beforeEach(function() {
sortListener = sinon.spy();
});

describe('using api', function() {

function assignInvalidSortOrder() {
Expand Down Expand Up @@ -90,6 +102,19 @@
expect(grid.selection.selected()).to.be.empty;
});

it('should fire sort event before clearing the selection on api sort', function(done) {
sortListener = function() {
expect(grid.selection.selected()).to.eql([0]);
done();
};

grid.selection.select(0);
grid.sortOrder = [{
column: 0,
direction: "desc"
}];
});

it('should ignore selection column from index', function() {
var firstNonFrozenHeaderCell = qLocal.bind(this, ".vaadin-grid-header .vaadin-grid-cell:not(.frozen)");

Expand Down Expand Up @@ -161,6 +186,17 @@
}]);
});

it('should fire sort event before clearing the selection on user sort', function(done) {
sortListener = function() {
expect(grid.selection.selected()).to.eql([0]);
done();
};

grid.selection.select(0);
var cells = qaLocal(".vaadin-grid-header .vaadin-grid-cell");
triggerMouseEvent(cells[1], "click");
});

it('should sort by two columns', function() {
grid.sortOrder = [];
var cells = qaLocal(".vaadin-grid-header .vaadin-grid-cell");
Expand All @@ -178,5 +214,14 @@
});
});

it('should clear selection after sort', function() {
grid.selection.select(0);
grid.sortOrder = [{
column: 0,
direction: "desc"
}];
expect(grid.selection.selected()).to.be.empty;
});

});
</script>
8 changes: 4 additions & 4 deletions vaadin-grid.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 8601b69

Please sign in to comment.