diff --git a/src/components/ContentComponents/Charts/AxisBottom.tsx b/src/components/ContentComponents/Charts/AxisBottom.tsx index e3c7d7884e4c072510620e4ed52d60b348bc6ab3..ef98771e37cfb1208bed9994347daeb5a46f10f5 100644 --- a/src/components/ContentComponents/Charts/AxisBottom.tsx +++ b/src/components/ContentComponents/Charts/AxisBottom.tsx @@ -1,7 +1,7 @@ import React from 'react' import { ScaleBand } from 'd3-scale' import { IDataload, TimeStep } from 'services/dataConsumptionContracts' -import { compareStepDate } from 'services/dateChartService' +import DateChartService from 'services/dateChartService' import { DateTime } from 'luxon' interface TextTypeProps { @@ -14,7 +14,12 @@ interface TextTypeProps { function TextAxis(props: TextTypeProps) { const { index, dataload, timeStep, width, selectedDate } = props - const isSelectedDate = compareStepDate(timeStep, selectedDate, dataload.date) + const dateChartService = new DateChartService() + const isSelectedDate = dateChartService.compareStepDate( + timeStep, + selectedDate, + dataload.date + ) const style = isSelectedDate ? 'tick-text tick-text-selected chart-ticks-x-text' : 'tick-text chart-ticks-x-text' @@ -94,7 +99,7 @@ const AxisBottom = (props: AxisBottomProps) => { selectedDate, } = props const dashArray = `${height / 30} ${height / 30}` - + const dateChartService = new DateChartService() return ( <g className="axis x" @@ -116,7 +121,11 @@ const AxisBottom = (props: AxisBottomProps) => { width={xScale.bandwidth() / 2} selectedDate={selectedDate} /> - {compareStepDate(timeStep, DateTime.local(), d.date) ? ( + {dateChartService.compareStepDate( + timeStep, + DateTime.local(), + d.date + ) ? ( <line stroke="white" strokeLinecap="round" diff --git a/src/components/ContentComponents/Charts/Bar.tsx b/src/components/ContentComponents/Charts/Bar.tsx index f9fd12557402de2fda01ff780fd55b08842cb03c..cd5a8b4a867b02a5353500386d5d9d550fcc7b4f 100644 --- a/src/components/ContentComponents/Charts/Bar.tsx +++ b/src/components/ContentComponents/Charts/Bar.tsx @@ -1,7 +1,7 @@ import React, { useState, useEffect } from 'react' import { ScaleBand, ScaleLinear } from 'd3-scale' import { IDataload, TimeStep } from 'services/dataConsumptionContracts' -import { compareStepDate } from 'services/dateChartService' +import DateChartService from 'services/dateChartService' import { FluidType } from 'enum/fluid.enum' import { DateTime } from 'luxon' import { detect } from 'detect-browser' @@ -70,7 +70,11 @@ const Bar = (props: BarProps) => { setCompareAnimationEnded(true) } - const isSelectedDate = compareStepDate(timeStep, selectedDate, dataload.date) + const isSelectedDate = new DateChartService().compareStepDate( + timeStep, + selectedDate, + dataload.date + ) const barClass = clicked ? `bar-${fluidStyle} selected bounce-${ diff --git a/src/components/ContentComponents/Charts/Hash.tsx b/src/components/ContentComponents/Charts/Hash.tsx index 457eba1bfed58cc9f64fb49f8e0100e8fd27d846..7f8b85b23b575fccc5e58fd5ef7ecf769cd136bd 100644 --- a/src/components/ContentComponents/Charts/Hash.tsx +++ b/src/components/ContentComponents/Charts/Hash.tsx @@ -6,7 +6,7 @@ import { TimeStep, } from 'services/dataConsumptionContracts' import { DateTime } from 'luxon' -import { compareStepDate } from 'services/dateChartService' +import DateChartService from 'services/dateChartService' interface HashProps { challengePeriod: ITimePeriod | null @@ -72,8 +72,9 @@ const Hash = (props: HashProps) => { } else if (startScale && !endScale) { setScale([startScale - padding, width - startScale]) } else if (!startScale && endScale) { + const dateChartService = new DateChartService() if ( - compareStepDate( + dateChartService.compareStepDate( TimeStep.DAY, challengePeriod.endDate, chartData.actualData[0].date diff --git a/src/components/ContentComponents/ConsumptionVisualizer/ConsumptionVisualizer.tsx b/src/components/ContentComponents/ConsumptionVisualizer/ConsumptionVisualizer.tsx index e42661db7164ba5feff30e178928ef70796f0ca1..8e6793af38dd9bdb61678c69345171948e33257f 100644 --- a/src/components/ContentComponents/ConsumptionVisualizer/ConsumptionVisualizer.tsx +++ b/src/components/ContentComponents/ConsumptionVisualizer/ConsumptionVisualizer.tsx @@ -4,7 +4,7 @@ import { FluidType } from 'enum/fluid.enum' import { DateTime } from 'luxon' import { TimeStep, IDataload } from 'services/dataConsumptionContracts' -import { isDataToCome } from 'services/dateChartService' +import DateChartService from 'services/dateChartService' import DateConsumptionVisualizer from 'components/ContentComponents/ConsumptionVisualizer/DateConsumptionVisualizer' import DataloadConsumptionVisualizer from 'components/ContentComponents/ConsumptionVisualizer/DataloadConsumptionVisualizer' import DetailedConsumptionVisualizer from 'components/ContentComponents/ConsumptionVisualizer/DetailedConsumptionVisualizer' @@ -48,6 +48,7 @@ const ConsumptionVisualizer = ({ handleChangeIndex, }: ConsumptionVisualizerProps) => { fluidTypes.sort() + const dateChartService = new DateChartService() return ( <div className="cv"> <DateConsumptionVisualizer @@ -79,11 +80,11 @@ const ConsumptionVisualizer = ({ {dataload && dataload.valueDetail && ((dataload.valueDetail[0] === -1 && - !isDataToCome(dataload, fluidTypes[0])) || + !dateChartService.isDataToCome(dataload, fluidTypes[0])) || (dataload.valueDetail[1] === -1 && - !isDataToCome(dataload, fluidTypes[1])) || + !dateChartService.isDataToCome(dataload, fluidTypes[1])) || (dataload.valueDetail[2] === -1 && - !isDataToCome(dataload, fluidTypes[2]))) && ( + !dateChartService.isDataToCome(dataload, fluidTypes[2]))) && ( <ErrorDataConsumptionVisualizer date={date} indexDisplayed={indexDisplayed} diff --git a/src/components/ContentComponents/ConsumptionVisualizer/DataloadConsumptionVisualizer.tsx b/src/components/ContentComponents/ConsumptionVisualizer/DataloadConsumptionVisualizer.tsx index 3341f62b2d0020c410a49bc166372ac033d0a2b8..c426760127ced29e1adb078e92de2f497970bbb3 100644 --- a/src/components/ContentComponents/ConsumptionVisualizer/DataloadConsumptionVisualizer.tsx +++ b/src/components/ContentComponents/ConsumptionVisualizer/DataloadConsumptionVisualizer.tsx @@ -7,7 +7,7 @@ import StyledIcon from 'components/CommonKit/Icon/StyledIcon' import { getPicto } from 'utils/picto' import { formatNumberValues } from 'utils/utils' import ConverterService from 'services/converter.service' -import { isDataToCome } from 'services/dateChartService' +import DateChartService from 'services/dateChartService' import { DateTime } from 'luxon' interface DataloadConsumptionVisualizerProps { @@ -40,6 +40,7 @@ const DataloadConsumptionVisualizer = ({ : fluidTypes.length > 1 ? 'MULTIFLUID' : FluidType[fluidTypes[0]] + const dateChartService = new DateChartService() useEffect(() => { if ((dataload && dataload.value) || (dataload && dataload.value === 0)) { @@ -129,7 +130,8 @@ const DataloadConsumptionVisualizer = ({ > <div className={ - load === -1 && !isDataToCome(dataload, index) + load === -1 && + !dateChartService.isDataToCome(dataload, index) ? 'cv-euro-fluid error' : `cv-euro-fluid ${FluidType[ index @@ -142,9 +144,10 @@ const DataloadConsumptionVisualizer = ({ size={22} /> <div> - {!isDataToCome(dataload, index) && load !== -1 + {!dateChartService.isDataToCome(dataload, index) && + load !== -1 ? `${formatNumberValues(load)} €` - : isDataToCome(dataload, index) + : dateChartService.isDataToCome(dataload, index) ? t('COMMON.DATATOCOME') : '---- €'} </div> diff --git a/src/components/ContentComponents/FluidChart/FluidChartContent.tsx b/src/components/ContentComponents/FluidChart/FluidChartContent.tsx index e324db81179b6825356db5027aff3e525cce011a..ca20bdfd0b6581671d7b1e86249d7e3712715cf3 100644 --- a/src/components/ContentComponents/FluidChart/FluidChartContent.tsx +++ b/src/components/ContentComponents/FluidChart/FluidChartContent.tsx @@ -8,12 +8,7 @@ import { ITimePeriod, TimePeriod, } from 'services/dataConsumptionContracts' -import { - defineLastStepDate, - defineDetailedTimeStep, - formatDetailedDate, - incrementDate, -} from 'services/dateChartService' +import DateChartService from 'services/dateChartService' import { UserChallenge } from 'services/dataChallengeContracts' import { FluidType } from 'enum/fluid.enum' @@ -73,10 +68,11 @@ const FluidChartContent: React.FC<FluidChartContentProps> = ({ currentChallenge.endingDate && new TimePeriod(currentChallenge.startingDate, currentChallenge.endingDate) const handleChangeIndex = (index: number) => { + const dateChartService = new DateChartService() const date = index === 0 ? referenceDate - : defineLastStepDate(referenceDate, timeStep, index) + : dateChartService.defineLastStepDate(referenceDate, timeStep, index) setSelectedDate(date) setIndexDisplayed(index) setIsLoaded(false) @@ -95,14 +91,22 @@ const FluidChartContent: React.FC<FluidChartContentProps> = ({ } const handleClickDetails = () => { - const detailedTimeStep = defineDetailedTimeStep(timeStep, fluidTypes) - const detailedDate = formatDetailedDate(selectedDate, detailedTimeStep) + const dateChartService = new DateChartService() + const detailedTimeStep = dateChartService.defineDetailedTimeStep( + timeStep, + fluidTypes + ) + const detailedDate = dateChartService.formatDetailedDate( + selectedDate, + detailedTimeStep + ) handleDetailedDate(detailedDate, detailedTimeStep) setIsLoaded(false) } const handleClickMove = (increment: number) => { - const { incrementIndex, incrementedDate } = incrementDate( + const dateChartService = new DateChartService() + const { incrementIndex, incrementedDate } = dateChartService.incrementDate( increment, selectedDate, timeStep, diff --git a/src/components/ContentComponents/FluidChart/FluidChartSlide.tsx b/src/components/ContentComponents/FluidChart/FluidChartSlide.tsx index a186f247e0de6fca0644f13912fc68602b4b4d4b..9256411b4507ed59807f817047053f131af16289 100644 --- a/src/components/ContentComponents/FluidChart/FluidChartSlide.tsx +++ b/src/components/ContentComponents/FluidChart/FluidChartSlide.tsx @@ -8,7 +8,7 @@ import { TimeStep, ITimePeriod, } from 'services/dataConsumptionContracts' -import { defineTimePeriod } from 'services/dateChartService' +import DateChartService from 'services/dateChartService' import { FluidType } from 'enum/fluid.enum' import BarChart from 'components/ContentComponents/Charts/BarChart' @@ -59,9 +59,10 @@ const FluidChartSlide: React.FC<FluidChartSlideProps> = ({ useEffect(() => { let subscribed = true async function loadData() { + const dateChartService = new DateChartService() const [timePeriod, compareTimePeriod] = await Promise.all([ - defineTimePeriod(referenceDate, timeStep, index), - defineTimePeriod(referenceDate, timeStep, index + 1), + dateChartService.defineTimePeriod(referenceDate, timeStep, index), + dateChartService.defineTimePeriod(referenceDate, timeStep, index + 1), ]) const graphData = await consumptionDataManager.getGraphData( diff --git a/src/services/consumptionDataFormatterService.ts b/src/services/consumptionDataFormatterService.ts index cba6bdb209af663b38134d0590e3ba9aa3a73407..7666b883311b307dd427f0e0960578e9f052502a 100644 --- a/src/services/consumptionDataFormatterService.ts +++ b/src/services/consumptionDataFormatterService.ts @@ -1,8 +1,7 @@ /* eslint-disable @typescript-eslint/interface-name-prefix */ import { TimeStep, ITimePeriod, IDataload } from './dataConsumptionContracts' import { compareDates } from 'utils/date' -import { compareStepDate } from './dateChartService' -//import _ from 'lodash' +import DateChartService from 'services/dateChartService' export default class ConsumptionDataFormatter { public formatGraphData( @@ -27,10 +26,11 @@ export default class ConsumptionDataFormatter { const filledData = [] let parsingDate = timePeriod.startDate + const dateChartService = new DateChartService() while (parsingDate <= timePeriod.endDate) { //const filtereddata = data.filter(dt => dt.date.equals(parsingDate)) const filtereddata = data.filter(dt => - compareStepDate(timeStep, dt.date, parsingDate) + dateChartService.compareStepDate(timeStep, dt.date, parsingDate) ) const newElement = filtereddata[0] diff --git a/src/services/dateChartService.ts b/src/services/dateChartService.ts index 6943921f181748529f1d19a67f2414d166ed669e..41cc9d05925deb981825858959099561e4c80373 100644 --- a/src/services/dateChartService.ts +++ b/src/services/dateChartService.ts @@ -6,273 +6,278 @@ import { IDataload, } from 'services/dataConsumptionContracts' -export function defineTimePeriod( - referenceDate: DateTime, - timeStep: TimeStep, - index: number -): TimePeriod { - let date: DateTime - switch (timeStep) { - case TimeStep.YEAR: - date = referenceDate.set({ - month: 1, - day: 1, - hour: 0, - minute: 0, - second: 0, - millisecond: 0, - }) - return new TimePeriod( - date.plus({ years: -5 * index - (5 - 1) }), - date.plus({ years: -5 * index }) - ) - case TimeStep.MONTH: - date = referenceDate.set({ - month: 12, - day: 1, - hour: 0, - minute: 0, - second: 0, - millisecond: 0, - }) - return new TimePeriod( - date.plus({ months: -12 * index - (12 - 1) }), - date.plus({ months: -12 * index }) - ) - case TimeStep.DAY: - date = referenceDate - .endOf('week') - .set({ hour: 0, minute: 0, second: 0, millisecond: 0 }) - return new TimePeriod( - date.plus({ days: -7 * index - (7 - 1) }), - date.plus({ days: -7 * index }) - ) - case TimeStep.HOUR: - date = referenceDate.set({ - hour: 23, - minute: 0, - second: 0, - millisecond: 0, - }) - return new TimePeriod( - date.set({ hour: 0, minute: 0 }).plus({ days: -1 * index }), - date.plus({ days: -1 * index }) - ) - case TimeStep.HALF_AN_HOUR: - date = referenceDate.set({ hour: 23, minute: 30 }) - return new TimePeriod( - date.set({ hour: 0, minute: 0 }).plus({ days: -1 * index }), - date.plus({ days: -1 * index }) - ) - default: - date = referenceDate - return new TimePeriod( - date.plus({ days: -7 * index - (7 - 1) }), - date.plus({ days: -7 * index }) - ) +export default class DateChartService { + public defineTimePeriod( + referenceDate: DateTime, + timeStep: TimeStep, + index: number + ): TimePeriod { + let date: DateTime + switch (timeStep) { + case TimeStep.YEAR: + date = referenceDate.set({ + month: 1, + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0, + }) + return new TimePeriod( + date.plus({ years: -5 * index - (5 - 1) }), + date.plus({ years: -5 * index }) + ) + case TimeStep.MONTH: + date = referenceDate.set({ + month: 12, + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0, + }) + return new TimePeriod( + date.plus({ months: -12 * index - (12 - 1) }), + date.plus({ months: -12 * index }) + ) + case TimeStep.DAY: + date = referenceDate + .endOf('week') + .set({ hour: 0, minute: 0, second: 0, millisecond: 0 }) + return new TimePeriod( + date.plus({ days: -7 * index - (7 - 1) }), + date.plus({ days: -7 * index }) + ) + case TimeStep.HOUR: + date = referenceDate.set({ + hour: 23, + minute: 0, + second: 0, + millisecond: 0, + }) + return new TimePeriod( + date.set({ hour: 0, minute: 0 }).plus({ days: -1 * index }), + date.plus({ days: -1 * index }) + ) + case TimeStep.HALF_AN_HOUR: + date = referenceDate.set({ hour: 23, minute: 30 }) + return new TimePeriod( + date.set({ hour: 0, minute: 0 }).plus({ days: -1 * index }), + date.plus({ days: -1 * index }) + ) + default: + date = referenceDate + return new TimePeriod( + date.plus({ days: -7 * index - (7 - 1) }), + date.plus({ days: -7 * index }) + ) + } } -} - -export function defineFirstStepDate( - referenceDate: DateTime, - timeStep: TimeStep, - index: number -): DateTime { - const period = defineTimePeriod(referenceDate, timeStep, index) - return period.startDate -} -export function defineLastStepDate( - referenceDate: DateTime, - timeStep: TimeStep, - index: number -): DateTime { - const period = defineTimePeriod(referenceDate, timeStep, index) - return period.endDate -} + public defineFirstStepDate( + referenceDate: DateTime, + timeStep: TimeStep, + index: number + ): DateTime { + const period = this.defineTimePeriod(referenceDate, timeStep, index) + return period.startDate + } -export function compareStepDate( - timeStep: TimeStep, - date1: DateTime, - date2: DateTime -): boolean { - switch (timeStep) { - case TimeStep.YEAR: - return date1.year === date2.year - case TimeStep.MONTH: - return date1.year === date2.year && date1.month === date2.month - case TimeStep.DAY: - return ( - date1.year === date2.year && - date1.month === date2.month && - date1.day === date2.day - ) - case TimeStep.HOUR: - return ( - date1.year === date2.year && - date1.month === date2.month && - date1.day === date2.day && - date1.hour === date2.hour - ) - case TimeStep.HALF_AN_HOUR: - return ( - date1.year === date2.year && - date1.month === date2.month && - date1.day === date2.day && - date1.hour === date2.hour && - Math.abs(date1.minute - date2.minute) < 30 - ) - default: - return false + public defineLastStepDate( + referenceDate: DateTime, + timeStep: TimeStep, + index: number + ): DateTime { + const period = this.defineTimePeriod(referenceDate, timeStep, index) + return period.endDate } -} -export function defineDetailedTimeStep( - timeStep: TimeStep, - fluidTypes: FluidType[] -): TimeStep { - if (fluidTypes.length === 1) { + public compareStepDate( + timeStep: TimeStep, + date1: DateTime, + date2: DateTime + ): boolean { switch (timeStep) { case TimeStep.YEAR: - return TimeStep.MONTH + return date1.year === date2.year case TimeStep.MONTH: - return TimeStep.DAY + return date1.year === date2.year && date1.month === date2.month case TimeStep.DAY: - switch (fluidTypes[0]) { - case FluidType.ELECTRICITY: - return TimeStep.HALF_AN_HOUR - case FluidType.WATER: - return TimeStep.HOUR - case FluidType.GAS: - return TimeStep.HOUR - } + return ( + date1.year === date2.year && + date1.month === date2.month && + date1.day === date2.day + ) case TimeStep.HOUR: - return TimeStep.HOUR + return ( + date1.year === date2.year && + date1.month === date2.month && + date1.day === date2.day && + date1.hour === date2.hour + ) case TimeStep.HALF_AN_HOUR: - return TimeStep.HALF_AN_HOUR + return ( + date1.year === date2.year && + date1.month === date2.month && + date1.day === date2.day && + date1.hour === date2.hour && + Math.abs(date1.minute - date2.minute) < 30 + ) default: - return timeStep + return false + } + } + + public defineDetailedTimeStep( + timeStep: TimeStep, + fluidTypes: FluidType[] + ): TimeStep { + if (fluidTypes.length === 1) { + switch (timeStep) { + case TimeStep.YEAR: + return TimeStep.MONTH + case TimeStep.MONTH: + return TimeStep.DAY + case TimeStep.DAY: + switch (fluidTypes[0]) { + case FluidType.ELECTRICITY: + return TimeStep.HALF_AN_HOUR + case FluidType.WATER: + return TimeStep.HOUR + case FluidType.GAS: + return TimeStep.HOUR + } + case TimeStep.HOUR: + return TimeStep.HOUR + case TimeStep.HALF_AN_HOUR: + return TimeStep.HALF_AN_HOUR + default: + return timeStep + } + } else { + switch (timeStep) { + case TimeStep.YEAR: + return TimeStep.MONTH + case TimeStep.MONTH: + return TimeStep.DAY + default: + return timeStep + } } - } else { + } + + public formatDetailedDate(date: DateTime, timeStep: TimeStep): DateTime { switch (timeStep) { case TimeStep.YEAR: - return TimeStep.MONTH + return date case TimeStep.MONTH: - return TimeStep.DAY + return date.set({ + month: 1, + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0, + }) + case TimeStep.DAY: + return date.set({ + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0, + }) + case TimeStep.HOUR: + return date.set({ hour: 0, minute: 0, second: 0, millisecond: 0 }) + case TimeStep.HALF_AN_HOUR: + return date.set({ minute: 0, second: 0, millisecond: 0 }) default: - return timeStep + return date } } -} -export function formatDetailedDate( - date: DateTime, - timeStep: TimeStep -): DateTime { - switch (timeStep) { - case TimeStep.YEAR: - return date - case TimeStep.MONTH: - return date.set({ - month: 1, - day: 1, - hour: 0, - minute: 0, - second: 0, - millisecond: 0, - }) - case TimeStep.DAY: - return date.set({ day: 1, hour: 0, minute: 0, second: 0, millisecond: 0 }) - case TimeStep.HOUR: - return date.set({ hour: 0, minute: 0, second: 0, millisecond: 0 }) - case TimeStep.HALF_AN_HOUR: - return date.set({ minute: 0, second: 0, millisecond: 0 }) - default: - return date - } -} - -export function incrementDate( - increment: number, - initialdate: DateTime, - timeStep: TimeStep, - lastDataDate: DateTime -): { incrementIndex: number; incrementedDate: DateTime } { - let incrementIndex = 0 - let incrementedDate: DateTime = initialdate - switch (timeStep) { - case TimeStep.YEAR: - incrementedDate = initialdate.plus({ year: increment }) - incrementIndex = - increment < 0 && - lastDataDate.year >= incrementedDate.year && - (lastDataDate.year - incrementedDate.year) % 5 === 0 - ? 1 - : increment > 0 && - lastDataDate.year >= incrementedDate.year && - (lastDataDate.year - incrementedDate.year) % 5 === 4 - ? -1 - : increment < 0 && - lastDataDate.year <= incrementedDate.year && - (incrementedDate.year - lastDataDate.year) % 5 === 0 - ? 1 - : increment > 0 && - lastDataDate.year <= incrementedDate.year && - (incrementedDate.year - lastDataDate.year) % 5 === 1 - ? -1 - : 0 - break - case TimeStep.MONTH: - incrementedDate = initialdate.plus({ month: increment }) - incrementIndex = initialdate.year - incrementedDate.year - break - case TimeStep.DAY: - incrementedDate = initialdate.plus({ day: increment }) - if (initialdate.weekday === 1 && incrementedDate.weekday === 7) { - incrementIndex = 1 - } else if (initialdate.weekday === 7 && incrementedDate.weekday === 1) { - incrementIndex = -1 - } else { - incrementIndex = 0 - } - break - case TimeStep.HOUR: - incrementedDate = initialdate.plus({ hour: increment }) - if (initialdate.hour === 0 && incrementedDate.hour === 23) { - incrementIndex = 1 - } else if (initialdate.hour === 23 && incrementedDate.hour === 0) { - incrementIndex = -1 - } else { - incrementIndex = 0 - } - break - case TimeStep.HALF_AN_HOUR: - incrementedDate = initialdate.plus({ minute: increment * 30 }) - if (initialdate.hour === 0 && incrementedDate.hour === 23) { - incrementIndex = 1 - } else if (initialdate.hour === 23 && incrementedDate.hour === 0) { - incrementIndex = -1 - } else { - incrementIndex = 0 - } - break + public incrementDate( + increment: number, + initialdate: DateTime, + timeStep: TimeStep, + lastDataDate: DateTime + ): { incrementIndex: number; incrementedDate: DateTime } { + let incrementIndex = 0 + let incrementedDate: DateTime = initialdate + switch (timeStep) { + case TimeStep.YEAR: + incrementedDate = initialdate.plus({ year: increment }) + incrementIndex = + increment < 0 && + lastDataDate.year >= incrementedDate.year && + (lastDataDate.year - incrementedDate.year) % 5 === 0 + ? 1 + : increment > 0 && + lastDataDate.year >= incrementedDate.year && + (lastDataDate.year - incrementedDate.year) % 5 === 4 + ? -1 + : increment < 0 && + lastDataDate.year <= incrementedDate.year && + (incrementedDate.year - lastDataDate.year) % 5 === 0 + ? 1 + : increment > 0 && + lastDataDate.year <= incrementedDate.year && + (incrementedDate.year - lastDataDate.year) % 5 === 1 + ? -1 + : 0 + break + case TimeStep.MONTH: + incrementedDate = initialdate.plus({ month: increment }) + incrementIndex = initialdate.year - incrementedDate.year + break + case TimeStep.DAY: + incrementedDate = initialdate.plus({ day: increment }) + if (initialdate.weekday === 1 && incrementedDate.weekday === 7) { + incrementIndex = 1 + } else if (initialdate.weekday === 7 && incrementedDate.weekday === 1) { + incrementIndex = -1 + } else { + incrementIndex = 0 + } + break + case TimeStep.HOUR: + incrementedDate = initialdate.plus({ hour: increment }) + if (initialdate.hour === 0 && incrementedDate.hour === 23) { + incrementIndex = 1 + } else if (initialdate.hour === 23 && incrementedDate.hour === 0) { + incrementIndex = -1 + } else { + incrementIndex = 0 + } + break + case TimeStep.HALF_AN_HOUR: + incrementedDate = initialdate.plus({ minute: increment * 30 }) + if (initialdate.hour === 0 && incrementedDate.hour === 23) { + incrementIndex = 1 + } else if (initialdate.hour === 23 && incrementedDate.hour === 0) { + incrementIndex = -1 + } else { + incrementIndex = 0 + } + break + } + return { incrementIndex, incrementedDate } } - return { incrementIndex, incrementedDate } -} -export const isDataToCome = (dataload: IDataload, fluidType: FluidType) => { - const inter = - dataload && - Interval.fromDateTimes(dataload.date, DateTime.local()).count('days') - if (fluidType === FluidType.ELECTRICITY && inter < 2) { - return true - } - if (fluidType === FluidType.WATER && inter < 4) { - return true - } - if (fluidType === FluidType.GAS && inter < 3) { - return true - } else { - return false + public isDataToCome(dataload: IDataload, fluidType: FluidType) { + const inter = + dataload && + Interval.fromDateTimes(dataload.date, DateTime.local()).count('days') + if (fluidType === FluidType.ELECTRICITY && inter < 2) { + return true + } + if (fluidType === FluidType.WATER && inter < 4) { + return true + } + if (fluidType === FluidType.GAS && inter < 3) { + return true + } else { + return false + } } }