diff --git a/src/components/charts/BarChart.tsx b/src/components/charts/BarChart.tsx index 09ff5154..5655d743 100644 --- a/src/components/charts/BarChart.tsx +++ b/src/components/charts/BarChart.tsx @@ -1,3 +1,4 @@ +import { useMemo } from 'react'; import { useTheme } from 'components/hooks'; import Chart, { ChartProps } from 'components/charts/Chart'; import { renderNumberLabels } from 'lib/charts'; @@ -25,45 +26,47 @@ export function BarChart(props: BarChartProps) { stacked = false, } = props; - const options = { - scales: { - x: { - type: XAxisType, - stacked: true, - time: { - unit, + const options = useMemo(() => { + return { + scales: { + x: { + type: XAxisType, + stacked: true, + time: { + unit, + }, + grid: { + display: false, + }, + border: { + color: colors.chart.line, + }, + ticks: { + color: colors.chart.text, + autoSkip: false, + maxRotation: 0, + callback: renderXLabel, + }, }, - grid: { - display: false, - }, - border: { - color: colors.chart.line, - }, - ticks: { - color: colors.chart.text, - autoSkip: false, - maxRotation: 0, - callback: renderXLabel, + y: { + type: YAxisType, + min: 0, + beginAtZero: true, + stacked, + grid: { + color: colors.chart.line, + }, + border: { + color: colors.chart.line, + }, + ticks: { + color: colors.chart.text, + callback: renderYLabel || renderNumberLabels, + }, }, }, - y: { - type: YAxisType, - min: 0, - beginAtZero: true, - stacked, - grid: { - color: colors.chart.line, - }, - border: { - color: colors.chart.line, - }, - ticks: { - color: colors.chart.text, - callback: renderYLabel || renderNumberLabels, - }, - }, - }, - }; + }; + }, [colors]); const handleTooltip = ({ tooltip }: { tooltip: any }) => { const { opacity } = tooltip; diff --git a/src/components/charts/Chart.tsx b/src/components/charts/Chart.tsx index a01192e4..2ec40d07 100644 --- a/src/components/charts/Chart.tsx +++ b/src/components/charts/Chart.tsx @@ -1,4 +1,4 @@ -import { useState, useRef, useEffect, ReactNode } from 'react'; +import { useState, useRef, useEffect, useMemo, ReactNode } from 'react'; import { Loading } from 'react-basics'; import classNames from 'classnames'; import ChartJS, { LegendItem } from 'chart.js/auto'; @@ -38,29 +38,31 @@ export function Chart({ const chart = useRef(null); const [legendItems, setLegendItems] = useState([]); - const options = { - responsive: true, - maintainAspectRatio: false, - animation: { - duration: animationDuration, - resize: { - duration: 0, + const options = useMemo(() => { + return { + responsive: true, + maintainAspectRatio: false, + animation: { + duration: animationDuration, + resize: { + duration: 0, + }, + active: { + duration: 0, + }, }, - active: { - duration: 0, + plugins: { + legend: { + display: false, + }, + tooltip: { + enabled: false, + external: onTooltip, + }, }, - }, - plugins: { - legend: { - display: false, - }, - tooltip: { - enabled: false, - external: onTooltip, - }, - }, - ...chartOptions, - }; + ...chartOptions, + }; + }, [chartOptions]); const createChart = (data: any) => { ChartJS.defaults.font.family = 'Inter';