#69 : Split fns
This commit is contained in:
61
src/utils/lazy.js
Normal file
61
src/utils/lazy.js
Normal file
@@ -0,0 +1,61 @@
|
||||
import { getValueInRange } from './math'
|
||||
|
||||
export function getIndexesOfPagesWithoutClonesInScroll({
|
||||
scrollIndex,
|
||||
pagesToShow,
|
||||
pagesToScroll,
|
||||
pagesCount,
|
||||
}) {
|
||||
const overlap = scrollIndex === 0 ? 0 : pagesToShow - pagesToScroll
|
||||
const from = scrollIndex * pagesToShow - scrollIndex * overlap
|
||||
const to = from + Math.max(pagesToShow, pagesToScroll) - 1
|
||||
const indexes = []
|
||||
for (let i=from; i<=Math.min(pagesCount - 1, to); i++) {
|
||||
indexes.push(i)
|
||||
}
|
||||
return indexes
|
||||
}
|
||||
|
||||
export function getAdjacentIndexes({
|
||||
infinite,
|
||||
scrollIndex,
|
||||
scrollsCount,
|
||||
pagesCount,
|
||||
pagesToShow,
|
||||
pagesToScroll,
|
||||
}) {
|
||||
const _scrollIndex = getValueInRange(0, scrollIndex, scrollsCount - 1)
|
||||
|
||||
let rangeStart = _scrollIndex - 1
|
||||
let rangeEnd = _scrollIndex + 1
|
||||
|
||||
rangeStart = infinite
|
||||
? rangeStart < 0 ? scrollsCount - 1 : rangeStart
|
||||
: Math.max(0, rangeStart)
|
||||
|
||||
rangeEnd = infinite
|
||||
? rangeEnd > scrollsCount - 1 ? 0 : rangeEnd
|
||||
: Math.min(scrollsCount - 1, rangeEnd)
|
||||
|
||||
const scrollIndexes = [...new Set([
|
||||
rangeStart,
|
||||
_scrollIndex,
|
||||
rangeEnd,
|
||||
|
||||
// because of these values outputs for infinite/non-infinites are the same
|
||||
0, // needed to clone first scroll pages
|
||||
scrollsCount - 1, // needed to clone last scroll pages
|
||||
])].sort((a, b) => a - b)
|
||||
const pageIndexes = scrollIndexes.flatMap(
|
||||
scrollIndex => getIndexesOfPagesWithoutClonesInScroll({
|
||||
scrollIndex,
|
||||
pagesToShow,
|
||||
pagesToScroll,
|
||||
pagesCount,
|
||||
})
|
||||
)
|
||||
return {
|
||||
scrollIndexes,
|
||||
pageIndexes: [...new Set(pageIndexes)].sort((a, b) => a - b),
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user