UNPKG

fullpage-scroll-component

Version:
83 lines (79 loc) 2.27 kB
'use strict'; 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;