common.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { __assign } from "tslib";
  2. import { get, isFunction, isNumber, map, maxBy } from '@antv/util';
  3. import { FUNNEL_CONVERSATION, FUNNEL_MAPPING_VALUE, FUNNEL_PERCENT } from '../constant';
  4. export var CONVERSION_TAG_NAME = 'CONVERSION_TAG_NAME';
  5. /**
  6. * 漏斗图 transform
  7. * @param geometry
  8. */
  9. export function transformData(data, originData, options) {
  10. var formatData = [];
  11. var yField = options.yField, maxSize = options.maxSize, minSize = options.minSize;
  12. var maxYFieldValue = get(maxBy(originData, yField), [yField]);
  13. var max = isNumber(maxSize) ? maxSize : 1;
  14. var min = isNumber(minSize) ? minSize : 0;
  15. // format 数据
  16. formatData = map(data, function (row, index) {
  17. var percent = (row[yField] || 0) / maxYFieldValue;
  18. row[FUNNEL_PERCENT] = percent;
  19. row[FUNNEL_MAPPING_VALUE] = (max - min) * percent + min;
  20. // 转化率数据存储前后数据
  21. row[FUNNEL_CONVERSATION] = [get(data, [index - 1, yField]), row[yField]];
  22. return row;
  23. });
  24. return formatData;
  25. }
  26. /**
  27. * 漏斗图通用转化率组件
  28. * @param getLineCoordinate 用于获取特定的 line 的位置及配置
  29. */
  30. export function conversionTagComponent(getLineCoordinate) {
  31. return function (params) {
  32. var chart = params.chart, options = params.options;
  33. // @ts-ignore
  34. var conversionTag = options.conversionTag, filteredData = options.filteredData;
  35. var data = filteredData || chart.getOptions().data;
  36. if (conversionTag) {
  37. var formatter_1 = conversionTag.formatter;
  38. data.forEach(function (obj, index) {
  39. if (index <= 0 || Number.isNaN(obj[FUNNEL_MAPPING_VALUE]))
  40. return;
  41. var lineOption = getLineCoordinate(obj, index, data, {
  42. top: true,
  43. name: CONVERSION_TAG_NAME,
  44. text: {
  45. content: isFunction(formatter_1) ? formatter_1(obj, data) : formatter_1,
  46. offsetX: conversionTag.offsetX,
  47. offsetY: conversionTag.offsetY,
  48. position: 'end',
  49. autoRotate: false,
  50. style: __assign({ textAlign: 'start', textBaseline: 'middle' }, conversionTag.style),
  51. },
  52. });
  53. chart.annotation().line(lineOption);
  54. });
  55. }
  56. return params;
  57. };
  58. }
  59. //# sourceMappingURL=common.js.map