{"version":3,"file":"treemap.js","sourceRoot":"","sources":["../../../src/utils/hierarchy/treemap.ts"],"names":[],"mappings":"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","sourcesContent":["import { assign, isArray } from '@antv/util';\nimport * as d3Hierarchy from 'd3-hierarchy';\nimport { HierarchyOption } from './types';\nimport { getAllNodes, getField } from './util';\n\nconst DEFAULT_OPTIONS: HierarchyOption = {\n field: 'value',\n tile: 'treemapSquarify', // treemapBinary, treemapDice, treemapSlice, treemapSliceDice, treemapSquarify, treemapResquarify\n size: [1, 1], // width, height\n round: false,\n ignoreParentValue: true,\n padding: 0,\n paddingInner: 0,\n paddingOuter: 0,\n paddingTop: 0,\n paddingRight: 0,\n paddingBottom: 0,\n paddingLeft: 0,\n as: ['x', 'y'],\n // 默认降序\n sort: (a, b) => b.value - a.value,\n // 纵横比, treemapSquarify 布局时可用,默认黄金分割比例\n ratio: 0.5 * (1 + Math.sqrt(5)),\n};\n\nexport function getTileMethod(tile: string, ratio: number) {\n return tile === 'treemapSquarify' ? d3Hierarchy[tile].ratio(ratio) : d3Hierarchy[tile];\n}\n\nexport function treemap(data: any, options: HierarchyOption): any[] {\n options = assign({} as HierarchyOption, 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 tileMethod = getTileMethod(options.tile, options.ratio);\n\n const partition = (data) =>\n d3Hierarchy\n .treemap()\n .tile(tileMethod)\n .size(options.size)\n .round(options.round)\n .padding(options.padding)\n .paddingInner(options.paddingInner)\n .paddingOuter(options.paddingOuter)\n .paddingTop(options.paddingTop)\n .paddingRight(options.paddingRight)\n .paddingBottom(options.paddingBottom)\n .paddingLeft(options.paddingLeft)(\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 * ignoreParentValue 为 true(默认) 时,父元素的值由子元素累加而来,该值为 0 + 5 + 5 = 10\n * ignoreParentValue 为 false 时,父元素的值由当前节点 及子元素累加而来,该值为 10 + 5 + 5 = 20\n * sum 函数中,d 为用户传入的 data, children 为保留字段\n */\n d3Hierarchy\n .hierarchy(data)\n .sum((d) => (options.ignoreParentValue && d.children ? 0 : d[field]))\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 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 ['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"]}