|
|
|
@ -48,7 +48,7 @@ export class LineChartComponent implements AfterViewInit, OnChanges, OnDestroy {
|
|
|
|
|
@Input() benchmarkLabel = '';
|
|
|
|
|
@Input() currency: string;
|
|
|
|
|
@Input() historicalDataItems: LineChartItem[];
|
|
|
|
|
@Input() isAnimated = true;
|
|
|
|
|
@Input() isAnimated = false;
|
|
|
|
|
@Input() locale: string;
|
|
|
|
|
@Input() showGradient = false;
|
|
|
|
|
@Input() showLegend = false;
|
|
|
|
@ -67,6 +67,8 @@ export class LineChartComponent implements AfterViewInit, OnChanges, OnDestroy {
|
|
|
|
|
public chart: Chart;
|
|
|
|
|
public isLoading = true;
|
|
|
|
|
|
|
|
|
|
private readonly ANIMATION_DURATION = 1200;
|
|
|
|
|
|
|
|
|
|
public constructor(private changeDetectorRef: ChangeDetectorRef) {
|
|
|
|
|
Chart.register(
|
|
|
|
|
Filler,
|
|
|
|
@ -115,7 +117,7 @@ export class LineChartComponent implements AfterViewInit, OnChanges, OnDestroy {
|
|
|
|
|
private initialize() {
|
|
|
|
|
this.isLoading = true;
|
|
|
|
|
const benchmarkPrices = [];
|
|
|
|
|
const labels = [];
|
|
|
|
|
const labels: string[] = [];
|
|
|
|
|
const marketPrices = [];
|
|
|
|
|
|
|
|
|
|
this.historicalDataItems?.forEach((historicalDataItem, index) => {
|
|
|
|
@ -164,51 +166,29 @@ export class LineChartComponent implements AfterViewInit, OnChanges, OnDestroy {
|
|
|
|
|
]
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const animationDuration = 1000;
|
|
|
|
|
|
|
|
|
|
const delayBetweenPoints = animationDuration / labels.length;
|
|
|
|
|
const animation = {
|
|
|
|
|
x: {
|
|
|
|
|
type: 'number',
|
|
|
|
|
easing: 'linear',
|
|
|
|
|
duration: delayBetweenPoints,
|
|
|
|
|
from: NaN,
|
|
|
|
|
delay(ctx) {
|
|
|
|
|
if (ctx.type !== 'data' || ctx.xStarted) {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
ctx.xStarted = true;
|
|
|
|
|
return ctx.index * delayBetweenPoints;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
y: {
|
|
|
|
|
type: 'number',
|
|
|
|
|
easing: 'linear',
|
|
|
|
|
duration: delayBetweenPoints,
|
|
|
|
|
from: 0,
|
|
|
|
|
delay(ctx) {
|
|
|
|
|
if (ctx.type !== 'data' || ctx.yStarted) {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
ctx.yStarted = true;
|
|
|
|
|
return ctx.index * delayBetweenPoints;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (this.chartCanvas) {
|
|
|
|
|
if (this.chart) {
|
|
|
|
|
this.chart.data = data;
|
|
|
|
|
this.chart.options.plugins.tooltip = <unknown>(
|
|
|
|
|
this.getTooltipPluginConfiguration()
|
|
|
|
|
);
|
|
|
|
|
this.chart.options.animation = this.isAnimated && <unknown>animation;
|
|
|
|
|
this.chart.options.animation =
|
|
|
|
|
this.isAnimated &&
|
|
|
|
|
<unknown>{
|
|
|
|
|
x: this.getAnimationConfigurationForAxis({ labels, axis: 'x' }),
|
|
|
|
|
y: this.getAnimationConfigurationForAxis({ labels, axis: 'y' })
|
|
|
|
|
};
|
|
|
|
|
this.chart.update();
|
|
|
|
|
} else {
|
|
|
|
|
this.chart = new Chart(this.chartCanvas.nativeElement, {
|
|
|
|
|
data,
|
|
|
|
|
options: {
|
|
|
|
|
animation: this.isAnimated && <unknown>animation,
|
|
|
|
|
animation:
|
|
|
|
|
this.isAnimated &&
|
|
|
|
|
<unknown>{
|
|
|
|
|
x: this.getAnimationConfigurationForAxis({ labels, axis: 'x' }),
|
|
|
|
|
y: this.getAnimationConfigurationForAxis({ labels, axis: 'y' })
|
|
|
|
|
},
|
|
|
|
|
aspectRatio: 16 / 9,
|
|
|
|
|
elements: {
|
|
|
|
|
point: {
|
|
|
|
@ -291,6 +271,31 @@ export class LineChartComponent implements AfterViewInit, OnChanges, OnDestroy {
|
|
|
|
|
this.isLoading = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private getAnimationConfigurationForAxis({
|
|
|
|
|
axis,
|
|
|
|
|
labels
|
|
|
|
|
}: {
|
|
|
|
|
axis: 'x' | 'y';
|
|
|
|
|
labels: string[];
|
|
|
|
|
}) {
|
|
|
|
|
const delayBetweenPoints = this.ANIMATION_DURATION / labels.length;
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
delay(context) {
|
|
|
|
|
if (context.type !== 'data' || context[`${axis}Started`]) {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
context[`${axis}Started`] = true;
|
|
|
|
|
return context.index * delayBetweenPoints;
|
|
|
|
|
},
|
|
|
|
|
duration: delayBetweenPoints,
|
|
|
|
|
easing: 'linear',
|
|
|
|
|
from: NaN,
|
|
|
|
|
type: 'number'
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private getTooltipPluginConfiguration() {
|
|
|
|
|
return {
|
|
|
|
|
...getTooltipOptions({
|
|
|
|
|