Skip to content
Snippets Groups Projects
consumptionDataFormatterService.ts 1.71 KiB
Newer Older
  • Learn to ignore specific revisions
  • Hugo NOUTS's avatar
    Hugo NOUTS committed
    /* eslint-disable @typescript-eslint/interface-name-prefix */
    import { TimeStep, ITimePeriod, IDataload } from './dataConsumptionContracts'
    import { compareDates } from 'utils/utils'
    import { compareStepDate } from './dateChartService'
    //import _ from 'lodash'
    
    export default class ConsumptionDataFormatter {
      public formatGraphData(
        data: IDataload[],
        timePeriod: ITimePeriod,
        timeStep: TimeStep
      ): IDataload[] {
        data.sort((dataA, dataB) => compareDates(dataA.date, dataB.date))
    
        const formattedData = this.fillMissingData(data, timePeriod, timeStep)
    
        // complete missing data within data
    
        return formattedData
      }
    
      private fillMissingData(
        data: IDataload[],
        timePeriod: ITimePeriod,
        timeStep: TimeStep
      ): IDataload[] {
        const filledData = []
        let parsingDate = timePeriod.startDate
    
        while (parsingDate <= timePeriod.endDate) {
          //const filtereddata = data.filter(dt => dt.date.equals(parsingDate))
          const filtereddata = data.filter(dt =>
            compareStepDate(timeStep, dt.date, parsingDate)
          )
    
          const newElement = filtereddata[0]
            ? filtereddata[0]
            : {
                date: parsingDate,
                value: -1,
              }
          filledData.push({ ...newElement, valueDetail: null })
          parsingDate = parsingDate.plus(this.getTimeFromStepTime(timeStep))
        }
    
        return filledData
      }
    
      private getTimeFromStepTime(timeStep: TimeStep) {
        switch (timeStep) {
          case TimeStep.HALF_AN_HOUR:
            return { minutes: 30 }
    
          case TimeStep.DAY:
            return { days: 1 }
    
          case TimeStep.MONTH:
            return { months: 1 }
    
          case TimeStep.YEAR:
            return { years: 1 }
    
          default:
            return { minutes: 30 }
        }
      }
    }