in src/visualComponent/kpi/varianceComponentWithCustomLabel.ts [52:129]
public render(options: IVisualComponentRenderOptions): void {
const {
series,
variance,
settings: {
dateLabelKPI,
dateValueKPI,
actualValueKPI,
actualLabelKPI,
kpiIndicatorValue,
kpiIndicatorLabel,
secondKPIIndicatorValue,
secondKPIIndicatorLabel,
kpiIndicator,
},
} = options.data;
const varianceSettings: KPIIndicatorValueDescriptor = {
...secondKPIIndicatorValue,
} as KPIIndicatorValueDescriptor; // TODO: potential issue
const labelSettings: KPIIndicatorValueDescriptor = {
...secondKPIIndicatorLabel,
} as unknown as KPIIndicatorValueDescriptor; // TODO: potential issue
labelSettings.show = secondKPIIndicatorLabel.isShown();
if (isNaN(variance[1])) {
varianceSettings.show = false;
labelSettings.show = false;
}
const isVarianceKPIAvailable: boolean = series
&& series.length > 0
&& series[0]
&& series[0].current
&& !isNaN(series[0].current.kpiIndex);
let currentAlign: AlignEnum = AlignEnum.alignCenter;
if (!dateLabelKPI.show
&& !dateValueKPI.show
&& (!actualValueKPI.show || series[0] && series[0].current && isNaN(series[0] && series[0].current.y))
&& !actualLabelKPI.show
) {
currentAlign = AlignEnum.alignLeft;
} else if ((!kpiIndicatorValue.show || isNaN(variance[0]))
&& (!kpiIndicatorLabel.isShown() || (isNaN(variance[0]) && series[0] && series[0].current && isNaN(series[0].current.kpiIndex)))
&& (!isVarianceKPIAvailable || !kpiIndicator.show)) {
currentAlign = AlignEnum.alignRight;
}
const formatter: valueFormatter.IValueFormatter = this.getValueFormatter(
varianceSettings.displayUnits,
varianceSettings.precision,
secondKPIIndicatorValue.getFormat(),
);
const valueCaption: ICaptionKPIComponentOptionsValueSettings = {
settings: varianceSettings,
title: secondKPIIndicatorLabel.label || `${variance[1]}`,
value: formatter.format(variance[1]),
};
const labelCaption: ICaptionKPIComponentOptionsValueSettings = {
settings: labelSettings,
value: secondKPIIndicatorLabel.label,
};
super.render({
align: currentAlign,
captions: [
[valueCaption],
[labelCaption],
],
data: options.data,
});
}