adaptor.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. import { __assign } from "tslib";
  2. import { isArray } from '@antv/util';
  3. import { animation, annotation, interaction, theme, tooltip } from '../../adaptor/common';
  4. import { point, schema } from '../../adaptor/geometries';
  5. import { AXIS_META_CONFIG_KEYS } from '../../constant';
  6. import { deepAssign, flow, pick } from '../../utils';
  7. import { BOX_RANGE, BOX_SYNC_NAME, OUTLIERS_VIEW_ID } from './constant';
  8. import { transformData } from './utils';
  9. /**
  10. * 字段
  11. * @param params
  12. */
  13. function field(params) {
  14. var chart = params.chart, options = params.options;
  15. var xField = options.xField, yField = options.yField, groupField = options.groupField, color = options.color, tooltip = options.tooltip, boxStyle = options.boxStyle;
  16. chart.data(transformData(options.data, yField));
  17. var yFieldName = isArray(yField) ? BOX_RANGE : yField;
  18. var rawFields = yField ? (isArray(yField) ? yField : [yField]) : [];
  19. var tooltipOptions = tooltip;
  20. if (tooltipOptions !== false) {
  21. tooltipOptions = deepAssign({}, { fields: isArray(yField) ? yField : [] }, tooltipOptions);
  22. }
  23. var ext = schema(deepAssign({}, params, {
  24. options: {
  25. xField: xField,
  26. yField: yFieldName,
  27. seriesField: groupField,
  28. tooltip: tooltipOptions,
  29. rawFields: rawFields,
  30. // 只有异常点视图展示 label
  31. label: false,
  32. schema: {
  33. shape: 'box',
  34. color: color,
  35. style: boxStyle,
  36. },
  37. },
  38. })).ext;
  39. if (groupField) {
  40. ext.geometry.adjust('dodge');
  41. }
  42. return params;
  43. }
  44. /**
  45. * 创建异常点 view
  46. */
  47. function outliersPoint(params) {
  48. var chart = params.chart, options = params.options;
  49. var xField = options.xField, data = options.data, outliersField = options.outliersField, outliersStyle = options.outliersStyle, padding = options.padding, label = options.label;
  50. if (!outliersField)
  51. return params;
  52. var outliersView = chart.createView({ padding: padding, id: OUTLIERS_VIEW_ID });
  53. var outliersViewData = data.reduce(function (ret, datum) {
  54. var outliersData = datum[outliersField];
  55. outliersData.forEach(function (d) {
  56. var _a;
  57. return ret.push(__assign(__assign({}, datum), (_a = {}, _a[outliersField] = d, _a)));
  58. });
  59. return ret;
  60. }, []);
  61. outliersView.data(outliersViewData);
  62. point({
  63. chart: outliersView,
  64. options: {
  65. xField: xField,
  66. yField: outliersField,
  67. point: { shape: 'circle', style: outliersStyle },
  68. label: label,
  69. },
  70. });
  71. outliersView.axis(false);
  72. return params;
  73. }
  74. /**
  75. * meta 配置
  76. * @param params
  77. */
  78. function meta(params) {
  79. var _a, _b;
  80. var chart = params.chart, options = params.options;
  81. var meta = options.meta, xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField, outliersField = options.outliersField;
  82. var yFieldName = Array.isArray(yField) ? BOX_RANGE : yField;
  83. var baseMeta = {};
  84. // make yField and outliersField share y mate
  85. if (outliersField) {
  86. var syncName = BOX_SYNC_NAME;
  87. baseMeta = (_a = {},
  88. _a[outliersField] = { sync: syncName, nice: true },
  89. _a[yFieldName] = { sync: syncName, nice: true },
  90. _a);
  91. }
  92. var scales = deepAssign(baseMeta, meta, (_b = {},
  93. _b[xField] = pick(xAxis, AXIS_META_CONFIG_KEYS),
  94. _b[yFieldName] = pick(yAxis, AXIS_META_CONFIG_KEYS),
  95. _b));
  96. chart.scale(scales);
  97. return params;
  98. }
  99. /**
  100. * axis 配置
  101. * @param params
  102. */
  103. function axis(params) {
  104. var chart = params.chart, options = params.options;
  105. var xAxis = options.xAxis, yAxis = options.yAxis, xField = options.xField, yField = options.yField;
  106. var yFieldName = Array.isArray(yField) ? BOX_RANGE : yField;
  107. // 为 false 则是不显示轴
  108. if (xAxis === false) {
  109. chart.axis(xField, false);
  110. }
  111. else {
  112. chart.axis(xField, xAxis);
  113. }
  114. if (yAxis === false) {
  115. chart.axis(BOX_RANGE, false);
  116. }
  117. else {
  118. chart.axis(yFieldName, yAxis);
  119. }
  120. return params;
  121. }
  122. /**
  123. * legend 配置
  124. * @param params
  125. */
  126. export function legend(params) {
  127. var chart = params.chart, options = params.options;
  128. var legend = options.legend, groupField = options.groupField;
  129. if (groupField) {
  130. if (legend) {
  131. chart.legend(groupField, legend);
  132. }
  133. else {
  134. // Grouped Box Chart default has legend, and it's position is `bottom`
  135. chart.legend(groupField, { position: 'bottom' });
  136. }
  137. }
  138. else {
  139. chart.legend(false);
  140. }
  141. return params;
  142. }
  143. /**
  144. * 箱型图适配器
  145. * @param params
  146. */
  147. export function adaptor(params) {
  148. return flow(field, outliersPoint, meta, axis, legend, tooltip, annotation(), interaction, animation, theme)(params);
  149. }
  150. //# sourceMappingURL=adaptor.js.map