UNPKG

pagamio-frontend-commons-lib

Version:

Pagamio library for Frontend reusable components like the form engine and table container

47 lines (46 loc) 2.17 kB
import { jsx as _jsx } from "react/jsx-runtime"; import ReactECharts from 'echarts-for-react'; import { useMemo } from 'react'; import { getBarChartData } from '../utils'; const ChartFormatter = ({ metricData, xAxisDataValueKey, seriesDataNameKey, seriesDataValueKey, chartType, chartOptions, chartHeight = '350px', notMerge = false, stacked, smooth = false, symbolConfig, }) => { const formattedChartData = useMemo(() => { if (metricData.length === 0) return { xAxisValues: [], seriesData: [] }; const { xAxisValues, seriesData } = getBarChartData(metricData, xAxisDataValueKey, seriesDataNameKey, seriesDataValueKey); let transformedSeries; if (chartType === 'bar') { transformedSeries = seriesData.map((series) => ({ ...series, type: 'bar', stack: stacked ? 'stack' : undefined, })); } else if (chartType === 'line') { transformedSeries = seriesData.map((series) => ({ ...series, type: 'line', smooth: smooth, symbol: symbolConfig?.symbol || 'circle', symbolSize: symbolConfig?.size || 8, itemStyle: { color: symbolConfig?.color, borderColor: symbolConfig?.borderColor, borderWidth: symbolConfig?.borderWidth || 2, }, })); } return { xAxisValues, seriesData: transformedSeries }; }, [metricData, xAxisDataValueKey, seriesDataNameKey, seriesDataValueKey, chartType, stacked, smooth, symbolConfig]); const mergedOptions = useMemo(() => { return { ...chartOptions, xAxis: { ...chartOptions.xAxis, data: formattedChartData.xAxisValues, }, series: formattedChartData.seriesData, }; }, [chartOptions, formattedChartData]); return (_jsx("div", { className: "mt-4", children: _jsx(ReactECharts, { option: mergedOptions, style: { height: chartHeight }, notMerge: notMerge }) })); }; export default ChartFormatter;