adaptor.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. import { __assign, __rest, __spreadArray } from "tslib";
  2. import { get, isFunction, uniq } from '@antv/util';
  3. import { animation, annotation, interaction as baseInteraction, legend, pattern, scale, theme, } from '../../adaptor/common';
  4. import { polygon as polygonAdaptor } from '../../adaptor/geometries';
  5. import { deepAssign, findGeometry, flow, transformLabel } from '../../utils';
  6. import { getAdjustAppendPadding } from '../../utils/padding';
  7. import { RAW_FIELDS, SUNBURST_ANCESTOR_FIELD, SUNBURST_PATH_FIELD, SUNBURST_Y_FIELD } from './constant';
  8. import { transformData } from './utils';
  9. /**
  10. * geometry 配置处理
  11. * @param params
  12. */
  13. function geometry(params) {
  14. var chart = params.chart, options = params.options;
  15. var color = options.color, _a = options.colorField, colorField = _a === void 0 ? SUNBURST_ANCESTOR_FIELD : _a, sunburstStyle = options.sunburstStyle, _b = options.rawFields, rawFields = _b === void 0 ? [] : _b, shape = options.shape;
  16. var data = transformData(options);
  17. chart.data(data);
  18. // 特殊处理下样式,如果没有设置 fillOpacity 的时候,默认根据层级进行填充透明度
  19. var style;
  20. if (sunburstStyle) {
  21. style = function (datum) {
  22. return deepAssign({}, {
  23. fillOpacity: Math.pow(0.85, datum.depth),
  24. }, isFunction(sunburstStyle) ? sunburstStyle(datum) : sunburstStyle);
  25. };
  26. }
  27. // geometry
  28. polygonAdaptor(deepAssign({}, params, {
  29. options: {
  30. xField: 'x',
  31. yField: 'y',
  32. seriesField: colorField,
  33. rawFields: uniq(__spreadArray(__spreadArray([], RAW_FIELDS, true), rawFields, true)),
  34. polygon: {
  35. color: color,
  36. style: style,
  37. shape: shape,
  38. },
  39. },
  40. }));
  41. return params;
  42. }
  43. /**
  44. * axis 配置
  45. * @param params
  46. */
  47. export function axis(params) {
  48. var chart = params.chart;
  49. chart.axis(false);
  50. return params;
  51. }
  52. /**
  53. * 数据标签
  54. * @param params
  55. */
  56. function label(params) {
  57. var chart = params.chart, options = params.options;
  58. var label = options.label;
  59. var geometry = findGeometry(chart, 'polygon');
  60. // 默认不展示,undefined 也不展示
  61. if (!label) {
  62. geometry.label(false);
  63. }
  64. else {
  65. var _a = label.fields, fields = _a === void 0 ? ['name'] : _a, callback = label.callback, cfg = __rest(label, ["fields", "callback"]);
  66. geometry.label({
  67. fields: fields,
  68. callback: callback,
  69. cfg: transformLabel(cfg),
  70. });
  71. }
  72. return params;
  73. }
  74. /**
  75. * coord 配置
  76. * @param params
  77. */
  78. function coordinate(params) {
  79. var chart = params.chart, options = params.options;
  80. var innerRadius = options.innerRadius, radius = options.radius, reflect = options.reflect;
  81. var coord = chart.coordinate({
  82. type: 'polar',
  83. cfg: {
  84. innerRadius: innerRadius,
  85. radius: radius,
  86. },
  87. });
  88. if (reflect) {
  89. coord.reflect(reflect);
  90. }
  91. return params;
  92. }
  93. /**
  94. * meta 配置
  95. * @param params
  96. */
  97. export function meta(params) {
  98. var _a;
  99. var options = params.options;
  100. var hierarchyConfig = options.hierarchyConfig, meta = options.meta;
  101. return flow(scale({}, (_a = {},
  102. _a[SUNBURST_Y_FIELD] = get(meta, get(hierarchyConfig, ['field'], 'value')),
  103. _a)))(params);
  104. }
  105. /**
  106. * tooltip 配置
  107. * @param params
  108. */
  109. export function tooltip(params) {
  110. var chart = params.chart, options = params.options;
  111. var tooltip = options.tooltip;
  112. if (tooltip === false) {
  113. chart.tooltip(false);
  114. }
  115. else {
  116. var tooltipOptions = tooltip;
  117. // 设置了 fields,就不进行 customItems 了; 设置 formatter 时,需要搭配 fields
  118. if (!get(tooltip, 'fields')) {
  119. tooltipOptions = deepAssign({}, {
  120. customItems: function (items) {
  121. return items.map(function (item) {
  122. var scales = get(chart.getOptions(), 'scales');
  123. var pathFormatter = get(scales, [SUNBURST_PATH_FIELD, 'formatter'], function (v) { return v; });
  124. var valueFormatter = get(scales, [SUNBURST_Y_FIELD, 'formatter'], function (v) { return v; });
  125. return __assign(__assign({}, item), { name: pathFormatter(item.data[SUNBURST_PATH_FIELD]), value: valueFormatter(item.data.value) });
  126. });
  127. },
  128. }, tooltipOptions);
  129. }
  130. chart.tooltip(tooltipOptions);
  131. }
  132. return params;
  133. }
  134. function adaptorInteraction(options) {
  135. var drilldown = options.drilldown, _a = options.interactions, interactions = _a === void 0 ? [] : _a;
  136. if (drilldown === null || drilldown === void 0 ? void 0 : drilldown.enabled) {
  137. return deepAssign({}, options, {
  138. interactions: __spreadArray(__spreadArray([], interactions, true), [
  139. {
  140. type: 'drill-down',
  141. cfg: { drillDownConfig: drilldown, transformData: transformData },
  142. },
  143. ], false),
  144. });
  145. }
  146. return options;
  147. }
  148. /**
  149. * 交互配置
  150. * @param params
  151. * @returns
  152. */
  153. function interaction(params) {
  154. var chart = params.chart, options = params.options;
  155. var drilldown = options.drilldown;
  156. baseInteraction({
  157. chart: chart,
  158. options: adaptorInteraction(options),
  159. });
  160. // 适应下钻交互面包屑
  161. if (drilldown === null || drilldown === void 0 ? void 0 : drilldown.enabled) {
  162. // 为面包屑留出 25px 的空间
  163. chart.appendPadding = getAdjustAppendPadding(chart.appendPadding, get(drilldown, ['breadCrumb', 'position']));
  164. }
  165. return params;
  166. }
  167. /**
  168. * 旭日图适配器
  169. * @param chart
  170. * @param options
  171. */
  172. export function adaptor(params) {
  173. // flow 的方式处理所有的配置到 G2 API
  174. return flow(theme, pattern('sunburstStyle'), geometry, axis, meta, legend, coordinate, tooltip, label, interaction, animation, annotation())(params);
  175. }
  176. //# sourceMappingURL=adaptor.js.map