adaptor.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. import { __assign } from "tslib";
  2. import { get, isFunction } from '@antv/util';
  3. import { animation, interaction, scale, theme, tooltip } from '../../adaptor/common';
  4. import { interval, point } from '../../adaptor/geometries';
  5. import { deepAssign, flow, transformLabel } from '../../utils';
  6. import { transformData } from './utils';
  7. /**
  8. * geometry 处理
  9. * @param params
  10. */
  11. function geometry(params) {
  12. var chart = params.chart, options = params.options;
  13. var bulletStyle = options.bulletStyle, targetField = options.targetField, rangeField = options.rangeField, measureField = options.measureField, xField = options.xField, color = options.color, layout = options.layout, size = options.size, label = options.label;
  14. // 处理数据
  15. var _a = transformData(options), min = _a.min, max = _a.max, ds = _a.ds;
  16. chart.data(ds);
  17. // rangeGeometry
  18. var r = deepAssign({}, params, {
  19. options: {
  20. xField: xField,
  21. yField: rangeField,
  22. seriesField: 'rKey',
  23. isStack: true,
  24. label: get(label, 'range'),
  25. interval: {
  26. color: get(color, 'range'),
  27. style: get(bulletStyle, 'range'),
  28. size: get(size, 'range'),
  29. },
  30. },
  31. });
  32. interval(r);
  33. // 范围值的 tooltip 隐藏掉
  34. chart.geometries[0].tooltip(false);
  35. // measureGeometry
  36. var m = deepAssign({}, params, {
  37. options: {
  38. xField: xField,
  39. yField: measureField,
  40. seriesField: 'mKey',
  41. isStack: true,
  42. label: get(label, 'measure'),
  43. interval: {
  44. color: get(color, 'measure'),
  45. style: get(bulletStyle, 'measure'),
  46. size: get(size, 'measure'),
  47. },
  48. },
  49. });
  50. interval(m);
  51. // targetGeometry
  52. var t = deepAssign({}, params, {
  53. options: {
  54. xField: xField,
  55. yField: targetField,
  56. seriesField: 'tKey',
  57. label: get(label, 'target'),
  58. point: {
  59. color: get(color, 'target'),
  60. style: get(bulletStyle, 'target'),
  61. size: isFunction(get(size, 'target'))
  62. ? function (data) { return get(size, 'target')(data) / 2; }
  63. : get(size, 'target') / 2,
  64. shape: layout === 'horizontal' ? 'line' : 'hyphen',
  65. },
  66. },
  67. });
  68. point(t);
  69. // 水平的时候,要转换坐标轴
  70. if (layout === 'horizontal') {
  71. chart.coordinate().transpose();
  72. }
  73. return __assign(__assign({}, params), { ext: { data: { min: min, max: max } } });
  74. }
  75. /**
  76. * meta 配置
  77. * @param params
  78. */
  79. export function meta(params) {
  80. var _a, _b;
  81. var options = params.options, ext = params.ext;
  82. var xAxis = options.xAxis, yAxis = options.yAxis, targetField = options.targetField, rangeField = options.rangeField, measureField = options.measureField, xField = options.xField;
  83. var extData = ext.data;
  84. return flow(scale((_a = {},
  85. _a[xField] = xAxis,
  86. _a[measureField] = yAxis,
  87. _a), (_b = {},
  88. _b[measureField] = { min: extData === null || extData === void 0 ? void 0 : extData.min, max: extData === null || extData === void 0 ? void 0 : extData.max, sync: true },
  89. _b[targetField] = {
  90. sync: "".concat(measureField),
  91. },
  92. _b[rangeField] = {
  93. sync: "".concat(measureField),
  94. },
  95. _b)))(params);
  96. }
  97. /**
  98. * axis 配置
  99. * @param params
  100. */
  101. function axis(params) {
  102. var chart = params.chart, options = params.options;
  103. var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, measureField = options.measureField, rangeField = options.rangeField, targetField = options.targetField;
  104. chart.axis("".concat(rangeField), false);
  105. chart.axis("".concat(targetField), false);
  106. // 为 false 则是不显示轴
  107. if (xAxis === false) {
  108. chart.axis("".concat(xField), false);
  109. }
  110. else {
  111. chart.axis("".concat(xField), xAxis);
  112. }
  113. if (yAxis === false) {
  114. chart.axis("".concat(measureField), false);
  115. }
  116. else {
  117. chart.axis("".concat(measureField), yAxis);
  118. }
  119. return params;
  120. }
  121. /**
  122. * legend 配置
  123. * @param params
  124. */
  125. function legend(params) {
  126. var chart = params.chart, options = params.options;
  127. var legend = options.legend;
  128. chart.removeInteraction('legend-filter');
  129. // @TODO 后续看是否内部自定义一个 legend
  130. chart.legend(legend);
  131. // 默认关闭掉所在 color 字段的 legend, 从而不影响自定义的legend
  132. chart.legend('rKey', false);
  133. chart.legend('mKey', false);
  134. chart.legend('tKey', false);
  135. return params;
  136. }
  137. /**
  138. * label 配置
  139. * @param params
  140. */
  141. function label(params) {
  142. var chart = params.chart, options = params.options;
  143. var label = options.label, measureField = options.measureField, targetField = options.targetField, rangeField = options.rangeField;
  144. var _a = chart.geometries, rangeGeometry = _a[0], measureGeometry = _a[1], targetGeometry = _a[2];
  145. if (get(label, 'range')) {
  146. rangeGeometry.label("".concat(rangeField), __assign({ layout: [{ type: 'limit-in-plot' }] }, transformLabel(label.range)));
  147. }
  148. else {
  149. rangeGeometry.label(false);
  150. }
  151. if (get(label, 'measure')) {
  152. measureGeometry.label("".concat(measureField), __assign({ layout: [{ type: 'limit-in-plot' }] }, transformLabel(label.measure)));
  153. }
  154. else {
  155. measureGeometry.label(false);
  156. }
  157. if (get(label, 'target')) {
  158. targetGeometry.label("".concat(targetField), __assign({ layout: [{ type: 'limit-in-plot' }] }, transformLabel(label.target)));
  159. }
  160. else {
  161. targetGeometry.label(false);
  162. }
  163. return params;
  164. }
  165. /**
  166. * 子弹图适配器
  167. * @param chart
  168. * @param options
  169. */
  170. export function adaptor(params) {
  171. // flow 的方式处理所有的配置到 G2 API
  172. flow(geometry, meta, axis, legend, theme, label, tooltip, interaction, animation)(params);
  173. }
  174. //# sourceMappingURL=adaptor.js.map