compare.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.compareFunnel = exports.compareConversionTag = void 0;
  4. var util_1 = require("@antv/util");
  5. var base_1 = require("../../../adaptor/geometries/base");
  6. var utils_1 = require("../../../utils");
  7. var tooltip_1 = require("../../../utils/tooltip");
  8. var constant_1 = require("../constant");
  9. var common_1 = require("./common");
  10. /**
  11. * 处理字段数据
  12. * @param params
  13. */
  14. function field(params) {
  15. var _a;
  16. var chart = params.chart, options = params.options;
  17. var _b = options.data, data = _b === void 0 ? [] : _b, yField = options.yField;
  18. // 绘制漏斗图
  19. chart.data(data);
  20. chart.scale((_a = {},
  21. _a[yField] = {
  22. sync: true,
  23. },
  24. _a));
  25. return params;
  26. }
  27. /**
  28. * geometry处理
  29. * @param params
  30. */
  31. function geometry(params) {
  32. var chart = params.chart, options = params.options;
  33. var data = options.data, xField = options.xField, yField = options.yField, color = options.color, compareField = options.compareField, isTransposed = options.isTransposed, tooltip = options.tooltip, maxSize = options.maxSize, minSize = options.minSize, label = options.label, funnelStyle = options.funnelStyle, state = options.state, showFacetTitle = options.showFacetTitle;
  34. chart.facet('mirror', {
  35. fields: [compareField],
  36. // 漏斗图的转置规则与分面相反,默认是垂直布局
  37. transpose: !isTransposed,
  38. padding: isTransposed ? 0 : [32, 0, 0, 0],
  39. showTitle: showFacetTitle,
  40. eachView: function (view, facet) {
  41. var index = isTransposed ? facet.rowIndex : facet.columnIndex;
  42. if (!isTransposed) {
  43. view.coordinate({
  44. type: 'rect',
  45. actions: [['transpose'], ['scale', index === 0 ? -1 : 1, -1]],
  46. });
  47. }
  48. var formatterData = (0, common_1.transformData)(facet.data, data, {
  49. yField: yField,
  50. maxSize: maxSize,
  51. minSize: minSize,
  52. });
  53. view.data(formatterData);
  54. // 绘制图形
  55. var _a = (0, tooltip_1.getTooltipMapping)(tooltip, [xField, yField, compareField]), fields = _a.fields, formatter = _a.formatter;
  56. var defaultFacetLabel = isTransposed
  57. ? {
  58. offset: index === 0 ? 10 : -23,
  59. position: (index === 0 ? 'bottom' : 'top'),
  60. }
  61. : {
  62. offset: 10,
  63. position: 'left',
  64. style: {
  65. textAlign: index === 0 ? 'end' : 'start',
  66. },
  67. };
  68. (0, base_1.geometry)({
  69. chart: view,
  70. options: {
  71. type: 'interval',
  72. xField: xField,
  73. yField: constant_1.FUNNEL_MAPPING_VALUE,
  74. colorField: xField,
  75. tooltipFields: (0, util_1.isArray)(fields) && fields.concat([constant_1.FUNNEL_PERCENT, constant_1.FUNNEL_CONVERSATION]),
  76. mapping: {
  77. // todo 暂时不提供 金字塔 shape,后续需要自定义下形状
  78. shape: 'funnel',
  79. tooltip: formatter,
  80. color: color,
  81. style: funnelStyle,
  82. },
  83. label: label === false ? false : (0, utils_1.deepAssign)({}, defaultFacetLabel, label),
  84. state: state,
  85. },
  86. });
  87. },
  88. });
  89. return params;
  90. }
  91. function compareConversionTag(params) {
  92. // @ts-ignore
  93. var chart = params.chart, index = params.index, options = params.options;
  94. var conversionTag = options.conversionTag, isTransposed = options.isTransposed;
  95. ((0, util_1.isNumber)(index) ? [chart] : chart.views).forEach(function (view, viewIndex) {
  96. // 获取形状位置,再转化为需要的转化率位置
  97. var dataArray = (0, util_1.get)(view, ['geometries', '0', 'dataArray'], []);
  98. var size = (0, util_1.get)(view, ['options', 'data', 'length']);
  99. var x = (0, util_1.map)(dataArray, function (item) { return (0, util_1.get)(item, ['0', 'nextPoints', '0', 'x']) * size - 0.5; });
  100. var getLineCoordinate = function (datum, datumIndex, data, initLineOption) {
  101. var ratio = (index || viewIndex) === 0 ? -1 : 1;
  102. return (0, utils_1.deepAssign)({}, initLineOption, {
  103. start: [x[datumIndex - 1] || datumIndex - 0.5, datum[constant_1.FUNNEL_MAPPING_VALUE]],
  104. end: [x[datumIndex - 1] || datumIndex - 0.5, datum[constant_1.FUNNEL_MAPPING_VALUE] + 0.05],
  105. text: isTransposed
  106. ? {
  107. style: {
  108. textAlign: 'start',
  109. },
  110. }
  111. : {
  112. offsetX: conversionTag !== false ? ratio * conversionTag.offsetX : 0,
  113. style: {
  114. textAlign: (index || viewIndex) === 0 ? 'end' : 'start',
  115. },
  116. },
  117. });
  118. };
  119. (0, common_1.conversionTagComponent)(getLineCoordinate)((0, utils_1.deepAssign)({}, {
  120. chart: view,
  121. options: options,
  122. }));
  123. });
  124. }
  125. exports.compareConversionTag = compareConversionTag;
  126. /**
  127. * 转化率组件
  128. * @param params
  129. */
  130. function conversionTag(params) {
  131. var chart = params.chart;
  132. // @ts-ignore
  133. chart.once('beforepaint', function () { return compareConversionTag(params); });
  134. return params;
  135. }
  136. /**
  137. * 对比漏斗
  138. * @param chart
  139. * @param options
  140. */
  141. function compareFunnel(params) {
  142. return (0, utils_1.flow)(field, geometry, conversionTag)(params);
  143. }
  144. exports.compareFunnel = compareFunnel;
  145. //# sourceMappingURL=compare.js.map