|
72 | 72 | scrollParentGetter: _react.PropTypes.func, |
73 | 73 | threshold: _react.PropTypes.number, |
74 | 74 | type: _react.PropTypes.oneOf(['simple', 'variable', 'uniform']), |
| 75 | + useStaticSize: _react.PropTypes.bool, |
75 | 76 | useTranslate3d: _react.PropTypes.bool |
76 | 77 | }, |
77 | 78 | enumerable: true |
|
97 | 98 | pageSize: 10, |
98 | 99 | threshold: 100, |
99 | 100 | type: 'simple', |
| 101 | + useStaticSize: false, |
100 | 102 | useTranslate3d: false |
101 | 103 | }, |
102 | 104 | enumerable: true |
|
253 | 255 | }, { |
254 | 256 | key: 'getItemSizeAndItemsPerRow', |
255 | 257 | value: function getItemSizeAndItemsPerRow() { |
| 258 | + var _props4 = this.props; |
| 259 | + var axis = _props4.axis; |
| 260 | + var useStaticSize = _props4.useStaticSize; |
| 261 | + var _state2 = this.state; |
| 262 | + var itemSize = _state2.itemSize; |
| 263 | + var itemsPerRow = _state2.itemsPerRow; |
| 264 | + |
| 265 | + if (useStaticSize && itemSize && itemsPerRow) { |
| 266 | + return { itemSize: itemSize, itemsPerRow: itemsPerRow }; |
| 267 | + } |
| 268 | + |
256 | 269 | var itemEls = findDOMNode(this.items).children; |
257 | 270 | if (!itemEls.length) return {}; |
258 | 271 |
|
|
262 | 275 | // thousandths of a pixel) different size for the same element between |
263 | 276 | // renders. This can cause an infinite render loop, so only change the |
264 | 277 | // itemSize when it is significantly different. |
265 | | - var itemSize = this.state.itemSize; |
266 | | - var axis = this.props.axis; |
267 | | - |
268 | 278 | var firstElSize = firstEl[OFFSET_SIZE_KEYS[axis]]; |
269 | 279 | var delta = Math.abs(firstElSize - itemSize); |
270 | 280 | if (isNaN(delta) || delta >= 1) itemSize = firstElSize; |
|
273 | 283 |
|
274 | 284 | var startKey = OFFSET_START_KEYS[axis]; |
275 | 285 | var firstStart = firstEl[startKey]; |
276 | | - var itemsPerRow = 1; |
| 286 | + itemsPerRow = 1; |
277 | 287 | for (var item = itemEls[itemsPerRow]; item && item[startKey] === firstStart; item = itemEls[itemsPerRow]) { |
278 | 288 | ++itemsPerRow; |
279 | 289 | }return { itemSize: itemSize, itemsPerRow: itemsPerRow }; |
|
325 | 335 |
|
326 | 336 | if (elEnd > end) return cb(); |
327 | 337 |
|
328 | | - var _props4 = this.props; |
329 | | - var pageSize = _props4.pageSize; |
330 | | - var length = _props4.length; |
| 338 | + var _props5 = this.props; |
| 339 | + var pageSize = _props5.pageSize; |
| 340 | + var length = _props5.length; |
331 | 341 |
|
332 | 342 | this.setState({ size: Math.min(this.state.size + pageSize, length) }, cb); |
333 | 343 | } |
|
340 | 350 |
|
341 | 351 | var start = _getStartAndEnd2.start; |
342 | 352 | var end = _getStartAndEnd2.end; |
343 | | - var _props5 = this.props; |
344 | | - var length = _props5.length; |
345 | | - var pageSize = _props5.pageSize; |
| 353 | + var _props6 = this.props; |
| 354 | + var length = _props6.length; |
| 355 | + var pageSize = _props6.pageSize; |
346 | 356 |
|
347 | 357 | var space = 0; |
348 | 358 | var from = 0; |
|
400 | 410 | if (cache[index] != null) return cache[index]; |
401 | 411 |
|
402 | 412 | // Try the static itemSize. |
403 | | - var _state2 = this.state; |
404 | | - var itemSize = _state2.itemSize; |
405 | | - var itemsPerRow = _state2.itemsPerRow; |
| 413 | + var _state3 = this.state; |
| 414 | + var itemSize = _state3.itemSize; |
| 415 | + var itemsPerRow = _state3.itemsPerRow; |
406 | 416 |
|
407 | 417 | if (itemSize) { |
408 | 418 | return cache[index] = Math.floor(index / itemsPerRow) * itemSize; |
|
440 | 450 | value: function getSizeOf(index) { |
441 | 451 | var cache = this.cache; |
442 | 452 | var items = this.items; |
443 | | - var _props6 = this.props; |
444 | | - var axis = _props6.axis; |
445 | | - var itemSizeGetter = _props6.itemSizeGetter; |
446 | | - var itemSizeEstimator = _props6.itemSizeEstimator; |
447 | | - var type = _props6.type; |
448 | | - var _state3 = this.state; |
449 | | - var from = _state3.from; |
450 | | - var itemSize = _state3.itemSize; |
451 | | - var size = _state3.size; |
| 453 | + var _props7 = this.props; |
| 454 | + var axis = _props7.axis; |
| 455 | + var itemSizeGetter = _props7.itemSizeGetter; |
| 456 | + var itemSizeEstimator = _props7.itemSizeEstimator; |
| 457 | + var type = _props7.type; |
| 458 | + var _state4 = this.state; |
| 459 | + var from = _state4.from; |
| 460 | + var itemSize = _state4.itemSize; |
| 461 | + var size = _state4.size; |
452 | 462 |
|
453 | 463 | // Try the static itemSize. |
454 | 464 | if (itemSize) return itemSize; |
|
507 | 517 | }, { |
508 | 518 | key: 'getVisibleRange', |
509 | 519 | value: function getVisibleRange() { |
510 | | - var _state4 = this.state; |
511 | | - var from = _state4.from; |
512 | | - var size = _state4.size; |
| 520 | + var _state5 = this.state; |
| 521 | + var from = _state5.from; |
| 522 | + var size = _state5.size; |
513 | 523 |
|
514 | 524 | var _getStartAndEnd4 = this.getStartAndEnd(0); |
515 | 525 |
|
|
532 | 542 | value: function renderItems() { |
533 | 543 | var _this = this; |
534 | 544 |
|
535 | | - var _props7 = this.props; |
536 | | - var itemRenderer = _props7.itemRenderer; |
537 | | - var itemsRenderer = _props7.itemsRenderer; |
538 | | - var _state5 = this.state; |
539 | | - var from = _state5.from; |
540 | | - var size = _state5.size; |
| 545 | + var _props8 = this.props; |
| 546 | + var itemRenderer = _props8.itemRenderer; |
| 547 | + var itemsRenderer = _props8.itemsRenderer; |
| 548 | + var _state6 = this.state; |
| 549 | + var from = _state6.from; |
| 550 | + var size = _state6.size; |
541 | 551 |
|
542 | 552 | var items = []; |
543 | 553 | for (var i = 0; i < size; ++i) { |
|
549 | 559 | }, { |
550 | 560 | key: 'render', |
551 | 561 | value: function render() { |
552 | | - var _props8 = this.props; |
553 | | - var axis = _props8.axis; |
554 | | - var length = _props8.length; |
555 | | - var type = _props8.type; |
556 | | - var useTranslate3d = _props8.useTranslate3d; |
557 | | - var _state6 = this.state; |
558 | | - var from = _state6.from; |
559 | | - var itemsPerRow = _state6.itemsPerRow; |
| 562 | + var _props9 = this.props; |
| 563 | + var axis = _props9.axis; |
| 564 | + var length = _props9.length; |
| 565 | + var type = _props9.type; |
| 566 | + var useTranslate3d = _props9.useTranslate3d; |
| 567 | + var _state7 = this.state; |
| 568 | + var from = _state7.from; |
| 569 | + var itemsPerRow = _state7.itemsPerRow; |
560 | 570 |
|
561 | 571 | var items = this.renderItems(); |
562 | 572 | if (type === 'simple') return items; |
|
0 commit comments