adaptor.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.adaptor = exports.statistic = void 0;
  4. var tslib_1 = require("tslib");
  5. var util_1 = require("@antv/util");
  6. var common_1 = require("../../adaptor/common");
  7. var geometries_1 = require("../../adaptor/geometries");
  8. var constant_1 = require("../../constant");
  9. var utils_1 = require("../../utils");
  10. var constants_1 = require("./constants");
  11. var utils_2 = require("./utils");
  12. /**
  13. * geometry 处理
  14. * @param params
  15. */
  16. function geometry(params) {
  17. var chart = params.chart, options = params.options;
  18. var percent = options.percent, range = options.range, radius = options.radius, innerRadius = options.innerRadius, startAngle = options.startAngle, endAngle = options.endAngle, axis = options.axis, indicator = options.indicator, gaugeStyle = options.gaugeStyle, type = options.type, meter = options.meter;
  19. var color = range.color, rangeWidth = range.width;
  20. // 指标 & 指针
  21. // 如果开启在应用
  22. if (indicator) {
  23. var indicatorData = (0, utils_2.getIndicatorData)(percent);
  24. var v1 = chart.createView({ id: constants_1.INDICATEOR_VIEW_ID });
  25. v1.data(indicatorData);
  26. v1.point()
  27. .position("".concat(constants_1.PERCENT, "*1"))
  28. .shape(indicator.shape || 'gauge-indicator')
  29. // 传入指针的样式到自定义 shape 中
  30. .customInfo({
  31. defaultColor: chart.getTheme().defaultColor,
  32. indicator: indicator,
  33. });
  34. v1.coordinate('polar', {
  35. startAngle: startAngle,
  36. endAngle: endAngle,
  37. radius: innerRadius * radius, // 外部的 innerRadius * radius = 这里的 radius
  38. });
  39. v1.axis(constants_1.PERCENT, axis);
  40. // 一部分应用到 scale 中
  41. v1.scale(constants_1.PERCENT, (0, utils_1.pick)(axis, constant_1.AXIS_META_CONFIG_KEYS));
  42. }
  43. // 辅助 range
  44. // [{ range: 1, type: '0', percent: 原始进度百分比 }]
  45. var rangeData = (0, utils_2.getRangeData)(percent, options.range);
  46. var v2 = chart.createView({ id: constants_1.RANGE_VIEW_ID });
  47. v2.data(rangeData);
  48. var rangeColor = (0, util_1.isString)(color) ? [color, constants_1.DEFAULT_COLOR] : color;
  49. var ext = (0, geometries_1.interval)({
  50. chart: v2,
  51. options: {
  52. xField: '1',
  53. yField: constants_1.RANGE_VALUE,
  54. seriesField: constants_1.RANGE_TYPE,
  55. rawFields: [constants_1.PERCENT],
  56. isStack: true,
  57. interval: {
  58. color: rangeColor,
  59. style: gaugeStyle,
  60. shape: type === 'meter' ? 'meter-gauge' : null,
  61. },
  62. args: {
  63. zIndexReversed: true,
  64. sortZIndex: true,
  65. },
  66. minColumnWidth: rangeWidth,
  67. maxColumnWidth: rangeWidth,
  68. },
  69. }).ext;
  70. var geometry = ext.geometry;
  71. // 传入到自定义 shape 中
  72. geometry.customInfo({ meter: meter });
  73. v2.coordinate('polar', {
  74. innerRadius: innerRadius,
  75. radius: radius,
  76. startAngle: startAngle,
  77. endAngle: endAngle,
  78. }).transpose();
  79. return params;
  80. }
  81. /**
  82. * meta 配置
  83. * @param params
  84. */
  85. function meta(params) {
  86. var _a;
  87. return (0, utils_1.flow)((0, common_1.scale)((_a = {
  88. range: {
  89. min: 0,
  90. max: 1,
  91. maxLimit: 1,
  92. minLimit: 0,
  93. }
  94. },
  95. _a[constants_1.PERCENT] = {},
  96. _a)))(params);
  97. }
  98. /**
  99. * 统计指标文档
  100. * @param params
  101. */
  102. function statistic(params, updated) {
  103. var chart = params.chart, options = params.options;
  104. var statistic = options.statistic, percent = options.percent;
  105. // 先清空标注,再重新渲染
  106. chart.getController('annotation').clear(true);
  107. if (statistic) {
  108. var contentOption = statistic.content;
  109. var transformContent = void 0;
  110. // 当设置 content 的时候,设置默认样式
  111. if (contentOption) {
  112. transformContent = (0, utils_1.deepAssign)({}, {
  113. content: "".concat((percent * 100).toFixed(2), "%"),
  114. style: {
  115. opacity: 0.75,
  116. fontSize: '30px',
  117. lineHeight: 1,
  118. textAlign: 'center',
  119. color: 'rgba(44,53,66,0.85)',
  120. },
  121. }, contentOption);
  122. }
  123. (0, utils_1.renderGaugeStatistic)(chart, { statistic: tslib_1.__assign(tslib_1.__assign({}, statistic), { content: transformContent }) }, { percent: percent });
  124. }
  125. if (updated) {
  126. chart.render(true);
  127. }
  128. return params;
  129. }
  130. exports.statistic = statistic;
  131. /**
  132. * tooltip 配置
  133. */
  134. function tooltip(params) {
  135. var chart = params.chart, options = params.options;
  136. var tooltip = options.tooltip;
  137. if (tooltip) {
  138. chart.tooltip((0, utils_1.deepAssign)({
  139. showTitle: false,
  140. showMarkers: false,
  141. containerTpl: '<div class="g2-tooltip"><div class="g2-tooltip-list"></div></div>',
  142. domStyles: {
  143. 'g2-tooltip': {
  144. padding: '4px 8px',
  145. fontSize: '10px',
  146. },
  147. },
  148. customContent: function (x, data) {
  149. var percent = (0, util_1.get)(data, [0, 'data', constants_1.PERCENT], 0);
  150. return "".concat((percent * 100).toFixed(2), "%");
  151. },
  152. }, tooltip));
  153. }
  154. else {
  155. // 默认,不展示 tooltip
  156. chart.tooltip(false);
  157. }
  158. return params;
  159. }
  160. /**
  161. * other 配置
  162. * @param params
  163. */
  164. function other(params) {
  165. var chart = params.chart;
  166. chart.legend(false);
  167. return params;
  168. }
  169. /**
  170. * 图适配器
  171. * @param chart
  172. * @param options
  173. */
  174. function adaptor(params) {
  175. // flow 的方式处理所有的配置到 G2 API
  176. return (0, utils_1.flow)(common_1.theme,
  177. // animation 配置必须在 createView 之前,不然无法让子 View 生效
  178. common_1.animation, geometry, meta, tooltip, statistic, common_1.interaction, (0, common_1.annotation)(), other
  179. // ... 其他的 adaptor flow
  180. )(params);
  181. }
  182. exports.adaptor = adaptor;
  183. //# sourceMappingURL=adaptor.js.map