Skip to content
Snippets Groups Projects
ConsumptionVisualizer.tsx 2.1 KiB
Newer Older
  • Learn to ignore specific revisions
  • Bastien DUMONT's avatar
    Bastien DUMONT committed
    import DataloadConsumptionVisualizer from 'components/ConsumptionVisualizer/DataloadConsumptionVisualizer'
    
    import { FluidType } from 'enums'
    
    Hugo NOUTS's avatar
    Hugo NOUTS committed
    import { DateTime } from 'luxon'
    
    Yoan VALLET's avatar
    Yoan VALLET committed
    import { Dataload } from 'models'
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
    import React from 'react'
    
    import { useAppSelector } from 'store/hooks'
    
    import InfoDataConsumptionVisualizer from './InfoDataConsumptionVisualizer'
    
    import './consumptionVisualizer.scss'
    
    Hugo NOUTS's avatar
    Hugo NOUTS committed
    interface ConsumptionVisualizerProps {
    
      fluidType: FluidType
    
      setActive: React.Dispatch<React.SetStateAction<boolean>>
    
    Hugo NOUTS's avatar
    Hugo NOUTS committed
    }
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
    const ConsumptionVisualizer = ({
    
      fluidType,
    
    Hugo NOUTS's avatar
    Hugo NOUTS committed
    }: ConsumptionVisualizerProps) => {
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
      const {
        chart: { currentDatachart, currentDatachartIndex },
        global: { fluidStatus, fluidTypes },
    
      } = useAppSelector(state => state.ecolyo)
    
      const dataload: Dataload = currentDatachart.actualData[currentDatachartIndex]
      const compareDataload: Dataload | null = currentDatachart.comparisonData
        ? currentDatachart.comparisonData[currentDatachartIndex]
        : null
    
      const getLastDataDate = (): DateTime | null => {
        let lastDay: DateTime | null = null
        const lastDays: DateTime[] = []
    
        if (fluidType === FluidType.MULTIFLUID) {
          for (const _fluidType of fluidTypes) {
            const date: DateTime | null = fluidStatus[_fluidType].lastDataDate
            if (date) {
              lastDays.push(date)
            }
    
          if (lastDays.length > 0) {
    
            lastDay = lastDays.reduce(function (a, b) {
    
              return a < b ? a : b
    
            })
          }
        } else {
          lastDay = fluidStatus[fluidType].lastDataDate
    
        return lastDay
      }
      const lastDataDate: DateTime | null = getLastDataDate()
    
    Hugo NOUTS's avatar
    Hugo NOUTS committed
      return (
    
        <div className="consumptionvisualizer-root">
    
    Hugo NOUTS's avatar
    Hugo NOUTS committed
          <DataloadConsumptionVisualizer
    
            fluidType={fluidType}
    
    Hugo NOUTS's avatar
    Hugo NOUTS committed
            dataload={dataload}
            compareDataload={compareDataload}
    
    Hugo NOUTS's avatar
    Hugo NOUTS committed
          />
    
          <div className="consumptionvisualizer-info">
    
            <InfoDataConsumptionVisualizer
              dataload={dataload}
              fluidType={fluidType}
              lastDataDate={lastDataDate}
            />
    
    Hugo NOUTS's avatar
    Hugo NOUTS committed
          </div>
        </div>
      )
    }
    
    
    export default ConsumptionVisualizer