@foreverrbum/ethsign
Version:
This package will allow you to electronically sign documents within your application
40 lines (31 loc) • 1.26 kB
JavaScript
import { useState, useRef, useEffect } from 'react'
const PADDINGS = 110;
const useSliding = (elementWidth, countElements) => {
const containerRef = useRef(null);
const [containerWidth, setContainerWidth] = useState(0);
const [distance, setDistance] = useState(0);
const [totalInViewport, setTotalInViewport] = useState(0)
const [viewed, setViewed] = useState(0);
useEffect(() => {
const containerWidth = containerRef.current.clientWidth - PADDINGS;
setContainerWidth(containerWidth);
setTotalInViewport(Math.floor(containerWidth / elementWidth) );
console.log(Math.floor(containerWidth / elementWidth))
}, [containerRef.current]);
const handlePrev = () => {
setViewed(viewed - totalInViewport);
setDistance(distance+elementWidth*(totalInViewport));
}
const handleNext = () => {
setViewed(viewed + totalInViewport);
console.log(viewed+totalInViewport)
setDistance(-elementWidth*(viewed+totalInViewport))
}
const slideProps = {
style: { transform: `translate3d(${distance}px, 0, 0)` }
};
const hasPrev = distance < 0;
const hasNext = (viewed + totalInViewport) < countElements;
return { handlePrev, handleNext, slideProps, containerRef, hasPrev, hasNext };
}
export default useSliding;