utils.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.syncViewPadding = exports.isHorizontal = exports.transformData = void 0;
  4. var util_1 = require("@antv/util");
  5. /**
  6. * bidirectional-bar 处理数据, 通过 SERIES_FIELD_KEY 字段分成左右数据
  7. * @param xField
  8. * @param yField
  9. * @param data
  10. */
  11. function transformData(xField, yField, seriesField, data, reverse) {
  12. var hopeData = [];
  13. yField.forEach(function (d) {
  14. data.forEach(function (k) {
  15. var _a;
  16. var obj = (_a = {},
  17. _a[xField] = k[xField],
  18. _a[seriesField] = d,
  19. _a[d] = k[d],
  20. _a);
  21. hopeData.push(obj);
  22. });
  23. });
  24. var groupData = Object.values((0, util_1.groupBy)(hopeData, seriesField));
  25. var _a = groupData[0], data1 = _a === void 0 ? [] : _a, _b = groupData[1], data2 = _b === void 0 ? [] : _b;
  26. return reverse ? [data1.reverse(), data2.reverse()] : [data1, data2];
  27. }
  28. exports.transformData = transformData;
  29. /**
  30. * 是否横向,默认空为横向
  31. * @param layout
  32. */
  33. function isHorizontal(layout) {
  34. return layout !== 'vertical';
  35. }
  36. exports.isHorizontal = isHorizontal;
  37. /**
  38. * 多 view 进行同步 padding 的自定义逻辑
  39. * @param chart
  40. * @param views
  41. * @param p
  42. */
  43. function syncViewPadding(chart, views, p) {
  44. var v1 = views[0], v2 = views[1];
  45. var p1 = v1.autoPadding;
  46. var p2 = v2.autoPadding;
  47. var _a = chart.__axisPosition, layout = _a.layout, position = _a.position;
  48. // 目前只能根据布局的比例来判断 layout
  49. if (isHorizontal(layout) && position === 'top') {
  50. /**
  51. * 保证 v1 的 left 和 v2 right 的间隔相等,因为 v1 有轴
  52. * position top 即为 v1 左边,中间间距设置就为 0
  53. */
  54. v1.autoPadding = p.instance(p1.top, 0, p1.bottom, p1.left);
  55. v2.autoPadding = p.instance(p2.top, p1.left, p2.bottom, 0);
  56. }
  57. if (isHorizontal(layout) && position === 'bottom') {
  58. /**
  59. * 保证 v1 的 left 和 v2 right 的间隔相等,因为 v1 有轴
  60. * position bottom 即为 v1 的右边,v1 right = right / 2 v2 left = right / 2
  61. * + 5 是为了 让那个轴不要太贴近了,更好看
  62. */
  63. v1.autoPadding = p.instance(p1.top, p1.right / 2 + 5, p1.bottom, p1.left);
  64. v2.autoPadding = p.instance(p2.top, p2.right, p2.bottom, p1.right / 2 + 5);
  65. }
  66. if (!isHorizontal(layout) && position === 'bottom') {
  67. /**
  68. * 保证 v1 的 left 和 v2 left 的间隔相等 left 取最大值
  69. * position bottom 即为 v1 下边,v1 bottom = bottom / 2 v2 top = bottom / 2
  70. * + 5 是为了 让那个轴不要太贴近了,更好看
  71. */
  72. var left = p1.left >= p2.left ? p1.left : p2.left;
  73. v1.autoPadding = p.instance(p1.top, p1.right, p1.bottom / 2 + 5, left);
  74. v2.autoPadding = p.instance(p1.bottom / 2 + 5, p2.right, p2.bottom, left);
  75. }
  76. // 垂直状态,不建议设置position 为 top, 还是做个兼容处理
  77. if (!isHorizontal(layout) && position === 'top') {
  78. var left = p1.left >= p2.left ? p1.left : p2.left;
  79. v1.autoPadding = p.instance(p1.top, p1.right, 0, left);
  80. v2.autoPadding = p.instance(0, p2.right, p1.top, left);
  81. }
  82. }
  83. exports.syncViewPadding = syncViewPadding;
  84. //# sourceMappingURL=utils.js.map