import React, { useState, useEffect, useRef } from 'react' import SwipeableViews from 'react-swipeable-views' import { virtualize } from 'react-swipeable-views-utils' import { DateTime } from 'luxon' import { IConsumptionDataManager, IDataload, TimeStep, ITimePeriod, } from 'services/dataConsumptionContracts' import { FluidType } from 'enum/fluid.enum' import FluidChartSlide from 'components/ContentComponents/FluidChart/FluidChartSlide' const VirtualizeSwipeableViews = virtualize(SwipeableViews) interface FluidChartSwipeProps { fluidTypes: FluidType[] timeStep: TimeStep multiFluid: boolean referenceDate: DateTime selectedDate: DateTime indexDisplayed: number showCompare: boolean challengePeriod: ITimePeriod | null handleChangeIndex: (index: number) => void handleClickData: ( dataload: IDataload, compareDataload: IDataload | null ) => void consumptionDataManager: IConsumptionDataManager } const FluidChartSwipe: React.FC<FluidChartSwipeProps> = ({ fluidTypes, timeStep, multiFluid, referenceDate, selectedDate, indexDisplayed, showCompare, challengePeriod, handleChangeIndex, handleClickData, consumptionDataManager, }: FluidChartSwipeProps) => { const swipe = useRef<HTMLDivElement>(null) const [width, setWidth] = useState(0) const [height, setHeight] = useState(0) useEffect(() => { function handleResize() { const maxWidth = 940 const maxHeight = 300 const _width = swipe.current ? swipe.current.offsetWidth > maxWidth ? maxWidth : swipe.current.offsetWidth : 400 setWidth(_width) const _height = swipe.current ? swipe.current.offsetHeight > maxHeight ? maxHeight : swipe.current.offsetHeight : 300 setHeight(_height) } handleResize() window.addEventListener('resize', handleResize) return () => window.removeEventListener('resize', handleResize) }, [swipe.current]) return ( <div className="fs-root" ref={swipe}> <VirtualizeSwipeableViews index={indexDisplayed} overscanSlideAfter={1} overscanSlideBefore={1} onChangeIndex={handleChangeIndex} slideRenderer={({ key, index }) => ( <FluidChartSlide key={key} index={index} fluidTypes={fluidTypes} timeStep={timeStep} multiFluid={multiFluid} referenceDate={referenceDate} selectedDate={selectedDate} showCompare={showCompare} width={width} height={height} challengePeriod={challengePeriod} handleClickData={handleClickData} consumptionDataManager={consumptionDataManager} /> )} enableMouseEvents axis="x-reverse" /> </div> ) } export default FluidChartSwipe