Skip to content
Snippets Groups Projects
DataloadConsumptionVisualizer.tsx 6.03 KiB
Newer Older
Hugo NOUTS's avatar
Hugo NOUTS committed
import React from 'react'
import { translate } from 'cozy-ui/react/I18n'
import { NavLink } from 'react-router-dom'
import { FluidType } from 'enum/fluid.enum'
import { IDataload } from 'services/dataConsumptionContracts'
import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
import { getPicto, formatNumberValues } from 'utils/utils'
import LoadToCurrencyConverter from 'services/loadToCurrencyConverterService'
import { isDataToCome } from 'services/dateChartService'
import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner'
import { DateTime, Interval } from 'luxon'

interface DataloadConsumptionVisualizerProps {
  fluidTypes: FluidType[]
  dataload: IDataload
  compareDataload: IDataload
  showCompare: boolean
  multiFluid: boolean
  lastDataDate: DateTime
  isLoaded: boolean
  handleClickMove: (increment: number) => void
  handleClickDetails: () => void
  t: Function // translation service
}
const DataloadConsumptionVisualizer = ({
  fluidTypes,
  dataload,
  compareDataload,
  showCompare,
  multiFluid,
  lastDataDate,
  isLoaded,
  t,
}: DataloadConsumptionVisualizerProps) => {
  const ltcc = new LoadToCurrencyConverter()
  const fluidStyle = multiFluid
    ? 'MULTIFLUID'
    : fluidTypes.length > 1
    ? 'MULTIFLUID'
    : FluidType[fluidTypes[0]]
  const hasData = dataload && dataload.value && dataload.value >= 0
  const hasCompareData =
    showCompare &&
    !multiFluid &&
    compareDataload &&
    compareDataload.value &&
    compareDataload.value >= 0

  return (
    <div className="cv-load">
      {!isLoaded ? null : hasData ? (
        <div className="cv-load-content">
          {hasCompareData && (
            <div className="cv-load-section cv-load-section-left">
              <div
                className={`cv-load-value ${fluidStyle.toLowerCase()}-compare chart-result`}
              >
                {formatNumberValues(compareDataload.value)}
                <span className="text-18-medium">{`${t(
                  'FLUID.' + fluidStyle + '.UNIT'
                )}`}</span>
              </div>
              <div
                className={`cv-euro ${fluidStyle.toLowerCase()}-compare chart-fluid`}
              >
                {`${formatNumberValues(
                  ltcc.Convert(compareDataload.value, fluidTypes[0])
                )} €`}
              </div>
            </div>
          )}
          <div
            className={
              showCompare
                ? 'cv-load-section cv-load-section-right'
                : 'cv-load-section'
            }
          >
            <div
              className={`cv-load-value ${fluidStyle.toLowerCase()} chart-result`}
            >
              {multiFluid && fluidTypes.length === 1
                ? formatNumberValues(
                    ltcc.Convert(dataload.value, fluidTypes[0])
                  )
                : formatNumberValues(dataload.value)}
Hugo NOUTS's avatar
Hugo NOUTS committed
              <span className="text-18-medium">{`${t(
                'FLUID.' + fluidStyle + '.UNIT'
              )}`}</span>
            </div>
            {!multiFluid ? (
              <div
                className={`cv-euro ${fluidStyle.toLowerCase()} chart-fluid`}
              >
                {`${formatNumberValues(
                  ltcc.Convert(dataload.value, fluidTypes[0])
                )} €`}
              </div>
            ) : (
              <div className="cv-euro chart-fluid">
                {dataload.valueDetail ? (
                  dataload.valueDetail.map((load, index) => {
                    return (
                      <NavLink
                        key={index}
                        to={`/consumption/${t(
                          'FLUID.' + FluidType[index] + '.NAME'
                        ).toLowerCase()}`}
                        className="cv-euro-link"
                      >
                        <div
                          className={
                            load === -1 && !isDataToCome(dataload, index)
                              ? 'cv-euro-fluid error'
                              : `cv-euro-fluid ${FluidType[
                                  index
                                ].toLowerCase()}`
                          }
                        >
                          <StyledIcon
                            className="cv-euro-fluid-icon"
                            icon={getPicto(index)}
                            size={22}
                          />
                          <div>
                            {!isDataToCome(dataload, index) && load !== -1
                              ? `${formatNumberValues(load)} €`
                              : isDataToCome(dataload, index)
                              ? t('COMMON.DATATOCOME')
                              : '---- €'}
                          </div>
                        </div>
                      </NavLink>
                    )
                  })
                ) : (
                  <NavLink
                    to={`/consumption/${t(
                      'FLUID.' + FluidType[fluidTypes[0]] + '.NAME'
                    ).toLowerCase()}`}
                    className="cv-euro-link"
                  >
                    <div
                      className={`cv-euro-fluid ${FluidType[
                        fluidTypes[0]
                      ].toLowerCase()}`}
                    >
                      <StyledIcon
                        className="cv-euro-fluid-icon"
                        icon={getPicto(fluidTypes[0])}
                        size={22}
                      />
                      <div>{`${formatNumberValues(
                        ltcc.Convert(dataload.value, fluidTypes[0])
                      )} €`}</div>
Hugo NOUTS's avatar
Hugo NOUTS committed
                    </div>
                  </NavLink>
                )}
              </div>
            )}
          </div>
        </div>
      ) : (
        <div
          className={`cv-load-content ${fluidStyle.toLowerCase()} text-22-normal`}
        >
          {`${t('COMMON.LASTDATA')} : ${lastDataDate.toFormat("dd'/'MM'/'yy")}`}
        </div>
      )}
    </div>
  )
}

export default translate()(DataloadConsumptionVisualizer)