helper.js 2.5 KB

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