import { useToken } from '@chakra-ui/react'; import React, { useEffect, useMemo } from 'react'; import type { TimeChartItem } from 'ui/shared/chart/types'; import useIsMobile from 'lib/hooks/useIsMobile'; import ChartArea from 'ui/shared/chart/ChartArea'; import ChartAxis from 'ui/shared/chart/ChartAxis'; import ChartGridLine from 'ui/shared/chart/ChartGridLine'; import ChartLine from 'ui/shared/chart/ChartLine'; import ChartOverlay from 'ui/shared/chart/ChartOverlay'; import ChartSelectionX from 'ui/shared/chart/ChartSelectionX'; import ChartTooltip from 'ui/shared/chart/ChartTooltip'; import useChartSize from 'ui/shared/chart/useChartSize'; import useTimeChartController from 'ui/shared/chart/useTimeChartController'; interface Props { isEnlarged?: boolean; title: string; items: Array; onZoom: () => void; isZoomResetInitial: boolean; } const CHART_MARGIN = { bottom: 20, left: 40, right: 20, top: 10 }; const ChartWidgetGraph = ({ isEnlarged, items, onZoom, isZoomResetInitial, title }: Props) => { const isMobile = useIsMobile(); const ref = React.useRef(null); const color = useToken('colors', 'blue.200'); const overlayRef = React.useRef(null); const [ range, setRange ] = React.useState<[ number, number ]>([ 0, Infinity ]); const { width, height, innerWidth, innerHeight } = useChartSize(ref.current, CHART_MARGIN); const chartId = `chart-${ title.split(' ').join('') }-${ isEnlarged ? 'fullscreen' : 'small' }`; const displayedData = useMemo(() => items.slice(range[0], range[1]), [ items, range ]); const chartData = [ { items: items, name: 'Value', color } ]; const { yTickFormat, xScale, yScale } = useTimeChartController({ data: [ { items: displayedData, name: title, color } ], width: innerWidth, height: innerHeight, }); const handleRangeSelect = React.useCallback((nextRange: [ number, number ]) => { setRange([ range[0] + nextRange[0], range[0] + nextRange[1] ]); onZoom(); }, [ onZoom, range ]); useEffect(() => { if (isZoomResetInitial) { setRange([ 0, Infinity ]); } }, [ isZoomResetInitial ]); return ( ); }; export default React.memo(ChartWidgetGraph);