utils.js 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.resolvePaddingForCircle = exports.transformData = void 0;
  4. var tslib_1 = require("tslib");
  5. var drill_down_1 = require("../../interactions/actions/drill-down");
  6. var utils_1 = require("../../utils");
  7. var pack_1 = require("../../utils/hierarchy/pack");
  8. var padding_1 = require("../../utils/padding");
  9. /**
  10. * circle-packing 数据转换
  11. * @param options
  12. */
  13. function transformData(options) {
  14. var data = options.data, hierarchyConfig = options.hierarchyConfig, _a = options.rawFields, rawFields = _a === void 0 ? [] : _a, enableDrillDown = options.enableDrillDown;
  15. var nodes = (0, pack_1.pack)(data, tslib_1.__assign(tslib_1.__assign({}, hierarchyConfig), { field: 'value', as: ['x', 'y', 'r'] }));
  16. var result = [];
  17. nodes.forEach(function (node) {
  18. var _a;
  19. var path = node.data.name;
  20. var ancestorNode = tslib_1.__assign({}, node);
  21. while (ancestorNode.depth > 1) {
  22. path = "".concat((_a = ancestorNode.parent.data) === null || _a === void 0 ? void 0 : _a.name, " / ").concat(path);
  23. ancestorNode = ancestorNode.parent;
  24. }
  25. // 开启下钻,仅加载 depth <= 2 的数据 (加载两层)
  26. if (enableDrillDown && node.depth > 2) {
  27. return null;
  28. }
  29. var nodeInfo = (0, utils_1.deepAssign)({}, node.data, tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({}, (0, utils_1.pick)(node.data, rawFields)), { path: path }), node));
  30. nodeInfo.ext = hierarchyConfig;
  31. nodeInfo[drill_down_1.HIERARCHY_DATA_TRANSFORM_PARAMS] = { hierarchyConfig: hierarchyConfig, rawFields: rawFields, enableDrillDown: enableDrillDown };
  32. result.push(nodeInfo);
  33. });
  34. return result;
  35. }
  36. exports.transformData = transformData;
  37. /**
  38. * 根据传入的 padding 和 现有的 画布大小, 输出针对圆形视图布局需要的 finalPadding 以及 finalSize
  39. * @param params
  40. */
  41. function resolvePaddingForCircle(padding, appendPadding, containerSize) {
  42. var tempPadding = (0, padding_1.resolveAllPadding)([padding, appendPadding]);
  43. var top = tempPadding[0], right = tempPadding[1], bottom = tempPadding[2], left = tempPadding[3]; // 没设定,默认是 [0, 0, 0, 0]
  44. var width = containerSize.width, height = containerSize.height;
  45. // 有了 tempPadding 介入以后,计算出coordinate范围宽高的最小值 minSize = circle-packing的直径
  46. var wSize = width - (left + right);
  47. var hSize = height - (top + bottom);
  48. var minSize = Math.min(wSize, hSize); // circle-packing的直径
  49. // 得到居中后各方向剩余的 padding
  50. var restWidthPadding = (wSize - minSize) / 2;
  51. var restHeightPadding = (hSize - minSize) / 2;
  52. var finalTop = top + restHeightPadding;
  53. var finalRight = right + restWidthPadding;
  54. var finalBottom = bottom + restHeightPadding;
  55. var finalLeft = left + restWidthPadding;
  56. var finalPadding = [finalTop, finalRight, finalBottom, finalLeft];
  57. var finalSize = minSize < 0 ? 0 : minSize; // 防止为负数
  58. return { finalPadding: finalPadding, finalSize: finalSize };
  59. }
  60. exports.resolvePaddingForCircle = resolvePaddingForCircle;
  61. //# sourceMappingURL=utils.js.map