@@ -113,29 +113,6 @@ class Adapter {
113
113
return ! this . buffer . length ;
114
114
}
115
115
116
- applyUpdates ( arg1 , arg2 ) {
117
- if ( angular . isFunction ( arg1 ) ) {
118
- // arg1 is the updater function, arg2 is ignored
119
- this . buffer . slice ( 0 ) . forEach ( ( wrapper ) => {
120
- // we need to do it on the buffer clone, because buffer content
121
- // may change as we iterate through
122
- this . applyUpdate ( wrapper , arg1 ( wrapper . item , wrapper . scope , wrapper . element ) ) ;
123
- } ) ;
124
- } else {
125
- // arg1 is item index, arg2 is the newItems array
126
- if ( arg1 % 1 !== 0 ) { // checking if it is an integer
127
- throw new Error ( 'applyUpdates - ' + arg1 + ' is not a valid index' ) ;
128
- }
129
-
130
- const index = arg1 - this . buffer . first ;
131
- if ( ( index >= 0 && index < this . buffer . length ) ) {
132
- this . applyUpdate ( this . buffer [ index ] , arg2 ) ;
133
- }
134
- }
135
-
136
- this . adjustBuffer ( ) ;
137
- }
138
-
139
116
append ( newItems ) {
140
117
this . buffer . append ( newItems ) ;
141
118
this . adjustBuffer ( ) ;
@@ -150,6 +127,54 @@ class Adapter {
150
127
this . viewport . clipBottom ( ) ;
151
128
}
152
129
130
+ applyUpdates ( arg1 , arg2 ) {
131
+ if ( angular . isFunction ( arg1 ) ) {
132
+ this . applyUpdatesFunc ( arg1 ) ;
133
+ } else {
134
+ this . applyUpdatesIndex ( arg1 , arg2 ) ;
135
+ }
136
+ this . adjustBuffer ( ) ;
137
+ }
138
+
139
+ applyUpdatesFunc ( cb ) {
140
+ this . buffer . slice ( 0 ) . forEach ( ( wrapper ) => {
141
+ // we need to do it on the buffer clone, because buffer content
142
+ // may change as we iterate through
143
+ this . applyUpdate ( wrapper , cb ( wrapper . item , wrapper . scope , wrapper . element ) ) ;
144
+ } ) ;
145
+ }
146
+
147
+ applyUpdatesIndex ( index , newItems ) {
148
+ if ( index % 1 !== 0 ) { // checking if it is an integer
149
+ throw new Error ( 'applyUpdates - ' + index + ' is not a valid index' ) ;
150
+ }
151
+ index -= this . buffer . first ;
152
+ if ( ( index >= 0 && index < this . buffer . length ) ) {
153
+ this . applyUpdate ( this . buffer [ index ] , newItems ) ;
154
+ }
155
+ }
156
+
157
+ applyUpdate ( wrapper , newItems ) {
158
+ if ( ! angular . isArray ( newItems ) ) {
159
+ return ;
160
+ }
161
+ let position = ( this . buffer . indexOf ( wrapper ) ) ;
162
+ if ( ! newItems . reverse ( ) . some ( ( newItem ) => newItem === wrapper . item ) ) {
163
+ wrapper . op = 'remove' ;
164
+ if ( position === 0 && ! newItems . length ) {
165
+ wrapper . _op = 'isTop' ; // to catch "first" edge case on remove
166
+ }
167
+ }
168
+ newItems . forEach ( ( newItem ) => {
169
+ if ( newItem === wrapper . item ) {
170
+ position -- ;
171
+ } else {
172
+ // 3 parameter (isTop) is to catch "first" edge case on insert
173
+ this . buffer . insert ( position + 1 , newItem , position === - 1 ) ;
174
+ }
175
+ } ) ;
176
+ }
177
+
153
178
calculateProperties ( ) {
154
179
let rowTop = null , topHeight = 0 ;
155
180
let topDone = false , bottomDone = false ;
@@ -169,7 +194,6 @@ class Adapter {
169
194
this [ 'topVisibleElement' ] = item . element ;
170
195
this [ 'topVisibleScope' ] = item . scope ;
171
196
}
172
-
173
197
if ( ! bottomDone && ( top >= this . viewport . bottomVisiblePos ( ) || ( i === length - 1 && this . isEOF ( ) ) ) ) {
174
198
bottomDone = true ;
175
199
this [ 'bottomVisible' ] = item . item ;
@@ -178,7 +202,6 @@ class Adapter {
178
202
}
179
203
topHeight += itemHeight ;
180
204
}
181
-
182
205
rowTop = itemTop ;
183
206
184
207
if ( topDone && bottomDone ) {
@@ -187,29 +210,6 @@ class Adapter {
187
210
}
188
211
}
189
212
190
- applyUpdate ( wrapper , newItems ) {
191
- if ( ! angular . isArray ( newItems ) ) {
192
- return ;
193
- }
194
-
195
- let position = ( this . buffer . indexOf ( wrapper ) ) ;
196
- if ( ! newItems . reverse ( ) . some ( ( newItem ) => newItem === wrapper . item ) ) {
197
- wrapper . op = 'remove' ;
198
- if ( position === 0 && ! newItems . length ) {
199
- wrapper . _op = 'isTop' ; // to catch "first" edge case on remove
200
- }
201
- }
202
-
203
- newItems . forEach ( ( newItem ) => {
204
- if ( newItem === wrapper . item ) {
205
- position -- ;
206
- } else {
207
- // 3 parameter (isTop) is to catch "first" edge case on insert
208
- this . buffer . insert ( position + 1 , newItem , position === - 1 ) ;
209
- }
210
- } ) ;
211
- }
212
-
213
213
}
214
214
215
215
export default Adapter ;
0 commit comments