@foreverrbum/ethsign
Version:
This package will allow you to electronically sign documents within your application
55 lines (48 loc) • 1.54 kB
JavaScript
import React, { useState } from 'react';
import cx from 'classnames';
import SliderContext from './context'
import Content from './Content'
import SlideButton from './SlideButton'
import SliderWrapper from './SliderWrapper'
import useSliding from './useSliding'
import useSizeElement from './useSizeElement'
import '../../styles/Slider/Slider.scss'
const Slider = ({ children, activeSlide }) => {
const [currentSlide, setCurrentSlide] = useState(activeSlide);
const { width, elementRef } = useSizeElement();
const {
handlePrev,
handleNext,
slideProps,
containerRef,
hasNext,
hasPrev
} = useSliding(width, React.Children.count(children));
const handleSelect = movie => {
setCurrentSlide(movie);
};
const handleClose = () => {
setCurrentSlide(null);
};
const contextValue = {
onSelectSlide: handleSelect,
onCloseSlide: handleClose,
elementRef,
currentSlide,
};
return (
<SliderContext.Provider value={contextValue}>
<SliderWrapper>
<div
className={cx('slider', { 'slider--open': currentSlide != null })}
>
<div ref={containerRef} className="slider__container py-20" {...slideProps}>{children}</div>
</div>
{hasPrev && <SlideButton onClick={handlePrev} type="prev" />}
{hasNext && <SlideButton onClick={handleNext} type="next" />}
</SliderWrapper>
{currentSlide && <Content movie={currentSlide} onClose={handleClose} />}
</SliderContext.Provider>
);
};
export default Slider;