helper.js 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.transformToViewsData = exports.getNodePaddingRatio = exports.getNodeWidthRatio = void 0;
  4. var tslib_1 = require("tslib");
  5. var utils_1 = require("../../utils");
  6. var data_1 = require("../../utils/data");
  7. var circle_1 = require("./circle");
  8. var layout_1 = require("./layout");
  9. /**
  10. * 是否是 node-link 类型的数据结构
  11. * @param dataTyp
  12. * @returns
  13. */
  14. function isNodeLink(dataType) {
  15. return dataType === 'node-link';
  16. }
  17. function getNodeWidthRatio(nodeWidth, nodeWidthRatio, width) {
  18. return (0, utils_1.isRealNumber)(nodeWidth) ? nodeWidth / width : nodeWidthRatio;
  19. }
  20. exports.getNodeWidthRatio = getNodeWidthRatio;
  21. function getNodePaddingRatio(nodePadding, nodePaddingRatio, height) {
  22. return (0, utils_1.isRealNumber)(nodePadding) ? nodePadding / height : nodePaddingRatio;
  23. }
  24. exports.getNodePaddingRatio = getNodePaddingRatio;
  25. /**
  26. * 将桑基图配置经过 layout,生成最终的 view 数据
  27. * @param options
  28. * @param width
  29. * @param height
  30. */
  31. function transformToViewsData(options, width, height) {
  32. var dataType = options.dataType, data = options.data, sourceField = options.sourceField, targetField = options.targetField, weightField = options.weightField, nodeAlign = options.nodeAlign, nodeSort = options.nodeSort, nodePadding = options.nodePadding, nodePaddingRatio = options.nodePaddingRatio, nodeWidth = options.nodeWidth, nodeWidthRatio = options.nodeWidthRatio, nodeDepth = options.nodeDepth, _a = options.rawFields, rawFields = _a === void 0 ? [] : _a;
  33. var sankeyLayoutInputData;
  34. if (!isNodeLink(dataType)) {
  35. sankeyLayoutInputData = (0, data_1.transformDataToNodeLinkData)((0, circle_1.cutoffCircle)(data, sourceField, targetField), sourceField, targetField, weightField, rawFields);
  36. }
  37. else {
  38. sankeyLayoutInputData = data;
  39. }
  40. // 3. layout 之后的数据
  41. var _b = (0, layout_1.sankeyLayout)({
  42. nodeAlign: nodeAlign,
  43. nodePadding: getNodePaddingRatio(nodePadding, nodePaddingRatio, height),
  44. nodeWidth: getNodeWidthRatio(nodeWidth, nodeWidthRatio, width),
  45. nodeSort: nodeSort,
  46. nodeDepth: nodeDepth,
  47. }, sankeyLayoutInputData), nodes = _b.nodes, links = _b.links;
  48. // 4. 生成绘图数据
  49. return {
  50. nodes: nodes.map(function (node) {
  51. return tslib_1.__assign(tslib_1.__assign({}, (0, utils_1.pick)(node, tslib_1.__spreadArray(['x', 'y', 'name'], rawFields, true))), { isNode: true });
  52. }),
  53. edges: links.map(function (link) {
  54. return tslib_1.__assign(tslib_1.__assign({ source: link.source.name, target: link.target.name, name: link.source.name || link.target.name }, (0, utils_1.pick)(link, tslib_1.__spreadArray(['x', 'y', 'value'], rawFields, true))), { isNode: false });
  55. }),
  56. };
  57. }
  58. exports.transformToViewsData = transformToViewsData;
  59. //# sourceMappingURL=helper.js.map