import React, {FC, useEffect, useRef, useState} from "react" import {rainfallGraphData} from "../../types" import {init, getInstanceByDom} from 'echarts' import type {ECharts } from "echarts" const RainFallEcharts: FC = ({width, height, data, loading}) => { // https://dev.to/manufac/using-apache-echarts-with-react-and-typescript-353k const chartRef = useRef(null) const [option, setOption] = useState({ tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } }, grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true }, label: { show: true, }, xAxis: [ { type: 'category', data: data.map(d => d.label), axisTick: { alignWithLabel: true } } ], yAxis: [ { type: 'value' } ], series: [ { name: 'Pluviométrie', type: 'bar', color: ['steelblue'], barWidth: '80%', data: data.map(d => d.value) } ] }) useEffect(() => { let chart: ECharts | undefined console.log('in', width, height) if (chartRef.current !== null) { chart = init(chartRef.current) } function resizeChart() { chart?.resize() } window.addEventListener("resize", resizeChart) return () => { chart?.dispose() window.removeEventListener("resize", resizeChart) } }, []) useEffect(() => { console.log('data') if (chartRef.current !== null) { console.log('data', data) const chart = getInstanceByDom(chartRef.current) chart?.setOption(option) } }, [option, data]) useEffect(() => { setOption({...option, xAxis: [ { type: 'category', data: data.map(d => d.label), axisTick: { alignWithLabel: true } } ], series: [ { name: 'Pluviométrie', type: 'bar', color: ['steelblue'], barWidth: '80%', data: data.map(d => d.value) } ] }) }, [data]) useEffect(() => { if (chartRef.current !== null) { const chart = getInstanceByDom(chartRef.current) // eslint-disable-next-line @typescript-eslint/no-unused-expressions loading === true ? chart?.showLoading() : chart?.hideLoading() } }, [loading]) return
} export default RainFallEcharts interface RainFallEchartsProps { width: number, height: number, data: rainfallGraphData[], loading: boolean, }