{"version":3,"file":"partition.js","sourceRoot":"","sources":["../../../src/utils/hierarchy/partition.ts"],"names":[],"mappings":"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","sourcesContent":["import { assign, isArray, reduce, size } from '@antv/util';\nimport * as d3Hierarchy from 'd3-hierarchy';\nimport { getAllNodes, getField } from './util';\n\nconst DEFAULT_OPTIONS: Options = {\n field: 'value',\n size: [1, 1], // width, height\n round: false,\n padding: 0,\n // 默认降序\n sort: (a, b) => b.value - a.value,\n as: ['x', 'y'],\n // 是否忽略 parentValue, 当设置为 true 时,父节点的权重由子元素决定\n ignoreParentValue: true,\n};\n\nexport interface Options {\n field: string;\n size?: [number, number];\n round?: boolean;\n ratio?: number;\n padding?: number;\n sort?: (a: any, b: any) => any; // Function;\n as?: [string, string];\n\n ignoreParentValue?: boolean;\n}\n\nexport function partition(data: any, options: Options): any[] {\n options = assign({} as Options, DEFAULT_OPTIONS, options);\n const as = options.as;\n if (!isArray(as) || as.length !== 2) {\n throw new TypeError('Invalid as: it must be an array with 2 strings (e.g. [ \"x\", \"y\" ])!');\n }\n\n let field;\n try {\n field = getField(options);\n } catch (e) {\n console.warn(e);\n }\n\n const partition = (data) =>\n d3Hierarchy.partition().size(options.size).round(options.round).padding(options.padding)(\n /**\n * d3Hierarchy 布局中需指定 sum 函数计算 node 值,规则是:从当前 node 开始以 post-order traversal 的次序为当前节点以及每个后代节点调用指定的 value 函数,并返回当前 node。\n * for example:\n * { node: 'parent', value: 10, children: [{node: 'child1', value: 5}, {node: 'child2', value: 5}, ]}\n * parent 所得的计算值是 sum(node(parent)) + sum(node(child1)) + sum(node(child2))\n * sum 函数中,d 为用户传入的 data, children 为保留字段\n */\n d3Hierarchy\n .hierarchy(data)\n .sum((d) =>\n size(d.children)\n ? options.ignoreParentValue\n ? 0\n : d[field] - reduce(d.children, (a, b) => a + b[field], 0)\n : d[field]\n )\n .sort(options.sort)\n );\n const root = partition(data);\n\n /*\n * points:\n * 3 2\n * 0 1\n */\n const x = as[0];\n const y = as[1];\n\n root.each((node) => {\n node[x] = [node.x0, node.x1, node.x1, node.x0];\n node[y] = [node.y1, node.y1, node.y0, node.y0];\n // 旭日图兼容下 旧版本\n node.name = node.name || node.data?.name || node.data?.label;\n node.data.name = node.name;\n\n ['x0', 'x1', 'y0', 'y1'].forEach((prop) => {\n if (as.indexOf(prop) === -1) {\n delete node[prop];\n }\n });\n });\n\n return getAllNodes(root);\n}\n"]}