utils.js 2.9 KB

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