{"version":3,"file":"dynamic-height.js","sourceRoot":"","sources":["../../../../src/plots/funnel/geometries/dynamic-height.ts"],"names":[],"mappings":"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","sourcesContent":["import { Types } from '@antv/g2';\nimport { get, isArray, map, maxBy, reduce } from '@antv/util';\nimport { geometry as baseGeometry } from '../../../adaptor/geometries/base';\nimport { Params } from '../../../core/adaptor';\nimport { Data, Datum } from '../../../types/common';\nimport { flow } from '../../../utils';\nimport { getTooltipMapping } from '../../../utils/tooltip';\nimport { FUNNEL_CONVERSATION, FUNNEL_PERCENT, FUNNEL_TOTAL_PERCENT, PLOYGON_X, PLOYGON_Y } from '../constant';\nimport { FunnelOptions } from '../types';\nimport { conversionTagComponent } from './common';\n\n/**\n * 动态高度漏斗图\n * @param params\n * 需求: 每个漏斗项的高度根据 yfield 等比生成。漏斗上下宽度比为2,即斜率为 2。\n * 实现方式: 使用 g2 多边形,data -> 点坐标 -> 绘制\n * 以漏斗底部中心点为坐标轴原点,漏斗在 -0.5 <= x <= 0.5, 0 <= y <= 1 的正方形中绘制\n * 先计算第一象限的点, 第二象限的点即为镜像 x 轴取反。\n * 第一象限共需计算 data.length + 1 个点,在 y = 4x - 1 上。首尾分别是[0.5, 1], [0.25, 0]。根据 data 计算出 y 值,从而得到 y 值\n */\n\n/**\n * 处理数据\n * @param params\n */\nfunction field(params: Params): Params {\n const { chart, options } = params;\n const { data = [], yField } = options;\n\n // 计算各数据项所占高度\n const sum = reduce(\n data,\n (total, item) => {\n return total + (item[yField] || 0);\n },\n 0\n );\n\n const max = maxBy(data, yField)[yField];\n\n const formatData = map(data, (row, index) => {\n // 储存四个点 x,y 坐标,方向为顺时针,即 [左上, 右上,右下,左下]\n const x = [];\n const y = [];\n\n row[FUNNEL_TOTAL_PERCENT] = (row[yField] || 0) / sum;\n\n // 获取左上角,右上角坐标\n if (index) {\n const preItemX = data[index - 1][PLOYGON_X];\n const preItemY = data[index - 1][PLOYGON_Y];\n x[0] = preItemX[3];\n y[0] = preItemY[3];\n x[1] = preItemX[2];\n y[1] = preItemY[2];\n } else {\n x[0] = -0.5;\n y[0] = 1;\n x[1] = 0.5;\n y[1] = 1;\n }\n\n // 获取右下角坐标\n y[2] = y[1] - row[FUNNEL_TOTAL_PERCENT];\n x[2] = (y[2] + 1) / 4;\n y[3] = y[2];\n x[3] = -x[2];\n\n // 赋值\n row[PLOYGON_X] = x;\n row[PLOYGON_Y] = y;\n row[FUNNEL_PERCENT] = (row[yField] || 0) / max;\n row[FUNNEL_CONVERSATION] = [get(data, [index - 1, yField]), row[yField]];\n return row;\n });\n\n chart.data(formatData);\n\n return params;\n}\n\n/**\n * geometry处理\n * @param params\n */\nfunction geometry(params: Params): Params {\n const { chart, options } = params;\n const { xField, yField, color, tooltip, label, funnelStyle, state } = options;\n\n const { fields, formatter } = getTooltipMapping(tooltip, [xField, yField]);\n // 绘制漏斗图\n baseGeometry({\n chart,\n options: {\n type: 'polygon',\n xField: PLOYGON_X,\n yField: PLOYGON_Y,\n colorField: xField,\n tooltipFields: isArray(fields) && fields.concat([FUNNEL_PERCENT, FUNNEL_CONVERSATION]),\n label,\n state,\n mapping: {\n tooltip: formatter,\n color,\n style: funnelStyle,\n },\n },\n });\n return params;\n}\n\n/**\n * 转置处理\n * @param params\n */\nfunction transpose(params: Params): Params {\n const { chart, options } = params;\n const { isTransposed } = options;\n chart.coordinate({\n type: 'rect',\n actions: isTransposed ? [['transpose'], ['reflect', 'x']] : [],\n });\n return params;\n}\n\n/**\n * 转化率组件\n * @param params\n */\nfunction conversionTag(params: Params): Params {\n const getLineCoordinate = (\n datum: Datum,\n datumIndex: number,\n data: Data,\n initLineOption: Record\n ): Types.LineOption => {\n return {\n ...initLineOption,\n start: [datum[PLOYGON_X][1], datum[PLOYGON_Y][1]],\n end: [datum[PLOYGON_X][1] + 0.05, datum[PLOYGON_Y][1]],\n };\n };\n\n conversionTagComponent(getLineCoordinate)(params);\n\n return params;\n}\n\n/**\n * 动态高度漏斗\n * @param chart\n * @param options\n */\nexport function dynamicHeightFunnel(params: Params) {\n return flow(field, geometry, transpose, conversionTag)(params);\n}\n"]}