From 4c30de5eeeacd0d2f8cc392f3e239e2a46dc8454 Mon Sep 17 00:00:00 2001 From: maciek Date: Wed, 10 May 2023 11:03:23 +0200 Subject: [PATCH] chore: fill up missing candles - small refactor - descrease number of Date constructors 2 --- libs/candles-chart/src/lib/data-source.ts | 47 +++++++++++++++-------- 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/libs/candles-chart/src/lib/data-source.ts b/libs/candles-chart/src/lib/data-source.ts index 21777db4a..b4d097dc1 100644 --- a/libs/candles-chart/src/lib/data-source.ts +++ b/libs/candles-chart/src/lib/data-source.ts @@ -167,10 +167,17 @@ export class VegaDataSource implements DataSource { const candles = data.market.candlesConnection.edges .map((edge) => edge?.node) .filter((node): node is CandleFieldsFragment => !!node) - .reduce(checkGranulationContinuity(interval), []) - .map((node) => - parseCandle(node, decimalPlaces, positionDecimalPlaces) + .reduce( + checkGranulationContinuity( + interval, + decimalPlaces, + positionDecimalPlaces + ), + [] ); + /*.map((node) => + parseCandle(node, decimalPlaces, positionDecimalPlaces) + );*/ return candles; } else { @@ -274,15 +281,15 @@ const getDifference = ( }; const checkGranulationContinuity = - (interval: PennantInterval) => ( - agg: CandleFieldsFragment[], - candle: CandleFieldsFragment, - i: number - ): CandleFieldsFragment[] => { + interval: PennantInterval, + decimalPlaces: number, + positionDecimalPlaces: number + ) => + (agg: Candle[], candle: CandleFieldsFragment, i: number): Candle[] => { if (agg.length && i) { const previous = agg[agg.length - 1]; - const previousStartDate = new Date(previous.periodStart); + const previousStartDate = previous.date; const candleStartDate = new Date(candle.periodStart); const difference = getDifference( interval, @@ -293,19 +300,29 @@ const checkGranulationContinuity = for (let j = 1; j < difference; j++) { const duration = getDuration(interval, j); const newStartDate = add(previousStartDate, duration); - agg.push({ - periodStart: newStartDate.toISOString(), - lastUpdateInPeriod: add(newStartDate, duration).toISOString(), + + const newParsedCandle: Candle = { + date: newStartDate, high: previous.close, low: previous.close, open: previous.close, close: previous.close, - volume: '0', - }); + volume: 0, + }; + agg.push(newParsedCandle); } } + agg.push({ + date: candleStartDate, + high: Number(addDecimal(candle.high, decimalPlaces)), + low: Number(addDecimal(candle.low, decimalPlaces)), + open: Number(addDecimal(candle.open, decimalPlaces)), + close: Number(addDecimal(candle.close, decimalPlaces)), + volume: Number(addDecimal(candle.volume, positionDecimalPlaces)), + }); + } else { + agg.push(parseCandle(candle, decimalPlaces, positionDecimalPlaces)); } - agg.push(candle); return agg; };