Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions src/helpers/figures/chart.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@ import {
ChartDataSourceBuilder,
chartDataSourceRegistry,
} from "../../registries/chart_data_source_registry";
import { ChartTypeBuilder, chartTypeRegistry } from "../../registries/chart_registry";
import {
ChartJsEventHandlers,
ChartTypeBuilder,
chartTypeRegistry,
} from "../../registries/chart_registry";
import {
ChartCreationContext,
ChartData,
Expand Down Expand Up @@ -193,7 +197,7 @@ export class SpreadsheetChart {
extractData: () => ({ dataSetsValues: [], labelValues: [] }),
extractHierarchicalData: () => ({ dataSetsValues: [], labelValues: [] }),
};
const eventHandlers = {
const eventHandlers: ChartJsEventHandlers = {
onClick: (event, items, chartJsChart) => {
return this.dataSourceBuilder.onDataSetClick?.(
this.definition.type,
Expand All @@ -204,6 +208,14 @@ export class SpreadsheetChart {
getters
);
},
onHover: (event, items, chartJsChart) =>
this.dataSourceBuilder.onDataSetHover?.(
this.definition.type,
chartId,
event,
items,
chartJsChart
),
};
return this.chartTypeBuilder.getRuntime(
getters,
Expand Down
15 changes: 11 additions & 4 deletions src/registries/chart_data_source_registry.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import type * as ChartJS from "chart.js";
import {
ChartCreationContext,
ChartData,
Expand Down Expand Up @@ -49,12 +50,18 @@ export interface ChartDataSourceBuilder<TExternal, TInternal> {
onDataSetClick?: (
chartType: ChartType,
chartId: UID,
// chartjs internals
event: unknown,
items: unknown,
chartJsChart: unknown,
event: ChartJS.ChartEvent,
items: ChartJS.ActiveElement[],
chartJsChart: ChartJS.Chart,
getters: Getters
) => void;
onDataSetHover?: (
chartType: ChartType,
chartId: UID,
event: ChartJS.ChartEvent,
items: ChartJS.ActiveElement[],
chartJsChart: ChartJS.Chart
) => void;
}

export interface ChartDataSourceRegistry
Expand Down
16 changes: 2 additions & 14 deletions src/registries/chart_registry.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { CoreChartOptions } from "chart.js";
import { Getters, Range } from "../types";
import {
ChartCreationContext,
Expand Down Expand Up @@ -109,20 +110,7 @@ interface ChartDataExtractors {
extractHierarchicalData(): ChartData;
}

interface ChartJsEventHandlers {
onClick?: (
// chartjs internals
event: unknown,
items: unknown,
chartJsChart: unknown
) => void;
onHover?: (
// chartjs internals
event: unknown,
items: unknown,
chartJsChart: unknown
) => void;
}
export type ChartJsEventHandlers = Pick<CoreChartOptions<any>, "onClick" | "onHover">;

export interface ChartTypeRegistry extends Registry<ChartTypeBuilder<any>> {
add<T extends ChartType>(type: T, builder: ChartTypeBuilder<T>): this;
Expand Down
4 changes: 4 additions & 0 deletions tests/figures/chart/__snapshots__/chart_plugin.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ exports[`datasource tests create a chart with stacked bar 1`] = `
},
"maintainAspectRatio": false,
"onClick": [Function],
"onHover": [Function],
"plugins": {
"background": {
"color": undefined,
Expand Down Expand Up @@ -200,6 +201,7 @@ exports[`datasource tests create a chart with stacked bar 1`] = `
},
"maintainAspectRatio": false,
"onClick": [Function],
"onHover": [Function],
"plugins": {
"background": {
"color": undefined,
Expand Down Expand Up @@ -333,6 +335,7 @@ exports[`datasource tests create chart with column datasets 1`] = `
},
"maintainAspectRatio": false,
"onClick": [Function],
"onHover": [Function],
"plugins": {
"background": {
"color": undefined,
Expand Down Expand Up @@ -501,6 +504,7 @@ exports[`datasource tests create chart with column datasets 1`] = `
},
"maintainAspectRatio": false,
"onClick": [Function],
"onHover": [Function],
"plugins": {
"background": {
"color": undefined,
Expand Down