import { getFormated } from '../../utils' import { itemPoint } from '../../constants' function getTooltip (args) { const { itemDataType, linksDataType, digit } = args return { trigger: 'item', formatter (item) { const tpl = [] const { name, data, value, color } = item tpl.push(itemPoint(color)) tpl.push(`${name} : `) if (data && data.source) { tpl.push(`${getFormated(value, linksDataType, digit)}
`) } else { tpl.push(`${getFormated(value, itemDataType, digit)}
`) } return tpl.join('') } } } function getSeries (args) { const { rows, dimension, metrics, links, valueFull, useDataValue, label, itemStyle, lineStyle } = args const dataMap = {} const seriesData = rows.map(row => { dataMap[row[dimension]] = row[metrics] return { name: row[dimension], value: row[metrics] } }) let innerLinks = null if (useDataValue) { innerLinks = links.map(link => { return Object.assign({}, link, { value: dataMap[link.target] }) }) } else if (!valueFull) { innerLinks = links.map(link => { return link.value == null ? Object.assign({}, link, { value: dataMap[link.target] }) : link }) } else { innerLinks = links } const result = { type: 'sankey', data: seriesData, links: innerLinks } if (label) result.label = label if (itemStyle) result.itemStyle = itemStyle if (lineStyle) result.lineStyle = lineStyle return [result] } export const sankey = (columns, rows, settings, extra) => { const { links, dimension = columns[0], metrics = columns[1], dataType = ['normal', 'normal'], digit = 2, valueFull = false, useDataValue = false, label, itemStyle, lineStyle } = settings if (!links) { console.warn('links is needed in settings!') return } const itemDataType = dataType[0] const linksDataType = dataType[1] const tooltip = getTooltip({ itemDataType, linksDataType, digit }) const series = getSeries({ rows, dimension, metrics, links, valueFull, useDataValue, label, itemStyle, lineStyle }) return { tooltip, series } }