Skip to content

Commit

Permalink
[BUGFIX] enableSync sorting duplicates records (#214)
Browse files Browse the repository at this point in the history
  • Loading branch information
offirgolan authored Oct 9, 2016
1 parent 53ac713 commit 8f3caa3
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 3 deletions.
9 changes: 6 additions & 3 deletions addon/-private/sync-array-proxy.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ const {
isArray
} = Ember;

const EMPTY_ARRAY = [];

export default Ember.ArrayProxy.extend({
/**
* The model that will be synchronized to the content of this proxy
Expand Down Expand Up @@ -65,16 +67,17 @@ export default Ember.ArrayProxy.extend({

syncArrayDidChange(syncArray, start, removeCount, addCount) {
let content = this.get('content');
let objectsToAdd = EMPTY_ARRAY;

if(!this.get('syncEnabled')) {
return;
}

if(addCount > 0) {
content.replace(start, 0, this.serializeContentObjects(syncArray.slice(start, start + addCount)));
} else if(removeCount > 0) {
content.replace(start, removeCount, []);
objectsToAdd = this.serializeContentObjects(syncArray.slice(start, start + addCount));
}

content.replace(start, removeCount, objectsToAdd);
},

replaceContent(start, removeCount, objectsToAdd) {
Expand Down
27 changes: 27 additions & 0 deletions tests/unit/classes/table-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -473,3 +473,30 @@ test('table modifications with sync enabled - stress', function(assert) {
assert.equal(table.get('rows.length'), 0);
assert.equal(table.get('rows.length'), rows.get('length'));
});

test('table modifications with sync enabled - sort', function(assert) {
let rows = emberArray([]);
let table = new Table([], rows, { enableSync: true });
let length = 5;

for(let i = 0; i < length; i++) {
rows.pushObject({ position: i });
}

assert.equal(table.get('rows.length'), rows.get('length'));
assert.deepEqual(table.get('rows').getEach('position'), rows.getEach('position'));

rows.sort((a, b) => {
return a.position > b.position ? -1 : 1;
});

rows.arrayContentDidChange(0, length, length);

assert.equal(table.get('rows.length'), rows.get('length'));
assert.deepEqual(table.get('rows').getEach('position'), rows.getEach('position'));

rows.reverseObjects();

assert.equal(table.get('rows.length'), rows.get('length'));
assert.deepEqual(table.get('rows').getEach('position'), rows.getEach('position'));
});

0 comments on commit 8f3caa3

Please sign in to comment.