Skip to content

Commit

Permalink
oi
Browse files Browse the repository at this point in the history
  • Loading branch information
hokolomopo committed Oct 21, 2024
1 parent 7cd369c commit 9ee4f53
Show file tree
Hide file tree
Showing 7 changed files with 102 additions and 233 deletions.
35 changes: 10 additions & 25 deletions src/helpers/figures/charts/bar_chart.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { BasePlatform, ChartConfiguration, ChartDataset, ChartType } from "chart.js";
import type { ChartConfiguration, ChartDataset, ChartType } from "chart.js";
import { BACKGROUND_CHART_COLOR, BORDER_CHART_COLOR } from "../../../constants";
import {
AddColumnsRowsCommand,
Expand All @@ -15,6 +15,7 @@ import { BarChartDefinition, BarChartRuntime } from "../../../types/chart/bar_ch
import {
AxesDesign,
ChartCreationContext,
ChartRuntimeGenerationArgs,
CustomizedDataSet,
DataSet,
DatasetDesign,
Expand All @@ -34,7 +35,6 @@ import {
copyDataSetsWithNewSheetId,
copyLabelRangeWithNewSheetId,
createDataSets,
formatChartDatasetValue,
getChartColorsGenerator,
getDefinedAxis,
getTrendDatasetForBarChart,
Expand All @@ -56,6 +56,7 @@ import {
import { getBarChartLayout } from "./runtime/layout";
import { getBarChartLegend } from "./runtime/legend";
import { getBarChartScales } from "./runtime/scales";
import { getCommonChartShowValues } from "./runtime/show_values";
import { getCommonChartTitle } from "./runtime/title";
import { getBarChartTooltip } from "./runtime/tooltip";

Expand Down Expand Up @@ -246,7 +247,6 @@ export function createBarChartRuntime(chart: BarChart, getters: Getters): BarCha

const leftAxisFormat = getChartDatasetFormat(getters, chart.dataSets, "left");
const rightAxisFormat = getChartDatasetFormat(getters, chart.dataSets, "right");
const locale = getters.getLocale();
const axisFormats = chart.horizontal
? { x: leftAxisFormat || rightAxisFormat }
: { y: leftAxisFormat, y1: rightAxisFormat };
Expand Down Expand Up @@ -291,48 +291,33 @@ export function createBarChartRuntime(chart: BarChart, getters: Getters): BarCha
*/
dataSets.push(...trendDatasets);

const args = {
const args: ChartRuntimeGenerationArgs = {
axisFormats: axisFormats,
locale: getters.getLocale(),
labelValues: labels,
dataSetsValues: dataSetsValues,
leftAxisFormat,
rightAxisFormat,
dataSeriesLabels: dataSetsValues.map((ds) => ds.label),
trendDatasets: trendDatasets,
labels,
dataSetsValues,
trendDatasets,
};

// const baseConfig = getDefaultChartJsRuntime(chart, labels, fontColor, {
// locale,
// axisFormats,
// horizontalChart: chart.horizontal,
// });
const config: ChartConfiguration = {
type: chart.type as ChartType,
data: {
labels: labels.map(truncateLabel),
datasets: dataSets,
},
platform: undefined as unknown as typeof BasePlatform, // This key is optional and will be set by chart.js
options: {
...CHART_COMMON_OPTIONS,
indexAxis: chart.horizontal ? "y" : "x",
layout: getBarChartLayout(definition),
scales: getBarChartScales(definition, args),
plugins: {
title: getCommonChartTitle(definition),
legend: getBarChartLegend(definition, {}),
legend: getBarChartLegend(definition, args),
tooltip: getBarChartTooltip(definition, args),
chartShowValuesPlugin: getCommonChartShowValues(definition, args),
},
},
};
config.options!.indexAxis = chart.horizontal ? "y" : "x";
config.options!.plugins!.chartShowValuesPlugin = {
showValues: chart.showValues,
background: chart.background,
horizontal: chart.horizontal,
callback: formatChartDatasetValue(axisFormats, locale),
};
config.data.datasets = dataSets;

return { chartJsConfig: config, background: chart.background || BACKGROUND_CHART_COLOR };
}
66 changes: 0 additions & 66 deletions src/helpers/figures/charts/runtime/_template.ts

This file was deleted.

27 changes: 18 additions & 9 deletions src/helpers/figures/charts/runtime/legend.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {
import { _t } from "../../../../translation";
import {
BarChartDefinition,
ChartRuntimeGenerationArgs,
CommonChartJSDefinition,
LineChartDefinition,
PieChartDefinition,
Expand All @@ -25,11 +26,10 @@ import {
} from "./convert_definition";

type ChartLegend = DeepPartial<LegendOptions<any>>;
interface LegendArgs {}

export function getCommonChartLegend(
definition: CommonChartJSDefinition, // ADRM TODO: maybe just a "legend" in definition
args: LegendArgs
args: ChartRuntimeGenerationArgs
): ChartLegend {
return {
// Disable default legend onClick (show/hide dataset), to allow us to set a global onClick on the chart container.
Expand All @@ -41,13 +41,19 @@ export function getCommonChartLegend(
};
}

export function getBarChartLegend(definition: BarChartDefinition, args: LegendArgs): ChartLegend {
export function getBarChartLegend(
definition: BarChartDefinition,
args: ChartRuntimeGenerationArgs
): ChartLegend {
return {
...getCommonChartLegend(definition, args),
};
}

export function getLineChartLegend(definition: LineChartDefinition, args: LegendArgs): ChartLegend {
export function getLineChartLegend(
definition: LineChartDefinition,
args: ChartRuntimeGenerationArgs
): ChartLegend {
return {
...getCommonChartLegend(definition, args),
labels: {
Expand All @@ -65,22 +71,25 @@ export function getLineChartLegend(definition: LineChartDefinition, args: Legend
};
}

export function getPieChartLegend(definition: PieChartDefinition, args: LegendArgs): ChartLegend {
export function getPieChartLegend(
definition: PieChartDefinition,
args: ChartRuntimeGenerationArgs
): ChartLegend {
return {
...getCommonChartLegend(definition, args),
};
}

export function getComboBarChartLegend(
definition: ComboBarChartDefinition,
args: LegendArgs
args: ChartRuntimeGenerationArgs
): ChartLegend {
return { ...getBarChartLegend(comboDefinitionToBar(definition), args) };
}

export function getWaterfallChartLegend(
definition: WaterfallChartDefinition,
args: LegendArgs
args: ChartRuntimeGenerationArgs
): ChartLegend {
const fontColor = chartFontColor(definition.background);
const negativeColor = definition.negativeValuesColor || CHART_WATERFALL_NEGATIVE_COLOR;
Expand Down Expand Up @@ -122,14 +131,14 @@ export function getWaterfallChartLegend(

export function getPyramidChartLegend(
definition: PyramidChartDefinition,
args: LegendArgs
args: ChartRuntimeGenerationArgs
): ChartLegend {
return { ...getBarChartLegend(pyramidDefinitionToBar(definition), args) };
}

export function getScatterChartLegend(
definition: ScatterChartDefinition,
args: LegendArgs
args: ChartRuntimeGenerationArgs
): ChartLegend {
return { ...getLineChartLegend(scatterDefinitionToLine(definition), args) };
}
56 changes: 25 additions & 31 deletions src/helpers/figures/charts/runtime/scales.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import { ChartOptions } from "chart.js";
import { Format, Locale } from "../../../../types";
import {
AxisType,
BarChartDefinition,
ChartRuntimeGenerationArgs,
CommonChartJSDefinition,
LineChartDefinition,
PieChartDefinition,
Expand All @@ -22,41 +21,31 @@ import {
waterfallDefinitionToBar,
} from "./convert_definition";

// interface ChartScales {
// [key: string]: any;
// }
type ChartScales = ChartOptions["scales"];

interface ScaleArgs {
locale: Locale;
leftAxisFormat?: string;
rightAxisFormat?: string;
trendDatasets?: { data: number[] }[];
axisType?: AxisType;
labelFormat?: Format;
labels?: string[];
}

export function getCommonChartScales(
definition: CommonChartJSDefinition,
args: ScaleArgs
args: ChartRuntimeGenerationArgs
): ChartScales {
return {};
}

export function getBarChartScales(definition: BarChartDefinition, args: ScaleArgs): ChartScales {
export function getBarChartScales(
definition: BarChartDefinition,
args: ChartRuntimeGenerationArgs
): ChartScales {
let scales: ChartScales = {};
const { trendDatasets, locale, leftAxisFormat, rightAxisFormat } = args;
const { trendDatasets, locale, axisFormats } = args;
const options = { stacked: definition.stacked, locale: locale };
if (definition.horizontal) {
const format = leftAxisFormat || rightAxisFormat;
const format = axisFormats?.y || axisFormats?.y1;
scales.x = getChartAxis(definition, "bottom", "values", { ...options, format });
scales.y = getChartAxis(definition, "left", "labels", options);
} else {
scales.x = getChartAxis(definition, "bottom", "labels", options);
const leftAxisOptions = { ...options, format: leftAxisFormat };
const leftAxisOptions = { ...options, format: axisFormats?.y };
scales.y = getChartAxis(definition, "left", "values", leftAxisOptions);
const rightAxisOptions = { ...options, format: rightAxisFormat };
const rightAxisOptions = { ...options, format: axisFormats?.y1 };
scales.y1 = getChartAxis(definition, "right", "values", rightAxisOptions);
}
scales = removeFalsyAttributes(scales);
Expand All @@ -77,14 +66,16 @@ export function getBarChartScales(definition: BarChartDefinition, args: ScaleArg
return { ...getCommonChartScales(definition, args), ...scales };
}

export function getLineChartScales(definition: LineChartDefinition, args: ScaleArgs): ChartScales {
const { locale, leftAxisFormat, rightAxisFormat, axisType, trendDatasets, labelFormat, labels } =
args;
export function getLineChartScales(
definition: LineChartDefinition,
args: ChartRuntimeGenerationArgs
): ChartScales {
const { locale, axisType, trendDatasets, labelFormat, labels, axisFormats } = args;
const stacked = definition.stacked;
let scales: ChartScales = {
x: getChartAxis(definition, "bottom", "labels", { locale }),
y: getChartAxis(definition, "left", "values", { locale, stacked, format: leftAxisFormat }),
y1: getChartAxis(definition, "right", "values", { locale, stacked, format: rightAxisFormat }),
y: getChartAxis(definition, "left", "values", { locale, stacked, format: axisFormats?.y }),
y1: getChartAxis(definition, "right", "values", { locale, stacked, format: axisFormats?.y1 }),
};
scales = removeFalsyAttributes(scales);

Expand Down Expand Up @@ -117,20 +108,23 @@ export function getLineChartScales(definition: LineChartDefinition, args: ScaleA
return { ...getCommonChartScales(definition, args), ...scales };
}

export function getPieChartScales(definition: PieChartDefinition, args: ScaleArgs): ChartScales {
export function getPieChartScales(
definition: PieChartDefinition,
args: ChartRuntimeGenerationArgs
): ChartScales {
return { ...getCommonChartScales(definition, args) };
}

export function getComboBarChartScales(
definition: ComboBarChartDefinition,
args: ScaleArgs
args: ChartRuntimeGenerationArgs
): ChartScales {
return { ...getBarChartScales(comboDefinitionToBar(definition), args) };
}

export function getWaterfallChartScales(
definition: WaterfallChartDefinition,
args: ScaleArgs
args: ChartRuntimeGenerationArgs
): ChartScales {
const scales = getBarChartScales(waterfallDefinitionToBar(definition), args);

Expand All @@ -144,7 +138,7 @@ export function getWaterfallChartScales(

export function getPyramidChartScales(
definition: PyramidChartDefinition,
args: ScaleArgs
args: ChartRuntimeGenerationArgs
): ChartScales {
const scales = getBarChartScales(pyramidDefinitionToBar(definition), args);
const scalesXCallback = scales!.x!.ticks!.callback as (value: number) => string;
Expand All @@ -155,7 +149,7 @@ export function getPyramidChartScales(

export function getScatterChartScales(
definition: ScatterChartDefinition,
args: ScaleArgs
args: ChartRuntimeGenerationArgs
): ChartScales {
return { ...getLineChartScales(scatterDefinitionToLine(definition), args) };
}
Loading

0 comments on commit 9ee4f53

Please sign in to comment.