parent
ce47d33cd9
commit
cb5a7efa91
|
@ -120,7 +120,6 @@ export class DefaultKeyValueDiffer<K, V> implements KeyValueDiffer<K, V>, KeyVal
|
||||||
}
|
}
|
||||||
|
|
||||||
this._removalsHead = insertBefore;
|
this._removalsHead = insertBefore;
|
||||||
this._removalsTail = insertBefore;
|
|
||||||
|
|
||||||
for (let record = insertBefore; record !== null; record = record._nextRemoved) {
|
for (let record = insertBefore; record !== null; record = record._nextRemoved) {
|
||||||
if (record === this._mapHead) {
|
if (record === this._mapHead) {
|
||||||
|
@ -135,6 +134,10 @@ export class DefaultKeyValueDiffer<K, V> implements KeyValueDiffer<K, V>, KeyVal
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make sure tails have no next records from previous runs
|
||||||
|
if (this._changesTail) this._changesTail._nextChanged = null;
|
||||||
|
if (this._additionsTail) this._additionsTail._nextAdded = null;
|
||||||
|
|
||||||
return this.isDirty;
|
return this.isDirty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -222,7 +225,7 @@ export class DefaultKeyValueDiffer<K, V> implements KeyValueDiffer<K, V>, KeyVal
|
||||||
|
|
||||||
this._changesHead = this._changesTail = null;
|
this._changesHead = this._changesTail = null;
|
||||||
this._additionsHead = this._additionsTail = null;
|
this._additionsHead = this._additionsTail = null;
|
||||||
this._removalsHead = this._removalsTail = null;
|
this._removalsHead = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -254,28 +257,17 @@ export class DefaultKeyValueDiffer<K, V> implements KeyValueDiffer<K, V>, KeyVal
|
||||||
}
|
}
|
||||||
|
|
||||||
toString(): string {
|
toString(): string {
|
||||||
const items: any[] = [];
|
const items: string[] = [];
|
||||||
const previous: any[] = [];
|
const previous: string[] = [];
|
||||||
const changes: any[] = [];
|
const changes: string[] = [];
|
||||||
const additions: any[] = [];
|
const additions: string[] = [];
|
||||||
const removals: any[] = [];
|
const removals: string[] = [];
|
||||||
let record: KeyValueChangeRecord_<K, V>|null;
|
|
||||||
|
|
||||||
for (record = this._mapHead; record !== null; record = record._next) {
|
this.forEachItem(r => items.push(stringify(r)));
|
||||||
items.push(stringify(record));
|
this.forEachPreviousItem(r => previous.push(stringify(r)));
|
||||||
}
|
this.forEachChangedItem(r => changes.push(stringify(r)));
|
||||||
for (record = this._previousMapHead; record !== null; record = record._nextPrevious) {
|
this.forEachAddedItem(r => additions.push(stringify(r)));
|
||||||
previous.push(stringify(record));
|
this.forEachRemovedItem(r => removals.push(stringify(r)));
|
||||||
}
|
|
||||||
for (record = this._changesHead; record !== null; record = record._nextChanged) {
|
|
||||||
changes.push(stringify(record));
|
|
||||||
}
|
|
||||||
for (record = this._additionsHead; record !== null; record = record._nextAdded) {
|
|
||||||
additions.push(stringify(record));
|
|
||||||
}
|
|
||||||
for (record = this._removalsHead; record !== null; record = record._nextRemoved) {
|
|
||||||
removals.push(stringify(record));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 'map: ' + items.join(', ') + '\n' +
|
return 'map: ' + items.join(', ') + '\n' +
|
||||||
'previous: ' + previous.join(', ') + '\n' +
|
'previous: ' + previous.join(', ') + '\n' +
|
||||||
|
|
|
@ -194,6 +194,19 @@ export function main() {
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// https://github.com/angular/angular/issues/14997
|
||||||
|
it('should work regardless key order', () => {
|
||||||
|
differ.check({a: 1, b: 2});
|
||||||
|
differ.check({b: 3, a: 2});
|
||||||
|
differ.check({a: 1, b: 2});
|
||||||
|
|
||||||
|
expect(differ.toString()).toEqual(kvChangesAsString({
|
||||||
|
map: ['a[2->1]', 'b[3->2]'],
|
||||||
|
previous: ['b[3->2]', 'a[2->1]'],
|
||||||
|
changes: ['a[2->1]', 'b[3->2]']
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
it('should when the first item is moved', () => {
|
it('should when the first item is moved', () => {
|
||||||
differ.check({a: 'a', b: 'b'});
|
differ.check({a: 'a', b: 'b'});
|
||||||
differ.check({c: 'c', a: 'a'});
|
differ.check({c: 'c', a: 'a'});
|
||||||
|
|
Loading…
Reference in New Issue