utils.js 1.0 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import styleToCssString from '../helpers/libs/styleToCssString'
  2. export const mapVirtualToProps = ({ items, itemHeight }, { startIndex, endIndex }) => {
  3. const visibleItems = endIndex > -1 ? items.slice(startIndex, endIndex + 1) : []
  4. // style
  5. const height = items.length * itemHeight
  6. const paddingTop = startIndex * itemHeight
  7. return {
  8. virtual: {
  9. items: visibleItems,
  10. style: styleToCssString({
  11. boxSizing: 'border-box',
  12. width: '100%',
  13. height,
  14. // paddingTop,
  15. }),
  16. },
  17. }
  18. }
  19. export const getVisibleItemBounds = (viewTop, viewHeight, itemCount, itemHeight, itemBuffer) => {
  20. // visible list inside view
  21. const listViewTop = Math.max(0, viewTop)
  22. // visible item indexes
  23. const startIndex = Math.max(0, Math.floor(listViewTop / itemHeight))
  24. const endIndex = Math.min(startIndex + Math.ceil(viewHeight / itemHeight) + itemBuffer - 1, itemCount)
  25. return {
  26. startIndex,
  27. endIndex,
  28. }
  29. }