Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
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