Skip to content

Commit 44e2d17

Browse files
committed
removing via index-based applyUpdates, edge cases
1 parent 984014d commit 44e2d17

File tree

2 files changed

+28
-11
lines changed

2 files changed

+28
-11
lines changed

src/modules/adapter.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,19 +120,20 @@ class Adapter {
120120
throw new Error('applyUpdates - ' + index + ' is not a valid index (should be an integer)');
121121
}
122122
const _index = index - this.buffer.first;
123+
123124
// apply updates only within buffer
124125
if (_index >= 0 && _index < this.buffer.length) {
125126
this.applyUpdate(this.buffer[_index], newItems);
126127
}
127128
// out-of-buffer case: deletion may affect Paddings
128-
else if(index >= this.buffer.minIndex && index <= this.buffer.maxIndex) {
129+
else if(index >= this.buffer.getAbsMinIndex() && index <= this.buffer.getAbsMaxIndex()) {
129130
if(angular.isArray(newItems) && !newItems.length) {
130131
var isTop = index === this.buffer.minIndex;
131132
if(isTop) {
132133
this.buffer.incrementMinIndex();
133134
}
134135
else {
135-
this.buffer.decrementMinIndex();
136+
this.buffer.decrementMaxIndex();
136137
}
137138
this.viewport.removeCacheItem(index, isTop);
138139
}

src/modules/buffer.js

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -77,16 +77,16 @@ export default function ScrollBuffer(elementRoutines, bufferSize) {
7777
}
7878
// removes single item(wrapper) from the buffer
7979
buffer.splice(buffer.indexOf(arg1), 1);
80+
if(arg1._op === 'isTop' && buffer.first === this.getAbsMinIndex()) {
81+
this.incrementMinIndex();
82+
}
83+
else {
84+
this.decrementMaxIndex();
85+
}
8086
if(arg1._op === 'isTop') {
81-
if(buffer.first === buffer.minIndex) {
82-
this.incrementMinIndex();
83-
}
8487
buffer.first++;
8588
}
8689
else {
87-
if(buffer.next === buffer.maxIndex + 1) {
88-
this.decrementMinIndex();
89-
}
9090
buffer.next--;
9191
}
9292
if(!buffer.length) {
@@ -98,15 +98,31 @@ export default function ScrollBuffer(elementRoutines, bufferSize) {
9898
},
9999

100100
incrementMinIndex() {
101-
if(buffer.minIndex++ === buffer.minIndexUser) {
101+
if(buffer.minIndexUser !== null && buffer.minIndex === buffer.minIndexUser) {
102102
buffer.minIndexUser++;
103103
}
104+
buffer.minIndex++;
104105
},
105106

106-
decrementMinIndex() {
107-
if(buffer.maxIndex-- <= buffer.maxIndexUser) {
107+
decrementMaxIndex() {
108+
if(buffer.maxIndexUser !== null && buffer.maxIndex <= buffer.maxIndexUser) {
108109
buffer.maxIndexUser--;
109110
}
111+
buffer.maxIndex--;
112+
},
113+
114+
getAbsMinIndex() {
115+
if(buffer.minIndexUser !== null) {
116+
return Math.min(buffer.minIndexUser, buffer.minIndex);
117+
}
118+
return buffer.minIndex;
119+
},
120+
121+
getAbsMaxIndex() {
122+
if(buffer.maxIndexUser !== null) {
123+
return Math.max(buffer.maxIndexUser, buffer.maxIndex);
124+
}
125+
return buffer.maxIndex;
110126
},
111127

112128
effectiveHeight(elements) {

0 commit comments

Comments
 (0)