/* 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 } } } }