base.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.geometry = exports.getMappingFunction = exports.getMappingField = void 0;
  4. var tslib_1 = require("tslib");
  5. var util_1 = require("@antv/util");
  6. var utils_1 = require("../../utils");
  7. /**
  8. * 获得映射的字段列表
  9. * @param options
  10. * @param field
  11. */
  12. function getMappingField(o, field) {
  13. var type = o.type, xField = o.xField, yField = o.yField, colorField = o.colorField, shapeField = o.shapeField, sizeField = o.sizeField, styleField = o.styleField;
  14. var rawFields = o.rawFields;
  15. var fields = [];
  16. rawFields = ((0, util_1.isFunction)(rawFields) ? rawFields(type, field) : rawFields) || [];
  17. // 因为 color 会影响到数据分组,以及最后的图形映射。所以导致 bar 图中的 widthRatio 设置不生效
  18. // 所以对于 color 字段,仅仅保留 colorField 好了! + rawFields
  19. // shape, size 同理
  20. if (field === 'color') {
  21. fields = tslib_1.__spreadArray([colorField || xField], rawFields, true);
  22. }
  23. else if (field === 'shape') {
  24. fields = tslib_1.__spreadArray([shapeField || xField], rawFields, true);
  25. }
  26. else if (field === 'size') {
  27. fields = tslib_1.__spreadArray([sizeField || xField], rawFields, true);
  28. }
  29. else {
  30. fields = tslib_1.__spreadArray([xField, yField, colorField, shapeField, sizeField, styleField], rawFields, true);
  31. // 一定能找到的!
  32. var idx = ['x', 'y', 'color', 'shape', 'size', 'style'].indexOf(field);
  33. var f = fields[idx];
  34. // 删除当前字段
  35. fields.splice(idx, 1);
  36. // 插入到第一个
  37. fields.unshift(f);
  38. }
  39. var mappingFields = (0, util_1.uniq)(fields.filter(function (f) { return !!f; }));
  40. /**
  41. * 修复 line geometry 无拆分时 color 回调错误
  42. * eg:
  43. * geometry.color(xField, ()=> '#f24')
  44. */
  45. var tileMappingField = type === 'line' && [xField, yField].includes(mappingFields.join('*')) ? '' : mappingFields.join('*');
  46. return {
  47. mappingFields: mappingFields,
  48. tileMappingField: tileMappingField,
  49. };
  50. }
  51. exports.getMappingField = getMappingField;
  52. /**
  53. * 获得映射函数
  54. * @param mappingFields
  55. * @param func
  56. */
  57. function getMappingFunction(mappingFields, func) {
  58. if (!func)
  59. return undefined;
  60. // 返回函数
  61. return function () {
  62. var args = [];
  63. for (var _i = 0; _i < arguments.length; _i++) {
  64. args[_i] = arguments[_i];
  65. }
  66. var params = {};
  67. mappingFields.forEach(function (f, idx) {
  68. params[f] = args[idx];
  69. });
  70. // 删除 undefined
  71. delete params['undefined'];
  72. return func(params);
  73. };
  74. }
  75. exports.getMappingFunction = getMappingFunction;
  76. /**
  77. * 通用 geometry 的配置处理的 adaptor
  78. * @param params
  79. */
  80. function geometry(params) {
  81. var chart = params.chart, options = params.options;
  82. var type = options.type, args = options.args, mapping = options.mapping, xField = options.xField, yField = options.yField, colorField = options.colorField, shapeField = options.shapeField, sizeField = options.sizeField, tooltipFields = options.tooltipFields, label = options.label, state = options.state, customInfo = options.customInfo;
  83. // 如果没有 mapping 信息,那么直接返回
  84. if (!mapping) {
  85. return params;
  86. }
  87. var color = mapping.color, shape = mapping.shape, size = mapping.size, style = mapping.style, tooltip = mapping.tooltip;
  88. // 创建 geometry
  89. var geometry = chart[type](args).position("".concat(xField, "*").concat(yField));
  90. /**
  91. * color 的几种情况
  92. * g.color('red');
  93. * g.color('color', ['red', 'blue']);
  94. * g.color('x', (x, y) => 'red');
  95. * g.color('color', (color, x, y) => 'red');
  96. */
  97. if ((0, util_1.isString)(color)) {
  98. colorField ? geometry.color(colorField, color) : geometry.color(color);
  99. }
  100. else if ((0, util_1.isFunction)(color)) {
  101. var _a = getMappingField(options, 'color'), mappingFields = _a.mappingFields, tileMappingField = _a.tileMappingField;
  102. geometry.color(tileMappingField, getMappingFunction(mappingFields, color));
  103. }
  104. else {
  105. colorField && geometry.color(colorField, color);
  106. }
  107. /**
  108. * shape 的几种情况
  109. * g.shape('rect');
  110. * g.shape('shape', ['rect', 'circle']);
  111. * g.shape('x*y', (x, y) => 'rect');
  112. * g.shape('shape*x*y', (shape, x, y) => 'rect');
  113. */
  114. if ((0, util_1.isString)(shape)) {
  115. shapeField ? geometry.shape(shapeField, [shape]) : geometry.shape(shape); // [shape] 需要在 G2 做掉
  116. }
  117. else if ((0, util_1.isFunction)(shape)) {
  118. var _b = getMappingField(options, 'shape'), mappingFields = _b.mappingFields, tileMappingField = _b.tileMappingField;
  119. geometry.shape(tileMappingField, getMappingFunction(mappingFields, shape));
  120. }
  121. else {
  122. shapeField && geometry.shape(shapeField, shape);
  123. }
  124. /**
  125. * size 的几种情况
  126. * g.size(10);
  127. * g.size('size', [10, 20]);
  128. * g.size('x*y', (x, y) => 10);
  129. * g.color('size*x*y', (size, x, y) => 1-);
  130. */
  131. if ((0, util_1.isNumber)(size)) {
  132. sizeField ? geometry.size(sizeField, size) : geometry.size(size);
  133. }
  134. else if ((0, util_1.isFunction)(size)) {
  135. var _c = getMappingField(options, 'size'), mappingFields = _c.mappingFields, tileMappingField = _c.tileMappingField;
  136. geometry.size(tileMappingField, getMappingFunction(mappingFields, size));
  137. }
  138. else {
  139. sizeField && geometry.size(sizeField, size);
  140. }
  141. /**
  142. * style 的几种情况
  143. * g.style({ fill: 'red' });
  144. * g.style('x*y*color', (x, y, color) => ({ fill: 'red' }));
  145. */
  146. if ((0, util_1.isFunction)(style)) {
  147. var _d = getMappingField(options, 'style'), mappingFields = _d.mappingFields, tileMappingField = _d.tileMappingField;
  148. geometry.style(tileMappingField, getMappingFunction(mappingFields, style));
  149. }
  150. else if ((0, util_1.isObject)(style)) {
  151. geometry.style(style);
  152. }
  153. /**
  154. * tooltip 的 API
  155. * g.tooltip('x*y*color', (x, y, color) => ({ name, value }));
  156. * g.tooltip(false);
  157. */
  158. if (tooltipFields === false) {
  159. geometry.tooltip(false);
  160. }
  161. else if (!(0, util_1.isEmpty)(tooltipFields)) {
  162. geometry.tooltip(tooltipFields.join('*'), getMappingFunction(tooltipFields, tooltip));
  163. }
  164. /**
  165. * label 的映射
  166. */
  167. if (label === false) {
  168. geometry.label(false);
  169. }
  170. else if (label) {
  171. var callback = label.callback, fields = label.fields, cfg = tslib_1.__rest(label, ["callback", "fields"]);
  172. geometry.label({
  173. fields: fields || [yField],
  174. callback: callback,
  175. cfg: (0, utils_1.transformLabel)(cfg),
  176. });
  177. }
  178. /**
  179. * state 状态样式
  180. */
  181. if (state) {
  182. geometry.state(state);
  183. }
  184. /**
  185. * 自定义信息
  186. */
  187. if (customInfo) {
  188. geometry.customInfo(customInfo);
  189. }
  190. // 防止因为 x y 字段做了通道映射,导致生成图例
  191. [xField, yField]
  192. .filter(function (f) { return f !== colorField; })
  193. .forEach(function (f) {
  194. chart.legend(f, false);
  195. });
  196. return tslib_1.__assign(tslib_1.__assign({}, params), {
  197. // geometry adaptor 额外需要做的事情,就是将创建好的 geometry 返回到下一层 adaptor,防止通过 type 查询的时候容易误判
  198. ext: { geometry: geometry } });
  199. }
  200. exports.geometry = geometry;
  201. //# sourceMappingURL=base.js.map