fullpage-scroll-component
Version:
Stepped Scroll Component Library.
83 lines (79 loc) • 2.27 kB
JavaScript
;
var jsxRuntime = require('react/jsx-runtime');
var react = require('react');
var useSuccessiveValue = require('./hooks/useSuccessiveValue.js');
var useStepScroll = require('./hooks/useStepScroll.js');
var DebouncedScroll = require('./DebouncedScroll.js');
const StepScroll = react.forwardRef(function ({
children,
defaultPage = 0,
delay = 300,
isPreventDefault = true,
isScrollabled = true,
isCaptured = true
}, ref) {
const [pagesIdArray, setPagesIdArray] = react.useState([]);
const {
current,
setCurrent,
resetCurrent,
next,
prev,
hasNext,
hasPrev,
move
} = useSuccessiveValue.useSuccessiveValue({
maximum: children.length - 1,
defaultNumber: defaultPage >= children.length ? 0 : defaultPage
});
const providerValues = react.useMemo(() => ({
pagesIdArray,
setPagesIdArray,
currentPage: current,
setCurrentPage: setCurrent,
resetCurrent: resetCurrent,
hasNextPage: hasNext,
hasPrevPage: hasPrev,
nextPage: next,
prevPage: prev,
movePage: move
}), [pagesIdArray, setPagesIdArray, current, setCurrent, resetCurrent, hasNext, hasPrev, next, prev, move]);
react.useImperativeHandle(ref, () => ({
currentPage: current,
nextPage: next,
prevPage: prev,
movePage: move,
resetCurrentPage: resetCurrent
}));
const handleScroll = e => {
e.preventDefault();
};
const handleMobileScroll = e => {
e.preventDefault();
};
react.useEffect(() => {
if (!isScrollabled) {
window.addEventListener("wheel", handleScroll, {
passive: false,
capture: isCaptured
});
window.addEventListener("touchmove", handleMobileScroll, {
passive: false,
capture: isCaptured
});
return () => {
window.removeEventListener("wheel", handleScroll);
window.removeEventListener("touchmove", handleMobileScroll);
};
}
}, [isCaptured, isScrollabled]);
return jsxRuntime.jsxs(useStepScroll.StepScrollContext.Provider, Object.assign({
value: providerValues
}, {
children: [isScrollabled && jsxRuntime.jsx(DebouncedScroll, {
isPreventDefault: isPreventDefault,
delay: delay
}), children]
}));
});
module.exports = StepScroll;