|
148 | 148 | size = _state.size, |
149 | 149 | itemsPerRow = _state.itemsPerRow; |
150 | 150 |
|
| 151 | + clearTimeout(this.updateFrameTimeoutId); |
151 | 152 | this.maybeSetState(this.constrain(from, size, itemsPerRow, next), NOOP); |
152 | 153 | } |
153 | 154 | }, { |
|
162 | 163 | value: function componentDidUpdate() { |
163 | 164 | var _this2 = this; |
164 | 165 |
|
| 166 | + var _props = this.props, |
| 167 | + stableFrameDelay = _props.stableFrameDelay, |
| 168 | + type = _props.type; |
| 169 | + |
| 170 | + |
165 | 171 | // If the list has reached an unstable state, prevent an infinite loop. |
166 | 172 | if (this.unstable) return; |
167 | 173 |
|
|
177 | 183 | }, 0); |
178 | 184 | } |
179 | 185 |
|
180 | | - this.updateFrame(); |
| 186 | + if (type === 'simple' && stableFrameDelay) { |
| 187 | + this.updateFrameTimeoutId = setTimeout(this.updateFrame, stableFrameDelay); |
| 188 | + } else { |
| 189 | + this.updateFrame(); |
| 190 | + } |
181 | 191 | } |
182 | 192 | }, { |
183 | 193 | key: 'maybeSetState', |
|
192 | 202 | window.removeEventListener('resize', this.updateFrame); |
193 | 203 | this.scrollParent.removeEventListener('scroll', this.updateFrame, PASSIVE); |
194 | 204 | this.scrollParent.removeEventListener('mousewheel', NOOP, PASSIVE); |
| 205 | + clearTimeout(this.updateFrameTimeoutId); |
195 | 206 | } |
196 | 207 | }, { |
197 | 208 | key: 'getOffset', |
|
208 | 219 | }, { |
209 | 220 | key: 'getScrollParent', |
210 | 221 | value: function getScrollParent() { |
211 | | - var _props = this.props, |
212 | | - axis = _props.axis, |
213 | | - scrollParentGetter = _props.scrollParentGetter; |
| 222 | + var _props2 = this.props, |
| 223 | + axis = _props2.axis, |
| 224 | + scrollParentGetter = _props2.scrollParentGetter; |
214 | 225 |
|
215 | 226 | if (scrollParentGetter) return scrollParentGetter(); |
216 | 227 | var el = findDOMNode(this); |
|
274 | 285 | }, { |
275 | 286 | key: 'hasDeterminateSize', |
276 | 287 | value: function hasDeterminateSize() { |
277 | | - var _props2 = this.props, |
278 | | - itemSizeGetter = _props2.itemSizeGetter, |
279 | | - type = _props2.type; |
| 288 | + var _props3 = this.props, |
| 289 | + itemSizeGetter = _props3.itemSizeGetter, |
| 290 | + type = _props3.type; |
280 | 291 |
|
281 | 292 | return type === 'uniform' || itemSizeGetter; |
282 | 293 | } |
|
296 | 307 | }, { |
297 | 308 | key: 'getItemSizeAndItemsPerRow', |
298 | 309 | value: function getItemSizeAndItemsPerRow() { |
299 | | - var _props3 = this.props, |
300 | | - axis = _props3.axis, |
301 | | - useStaticSize = _props3.useStaticSize; |
| 310 | + var _props4 = this.props, |
| 311 | + axis = _props4.axis, |
| 312 | + useStaticSize = _props4.useStaticSize; |
302 | 313 | var _state2 = this.state, |
303 | 314 | itemSize = _state2.itemSize, |
304 | 315 | itemsPerRow = _state2.itemsPerRow; |
|
375 | 386 |
|
376 | 387 | if (elEnd > end) return cb(); |
377 | 388 |
|
378 | | - var _props4 = this.props, |
379 | | - pageSize = _props4.pageSize, |
380 | | - length = _props4.length; |
| 389 | + var _props5 = this.props, |
| 390 | + pageSize = _props5.pageSize, |
| 391 | + length = _props5.length; |
381 | 392 |
|
382 | 393 | var size = Math.min(this.state.size + pageSize, length); |
383 | 394 | this.maybeSetState({ size: size }, cb); |
|
391 | 402 | start = _getStartAndEnd2.start, |
392 | 403 | end = _getStartAndEnd2.end; |
393 | 404 |
|
394 | | - var _props5 = this.props, |
395 | | - length = _props5.length, |
396 | | - pageSize = _props5.pageSize; |
| 405 | + var _props6 = this.props, |
| 406 | + length = _props6.length, |
| 407 | + pageSize = _props6.pageSize; |
397 | 408 |
|
398 | 409 | var space = 0; |
399 | 410 | var from = 0; |
|
488 | 499 | value: function getSizeOf(index) { |
489 | 500 | var cache = this.cache, |
490 | 501 | items = this.items; |
491 | | - var _props6 = this.props, |
492 | | - axis = _props6.axis, |
493 | | - itemSizeGetter = _props6.itemSizeGetter, |
494 | | - itemSizeEstimator = _props6.itemSizeEstimator, |
495 | | - type = _props6.type; |
| 502 | + var _props7 = this.props, |
| 503 | + axis = _props7.axis, |
| 504 | + itemSizeGetter = _props7.itemSizeGetter, |
| 505 | + itemSizeEstimator = _props7.itemSizeEstimator, |
| 506 | + type = _props7.type; |
496 | 507 | var _state4 = this.state, |
497 | 508 | from = _state4.from, |
498 | 509 | itemSize = _state4.itemSize, |
|
579 | 590 | value: function renderItems() { |
580 | 591 | var _this3 = this; |
581 | 592 |
|
582 | | - var _props7 = this.props, |
583 | | - itemRenderer = _props7.itemRenderer, |
584 | | - itemsRenderer = _props7.itemsRenderer; |
| 593 | + var _props8 = this.props, |
| 594 | + itemRenderer = _props8.itemRenderer, |
| 595 | + itemsRenderer = _props8.itemsRenderer; |
585 | 596 | var _state6 = this.state, |
586 | 597 | from = _state6.from, |
587 | 598 | size = _state6.size; |
|
596 | 607 | }, { |
597 | 608 | key: 'render', |
598 | 609 | value: function render() { |
599 | | - var _props8 = this.props, |
600 | | - axis = _props8.axis, |
601 | | - length = _props8.length, |
602 | | - type = _props8.type, |
603 | | - useTranslate3d = _props8.useTranslate3d; |
| 610 | + var _props9 = this.props, |
| 611 | + axis = _props9.axis, |
| 612 | + length = _props9.length, |
| 613 | + type = _props9.type, |
| 614 | + useTranslate3d = _props9.useTranslate3d; |
604 | 615 | var _state7 = this.state, |
605 | 616 | from = _state7.from, |
606 | 617 | itemsPerRow = _state7.itemsPerRow; |
|
649 | 660 | length: _react.PropTypes.number, |
650 | 661 | pageSize: _react.PropTypes.number, |
651 | 662 | scrollParentGetter: _react.PropTypes.func, |
| 663 | + stableFrameDelay: _react.PropTypes.number, |
652 | 664 | threshold: _react.PropTypes.number, |
653 | 665 | type: _react.PropTypes.oneOf(['simple', 'variable', 'uniform']), |
654 | 666 | useStaticSize: _react.PropTypes.bool, |
|
0 commit comments