import defaultsDeep from 'lodash/defaultsDeep'; import { ChartsOptionProps } from '../Charts'; import { getMarker, getSymbol } from './symbol'; /** * Returns a custom legend tooltip for Line charts * * @param series * @param option * @param echart * @private Not intended as public API and subject to change */ export const getLegendTooltip = (series: any[], option: ChartsOptionProps, echart: any) => { const tooltip = option?.tooltip as any; const valueFormatter = tooltip?.valueFormatter ? tooltip.valueFormatter : (value: number | string) => value; const defaults = { confine: true, formatter: (params: any) => { let result = ''; params?.map((param, index) => { if (index === 0) { result += `
${param.name}
`; } const symbol = getSymbol(series, param.seriesIndex, echart); const marker = getMarker(series[param.seriesIndex], symbol, param.color); const formattedValue = valueFormatter(param.value, param.dataIndex); const seriesName = `${param.seriesName}`; const value = `${formattedValue}`; result += `${marker}${seriesName}${value}
`; }); return result; }, trigger: 'axis' }; return defaultsDeep(tooltip, defaults); }; /** * Returns source and target colors from given series * * @param series * @param formatterParams * @private Not intended as public API and subject to change */ const getItemColor = (series: any[], formatterParams: any) => { const serie = series[formatterParams.seriesIndex]; const sourceData = serie?.data.find((datum: any) => datum.name === formatterParams.data?.source); const targetData = serie?.data.find((datum: any) => datum.name === formatterParams.data?.target); const sourceColor = sourceData?.itemStyle?.color; const targetColor = targetData?.itemStyle?.color; return { sourceColor, targetColor }; }; /** * Returns a custom legend tooltip for Sankey chart * * @param series * @param option * @private Not intended as public API and subject to change */ export const getSankeyTooltip = (series: any[], option: ChartsOptionProps) => { const symbolSize = '10px'; const tooltip = option?.tooltip as any; const sourceLabel = tooltip?.sourceLabel ? tooltip.sourceLabel : ''; const destinationLabel = tooltip?.destinationLabel ? tooltip.destinationLabel : ''; const valueFormatter = tooltip?.valueFormatter ? tooltip.valueFormatter : (value: number | string) => value; const defaults = { confine: true, formatter: (params: any) => { let result; if (params?.data?.source && params?.data?.target) { const { sourceColor, targetColor } = getItemColor(series, params); result = `${sourceLabel}
${params.data.source}${destinationLabel}
${params.data.target} ${valueFormatter(params.value, params.dataIndex)} `; } else { result = ` ${params.name} ${valueFormatter(params.value, params.dataIndex)} `; } return result.replace(/\s\s+/g, ' '); }, trigger: 'item', triggerOn: 'mousemove' }; return defaultsDeep(tooltip, defaults); };