adaptor.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. import { __assign, __spreadArray } from "tslib";
  2. import { get } from '@antv/util';
  3. import { animation, annotation, interaction as baseInteraction, legend, pattern, scale, theme, } from '../../adaptor/common';
  4. import { point } from '../../adaptor/geometries/point';
  5. import { deepAssign, flow } from '../../utils';
  6. import { getAdjustAppendPadding, resolveAllPadding } from '../../utils/padding';
  7. import { RAW_FIELDS } from './constant';
  8. import { resolvePaddingForCircle, transformData } from './utils';
  9. /**
  10. * 获取默认 option
  11. * @param params
  12. */
  13. function defaultOptions(params) {
  14. var chart = params.chart;
  15. var diameter = Math.min(chart.viewBBox.width, chart.viewBBox.height);
  16. return deepAssign({
  17. options: {
  18. size: function (_a) {
  19. var r = _a.r;
  20. return r * diameter;
  21. }, // 当autofit:false时,默认给固定半径
  22. },
  23. }, params);
  24. }
  25. /**
  26. * padding 配置
  27. * @param params
  28. */
  29. function padding(params) {
  30. var options = params.options, chart = params.chart;
  31. // 通过改变 padding,修改 coordinate 的绘制区域
  32. var containerSize = chart.viewBBox;
  33. var padding = options.padding, appendPadding = options.appendPadding, drilldown = options.drilldown;
  34. var tempAppendPadding = appendPadding;
  35. if (drilldown === null || drilldown === void 0 ? void 0 : drilldown.enabled) {
  36. var appendPaddingByDrilldown = getAdjustAppendPadding(chart.appendPadding, get(drilldown, ['breadCrumb', 'position']));
  37. tempAppendPadding = resolveAllPadding([appendPaddingByDrilldown, appendPadding]);
  38. }
  39. var finalPadding = resolvePaddingForCircle(padding, tempAppendPadding, containerSize).finalPadding;
  40. chart.padding = finalPadding;
  41. chart.appendPadding = 0;
  42. return params;
  43. }
  44. /**
  45. * 字段
  46. * @param params
  47. */
  48. function geometry(params) {
  49. var chart = params.chart, options = params.options;
  50. var padding = chart.padding, appendPadding = chart.appendPadding;
  51. var color = options.color, colorField = options.colorField, pointStyle = options.pointStyle, hierarchyConfig = options.hierarchyConfig, sizeField = options.sizeField, _a = options.rawFields, rawFields = _a === void 0 ? [] : _a, drilldown = options.drilldown;
  52. var data = transformData({
  53. data: options.data,
  54. hierarchyConfig: hierarchyConfig,
  55. enableDrillDown: drilldown === null || drilldown === void 0 ? void 0 : drilldown.enabled,
  56. rawFields: rawFields,
  57. });
  58. chart.data(data);
  59. var containerSize = chart.viewBBox;
  60. var finalSize = resolvePaddingForCircle(padding, appendPadding, containerSize).finalSize;
  61. // 有sizeField的时候,例如 value ,可以选择映射 size 函数,自己计算出映射的半径
  62. var circleSize = function (_a) {
  63. var r = _a.r;
  64. return r * finalSize;
  65. }; // 默认配置
  66. if (sizeField) {
  67. circleSize = function (d) { return d[sizeField] * finalSize; }; // 目前只有 r 通道映射效果会正常
  68. }
  69. // geometry
  70. point(deepAssign({}, params, {
  71. options: {
  72. xField: 'x',
  73. yField: 'y',
  74. seriesField: colorField,
  75. sizeField: sizeField,
  76. rawFields: __spreadArray(__spreadArray([], RAW_FIELDS, true), rawFields, true),
  77. point: {
  78. color: color,
  79. style: pointStyle,
  80. shape: 'circle',
  81. size: circleSize,
  82. },
  83. },
  84. }));
  85. return params;
  86. }
  87. /**
  88. * meta 配置
  89. * @param params
  90. */
  91. export function meta(params) {
  92. return flow(scale({}, {
  93. // 必须强制为 nice
  94. x: { min: 0, max: 1, minLimit: 0, maxLimit: 1, nice: true },
  95. y: { min: 0, max: 1, minLimit: 0, maxLimit: 1, nice: true },
  96. }))(params);
  97. }
  98. /**
  99. * tooltip 配置
  100. * @param params
  101. */
  102. function tooltip(params) {
  103. var chart = params.chart, options = params.options;
  104. var tooltip = options.tooltip;
  105. if (tooltip === false) {
  106. chart.tooltip(false);
  107. }
  108. else {
  109. var tooltipOptions = tooltip;
  110. // 设置了 fields,就不进行 customItems 了; 设置 formatter 时,需要搭配 fields
  111. if (!get(tooltip, 'fields')) {
  112. tooltipOptions = deepAssign({}, {
  113. customItems: function (items) {
  114. return items.map(function (item) {
  115. var scales = get(chart.getOptions(), 'scales');
  116. var nameFormatter = get(scales, ['name', 'formatter'], function (v) { return v; });
  117. var valueFormatter = get(scales, ['value', 'formatter'], function (v) { return v; });
  118. return __assign(__assign({}, item), { name: nameFormatter(item.data.name), value: valueFormatter(item.data.value) });
  119. });
  120. },
  121. }, tooltipOptions);
  122. }
  123. chart.tooltip(tooltipOptions);
  124. }
  125. return params;
  126. }
  127. /**
  128. * 坐标轴, 默认关闭
  129. * @param params
  130. */
  131. function axis(params) {
  132. var chart = params.chart;
  133. chart.axis(false);
  134. return params;
  135. }
  136. function adaptorInteraction(options) {
  137. var drilldown = options.drilldown, _a = options.interactions, interactions = _a === void 0 ? [] : _a;
  138. if (drilldown === null || drilldown === void 0 ? void 0 : drilldown.enabled) {
  139. return deepAssign({}, options, {
  140. interactions: __spreadArray(__spreadArray([], interactions, true), [
  141. {
  142. type: 'drill-down',
  143. cfg: { drillDownConfig: drilldown, transformData: transformData, enableDrillDown: true },
  144. },
  145. ], false),
  146. });
  147. }
  148. return options;
  149. }
  150. /**
  151. * 交互配置
  152. * @param params
  153. * @returns
  154. */
  155. function interaction(params) {
  156. var chart = params.chart, options = params.options;
  157. baseInteraction({
  158. chart: chart,
  159. options: adaptorInteraction(options),
  160. });
  161. return params;
  162. }
  163. /**
  164. * 矩形树图
  165. * @param chart
  166. * @param options
  167. */
  168. export function adaptor(params) {
  169. return flow(pattern('pointStyle'), defaultOptions, padding, theme, meta, geometry, axis, legend, tooltip, interaction, animation, annotation())(params);
  170. }
  171. //# sourceMappingURL=adaptor.js.map