diff --git a/stories/Chart.tsx b/stories/Chart.tsx
index f39eee15c..4ae8f0dab 100644
--- a/stories/Chart.tsx
+++ b/stories/Chart.tsx
@@ -1,17 +1,11 @@
-import React, {
- MouseEvent,
- useRef,
- useState,
- useEffect,
- useReducer,
- useMemo,
-} from 'react';
+import React, { useState, useEffect, useRef, useReducer, useMemo } from 'react';
import 'chart.js/auto';
import type { InteractionItem } from 'chart.js';
import { Chart as ChartJS } from 'chart.js';
import 'chartjs-adapter-date-fns';
import annotationPlugin from 'chartjs-plugin-annotation';
import zoomPlugin from 'chartjs-plugin-zoom';
+
import {
Chart,
getDatasetAtEvent,
@@ -24,25 +18,8 @@ import * as data from './Chart.data';
ChartJS.register(annotationPlugin, zoomPlugin);
-export default {
- title: 'Components/Chart',
- component: Chart,
- parameters: {
- layout: 'centered',
- },
- args: {
- width: 500,
- height: 400,
- },
-};
-
-export const MultiType = args => ;
-
-MultiType.args = {
- data: multitypeChart.data,
-};
-
-export const Dynamic = args => {
+// Container Component
+const ChartContainer = ({ data, options }) => {
const [dynamicData, setDynamicData] = useState(data.getDynamicData);
useEffect(() => {
@@ -54,116 +31,83 @@ export const Dynamic = args => {
return () => clearInterval(interval);
}, []);
- return ;
-};
-
-Dynamic.args = {
- options: data.dynamicOptions,
-};
-
-export const ClickEvents = ({
- onDatasetClick,
- onElementClick,
- onElementsClick,
- options,
- data,
- ...args
-}) => {
- const datasetAtEvent = (dataset: InteractionItem[]) => {
- if (!dataset.length) return;
-
- const datasetIndex = dataset[0].datasetIndex;
+ const chartRef = useRef(null);
- onDatasetClick(data.datasets[datasetIndex].label);
+ const onDatasetClick = (datasetIndex) => {
+ // Handle dataset click
+ // Works only when "datasetEvents" is enabled
};
- const elementAtEvent = (element: InteractionItem[]) => {
- if (!element.length) return;
-
- const { datasetIndex, index } = element[0];
-
- onElementClick(data.labels[index], data.datasets[datasetIndex].data[index]);
+ const onElementClick = (index, datasetIndex) => {
+ // Handle element click
+ // Works only when "elementEvents" is enabled
};
- const elementsAtEvent = (elements: InteractionItem[]) => {
- if (!elements.length) return;
-
- onElementsClick(elements);
+ const onElementsClick = (elements) => {
+ // Handle elements click
+ // Works only when "elementsEvents" is enabled
};
- const chartRef = useRef(null);
-
- const onClick = (event: MouseEvent) => {
+ const onClick = (event) => {
const { current: chart } = chartRef;
if (!chart) {
return;
}
- datasetAtEvent(getDatasetAtEvent(chart, event));
- elementAtEvent(getElementAtEvent(chart, event));
- elementsAtEvent(getElementsAtEvent(chart, event));
+ const dataset = getDatasetAtEvent(chart, event);
+ const element = getElementAtEvent(chart, event);
+ const elements = getElementsAtEvent(chart, event);
+
+ if (dataset.length) {
+ const datasetIndex = dataset[0].datasetIndex;
+ onDatasetClick(datasetIndex);
+ }
+
+ if (element.length) {
+ const { datasetIndex, index } = element[0];
+ onElementClick(index, datasetIndex);
+ }
+
+ if (elements.length) {
+ onElementsClick(elements);
+ }
};
return (
);
};
-ClickEvents.args = {
- options: eventsChart.options,
- data: eventsChart.data,
-};
-
-ClickEvents.argTypes = {
- onDatasetClick: { action: 'dataset clicked' },
- onElementClick: { action: 'element clicked' },
- onElementsClick: { action: 'elements clicked' },
-};
-
-export const Redraw = args => ;
-
-Redraw.args = {
- data: multitypeChart.data,
- redraw: true,
-};
-
-export const SameDataToggle = args => {
+// Presentational Components
+export const MultiType = (args) => ;
+export const Dynamic = (args) => ;
+export const ClickEvents = (args) => ;
+export const Redraw = (args) => ;
+export const SameDataToggle = (args) => {
const [currentData, toggleData] = useReducer(
- prevState =>
+ (prevState) =>
prevState === data.sameData1 ? data.sameData2 : data.sameData1,
data.sameData1
);
- return ;
+ return ;
};
-
-SameDataToggle.args = {
- type: 'bar',
-};
-
-export const Decimation = args => {
- const [currentData, toggleData] = useReducer(
+export const Decimation = (args) => {
+ const[currentData, toggleData] = useReducer(
data.getDecimationData,
data.getDecimationData()
);
- return ;
+ return ;
};
-
-Decimation.args = {
- type: 'line',
- options: data.decimationOptions,
-};
-
-export const DynamicOptions = args => {
+export const DynamicOptions = (args) => {
const [yMax, setYMax] = useState(100);
const options = useMemo(
() => ({
@@ -198,12 +142,8 @@ export const DynamicOptions = args => {
return (
<>
-
-
+
+
>
);
};
-
-DynamicOptions.args = {
- data: multitypeChart.data,
-};