SUPPORT-8732: refactoring for review

This commit is contained in:
Рауф Латыпов 2024-12-13 17:12:30 +03:00
parent c36e0b04aa
commit 5dbbd66f37

View file

@ -219,14 +219,19 @@ export class ErvuChartV2 extends Control implements Filterable {
chartOptions.plugins.title = this.title;
}
if (this.addDataSetsVisibilityToggleDataset && chartConfig.data.datasets &&
chartConfig.data.datasets.length > 0) {
let datasetLength = chartConfig.data.datasets.length;
chartConfig.data.datasets.push({
label: this.hideAllDatasetsLabel,
xAxisID: {display: false},
yAxisID: {display: false}
});
let datasets;
let datasetsLength: number = 0;
if (chartConfig.data && chartConfig.data.datasets && chartConfig.data.datasets.length > 0) {
datasets = chartConfig.data.datasets;
datasetsLength = datasets.length;
}
if (this.addDataSetsVisibilityToggleDataset && datasetsLength > 0) {
datasets.push({
label: this.hideAllDatasetsLabel,
xAxisID: {display: false},
yAxisID: {display: false}
});
chartOptions.plugins.legend.onClick = (e, legendItem, legend) => {
const index = legendItem.datasetIndex;
@ -234,12 +239,12 @@ export class ErvuChartV2 extends Control implements Filterable {
let datasetMeta = chartObj.getDatasetMeta(index);
if (datasetLength == index) {
if (datasetsLength == index) {
let showAll = datasetMeta.label == this.showAllDatasetsLabel;
chartObj.data.datasets[index].label =
showAll ? this.hideAllDatasetsLabel : this.showAllDatasetsLabel;
for (let i = 0; i < datasetLength; i++) {
for (let i = 0; i < datasetsLength; i++) {
chartObj.setDatasetVisibility(i, showAll);
}
chartObj.update();
@ -257,8 +262,8 @@ export class ErvuChartV2 extends Control implements Filterable {
};
}
if (chartConfig.data.datasets) { // remove it after change type of ChartDataSetDto.backgroundColor
chartConfig.data.datasets.forEach(dataset => {
if (datasetsLength > 0) { // remove it after change type of ChartDataSetDto.backgroundColor
datasets.forEach(dataset => {
if (dataset.backgroundColors) dataset.backgroundColor = dataset.backgroundColors;
});
}
@ -281,54 +286,16 @@ export class ErvuChartV2 extends Control implements Filterable {
chartOptions.scales.y = this.bars.y;
// shadow bar treatment must be before border radius treatment
if (this.bars.shadowBar && chartConfig.data.datasets &&
chartConfig.data.datasets.length > 0) {
const shadowBarStack: string = this.bars.shadowBar;
let datasets = chartConfig.data.datasets;
const shadowBarIndex = datasets.findIndex(element => element.stack === shadowBarStack);
if (shadowBarIndex > -1) {
const shadowBar = datasets[shadowBarIndex];
const stacks: string[] = [];
datasets.forEach((element, index) => {
let stack: string = element.stack;
if (stack) {
if (stack !== shadowBarStack && stacks.includes(stack)) {
stacks.push(stack);
}
}
else {
stack = shadowBarStack + index;
element.stack = stack;
stacks.push(stack);
}
});
datasets.splice(shadowBarIndex, 1);
stacks.forEach(value => {
const cloneShadowBar = {...shadowBar};
cloneShadowBar.stack = value;
datasets.push(cloneShadowBar);
});
}
if (this.bars.shadowBar && datasetsLength > 0) {
this.initShadowBar(datasets);
}
}
if (this.datasetsCommon && chartConfig.data.datasets &&
chartConfig.data.datasets.length > 0) {
// border radius treatment
if (this.datasetsCommon.borderRadiusNumber
|| (this.datasetsCommon.borderRadius &&
(this.datasetsCommon.borderRadius.topLeft ||
this.datasetsCommon.borderRadius.topRight ||
this.datasetsCommon.borderRadius.bottomLeft ||
this.datasetsCommon.borderRadius.bottomRight))) {
const borderRadiusNumber: number = this.datasetsCommon.borderRadiusNumber;
chartConfig.data.datasets.forEach(dataset => dataset.borderRadius =
borderRadiusNumber ? borderRadiusNumber : this.datasetsCommon.borderRadius);
if (this.datasetsCommon) {
if ((this.datasetsCommon.borderRadiusNumber || this.datasetsCommon.borderRadius)
&& datasetsLength > 0) {
// border radius treatment
this.initBorderRadius(datasets);
}
}
@ -346,6 +313,52 @@ export class ErvuChartV2 extends Control implements Filterable {
this.chartConfig = chartConfig;
}
private initBorderRadius(datasets) {
if (this.datasetsCommon.borderRadiusNumber
|| (this.datasetsCommon.borderRadius &&
(this.datasetsCommon.borderRadius.topLeft ||
this.datasetsCommon.borderRadius.topRight ||
this.datasetsCommon.borderRadius.bottomLeft ||
this.datasetsCommon.borderRadius.bottomRight))) {
const borderRadiusNumber: number = this.datasetsCommon.borderRadiusNumber;
datasets.forEach(dataset => dataset.borderRadius =
borderRadiusNumber ? borderRadiusNumber : this.datasetsCommon.borderRadius);
}
}
private initShadowBar(datasets) {
const shadowBarStack: string = this.bars.shadowBar;
const shadowBarIndex = datasets.findIndex(element => element.stack === shadowBarStack);
if (shadowBarIndex > -1) {
const shadowBar = datasets[shadowBarIndex];
const stacks: string[] = [];
datasets.forEach((element, index) => {
let stack: string = element.stack;
if (stack) {
if (stack !== shadowBarStack && stacks.includes(stack)) {
stacks.push(stack);
}
}
else {
stack = shadowBarStack + index;
element.stack = stack;
stacks.push(stack);
}
});
datasets.splice(shadowBarIndex, 1);
stacks.forEach(value => {
const cloneShadowBar = {...shadowBar};
cloneShadowBar.stack = value;
datasets.push(cloneShadowBar);
});
}
}
private repaint(chartData) {
if (this.chart) {
this.chart.destroy();