71 lines
1.4 KiB
JavaScript
71 lines
1.4 KiB
JavaScript
import {
|
|
getRowInitialHeight,
|
|
getRowStickyHeight,
|
|
computeLinearScale,
|
|
clamp,
|
|
} from './shrink-utils'
|
|
|
|
let shrinkCache = null
|
|
|
|
export const clearShrinkCache = () => {
|
|
shrinkCache = null
|
|
}
|
|
|
|
const getShrinkData = ({ row }) => {
|
|
if (shrinkCache) {
|
|
return shrinkCache
|
|
}
|
|
|
|
let rowInitialHeight = getRowInitialHeight(row)
|
|
let rowStickyHeight = getRowStickyHeight(row)
|
|
|
|
shrinkCache = { rowInitialHeight, rowStickyHeight }
|
|
|
|
return shrinkCache
|
|
}
|
|
|
|
export const shrinkHandleMiddleRow = ({
|
|
stickyContainer,
|
|
containerInitialHeight,
|
|
startPosition,
|
|
}) => {
|
|
if (!stickyContainer.querySelector('[data-row*="middle"]')) {
|
|
return
|
|
}
|
|
|
|
;[stickyContainer.querySelector('[data-row*="middle"]')].map((row) => {
|
|
let { rowInitialHeight, rowStickyHeight } = getShrinkData({ row })
|
|
|
|
if (rowInitialHeight !== rowStickyHeight) {
|
|
let shrinkHeight = rowStickyHeight
|
|
|
|
if (
|
|
true ||
|
|
stickyContainer.dataset.sticky.indexOf('auto-hide') === -1
|
|
) {
|
|
shrinkHeight = computeLinearScale(
|
|
[
|
|
startPosition,
|
|
startPosition +
|
|
Math.abs(rowInitialHeight - rowStickyHeight),
|
|
],
|
|
[rowInitialHeight, rowStickyHeight],
|
|
clamp(
|
|
startPosition,
|
|
|
|
startPosition +
|
|
Math.abs(rowInitialHeight - rowStickyHeight),
|
|
|
|
scrollY
|
|
)
|
|
)
|
|
}
|
|
|
|
row.style.setProperty(
|
|
'--shrink-height',
|
|
`${Math.round(shrinkHeight)}px`
|
|
)
|
|
}
|
|
})
|
|
}
|