Skip to content
Snippets Groups Projects
utils.ts 4.81 KiB
Newer Older
  • Learn to ignore specific revisions
  • Hugo NOUTS's avatar
    Hugo NOUTS committed
    import ElecIcon from '../assets/icons/visu/elec.svg'
    import WaterIcon from '../assets/icons/visu/water.svg'
    import GasIcon from '../assets/icons/visu/gas.svg'
    import ElecSmallIcon from '../assets/icons/visu/elec-small.svg'
    import WaterSmallIcon from '../assets/icons/visu/water-small.svg'
    import GasSmallIcon from '../assets/icons/visu/gas-small.svg'
    import AddElecIcon from 'assets/icons/ico/add-elec.svg'
    import AddWaterIcon from 'assets/icons/ico/add-water.svg'
    import AddGasIcon from 'assets/icons/ico/add-gas.svg'
    import ElecParamIcon from 'assets/icons/visu/elec-param.svg'
    import WaterParamIcon from 'assets/icons/visu/water-param.svg'
    import GasParamIcon from 'assets/icons/visu/gas-param.svg'
    import { FluidType } from '../enum/fluid.enum'
    import { DateTime } from 'luxon'
    import { ENEDIS_DAY_DOCTYPE } from 'doctypes'
    import { ITimePeriod, TimeStep } from '../services/dataConsumptionContracts'
    import { UserChallenge } from 'services/dataChallengeContracts'
    
    /**
     * Return an icon corresponding to FuildType enum
     * @param type FluidType
     */
    export function getPicto(type: FluidType, small = false) {
      switch (type) {
        case FluidType.ELECTRICITY:
          return small ? ElecSmallIcon : ElecIcon
        case FluidType.WATER:
          return small ? WaterSmallIcon : WaterIcon
        case FluidType.GAS:
          return small ? GasSmallIcon : GasIcon
        default:
          return ElecIcon
      }
    }
    /**
     * Return an icon corresponding to add FuildType enum
     * @param type FluidType
     */
    export function getAddPicto(type: FluidType) {
      switch (type) {
        case FluidType.ELECTRICITY:
          return AddElecIcon
        case FluidType.WATER:
          return AddWaterIcon
        case FluidType.GAS:
          return AddGasIcon
        default:
          return ElecIcon
      }
    }
    
    export function getParamPicto(type: FluidType) {
      switch (type) {
        case FluidType.ELECTRICITY:
          return ElecParamIcon
        case FluidType.WATER:
          return WaterParamIcon
        case FluidType.GAS:
          return GasParamIcon
        default:
          return ElecParamIcon
      }
    }
    
    /**
     * Return a string corresponding to Fuild style
     * @param type FluidType
     */
    export function getCardColor(type: FluidType) {
      switch (type) {
        case FluidType.ELECTRICITY:
          return 'card orange'
        case FluidType.WATER:
          return 'card blue'
        case FluidType.GAS:
          return 'card green'
        default:
          return 'card'
      }
    }
    /**
     * Return a string corresponding to Fuild style
     * @param fluidTypes FluidType[]
     */
    export function getColorClass(fluidTypes: FluidType[]) {
      if (fluidTypes.length === 1) {
        switch (fluidTypes[0]) {
          case FluidType.ELECTRICITY:
            return 'var(--elecColor)'
          case FluidType.WATER:
            return 'var(--waterColor)'
          case FluidType.GAS:
            return 'var(--gasColor)'
          default:
            return 'var(--elecColor)'
        }
      }
      return styles.multiColor
    }
    
    /**
     * Return a FuildType corresponding to type string
     * @param type string
     */
    export function getFuildType(type: string) {
      switch (type.toUpperCase()) {
        case 'ELECTRICITY':
          return FluidType.ELECTRICITY
        case 'WATER':
          return FluidType.WATER
        case 'GAS':
          return FluidType.GAS
        default:
          return FluidType.ELECTRICITY
      }
    }
    export function formatNumberValues(value: number) {
      return value.toLocaleString('fr-FR', {
        minimumFractionDigits: 2,
        maximumFractionDigits: 2,
      })
    }
    
    export function compareDates(dateA: DateTime, dateB: DateTime) {
      return dateA < dateB ? -1 : 1
    }
    
    export function getDoctype(fluid: FluidType) {
      // TODO add doctypes
      return ENEDIS_DAY_DOCTYPE
    }
    
    export const formatCompareChallengeDate = (challenge: UserChallenge) => {
      let durationTimeStep = ''
      let duration = 0
      if (challenge && challenge.challengeType) {
        durationTimeStep = Object.keys(challenge.challengeType.duration)[0]
        duration = (challenge.challengeType.duration as any)[durationTimeStep]
      }
      const delay = { [durationTimeStep]: -duration }
      const startDate = challenge.startingDate.plus(delay)
      const endDate = challenge.startingDate.plus({ days: -1 }).endOf('day')
      return ` (du ${startDate.toFormat('dd/MM')} au ${endDate.toFormat('dd/MM')})`
    }
    
    export const convertDateByTimeStep = (
      timeperiod: ITimePeriod | null,
      timeStep: TimeStep,
      header = false
    ): string => {
      if (!timeperiod) return ''
      switch (timeStep) {
        case TimeStep.HALF_AN_HOUR:
          return ' du ' + timeperiod.startDate.toFormat('dd/MM')
    
        case TimeStep.HOUR:
          return ' du ' + timeperiod.startDate.toFormat('dd/MM')
    
        case TimeStep.DAY:
          return (
            (!header ? 'semaine ' : '') +
            ' du ' +
            timeperiod.startDate.toFormat('dd/MM') +
            ' au ' +
            timeperiod.endDate.toFormat('dd/MM')
          )
    
        case TimeStep.MONTH:
          return ' du ' + timeperiod.startDate.toFormat('MM/y')
    
        case TimeStep.YEAR:
          return ' de ' + timeperiod.startDate.toFormat('y')
    
        default:
          return ''
      }
    }