From 1c9a8cfc22e7df7df72e231184a11d9904fd5dbe Mon Sep 17 00:00:00 2001 From: dwatkins Date: Thu, 16 Mar 2023 22:48:03 +0000 Subject: [PATCH 1/2] Use stratify for faster hierarchy builds #3780 --- waltz-ng/client/common/hierarchy-utils.js | 15 +++++++++++++++ .../components/tree/measurable-tree.html | 8 ++++---- .../measurable/components/tree/measurable-tree.js | 6 ++++-- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/waltz-ng/client/common/hierarchy-utils.js b/waltz-ng/client/common/hierarchy-utils.js index 1f817d3345..c927a03548 100644 --- a/waltz-ng/client/common/hierarchy-utils.js +++ b/waltz-ng/client/common/hierarchy-utils.js @@ -16,6 +16,7 @@ * */ import _ from "lodash"; +import {stratify} from "d3"; /** @@ -131,6 +132,20 @@ export function buildHierarchies(nodes, parentsAsRefs = true) { return _.reject(populateParents(nodes, parentsAsRefs), n => n.parent); } +export function buildHierarchies2(nodes) { + console.time("stratify"); + const withRoot = _.concat([{id: -99}], nodes); + const sr = stratify() + .parentId(d => d.id === -99 ? null : d.parentId ?? -99) + (withRoot); + const forest = _.map(sr.children, c => Object.assign(c, {parentId: null, parent: null})); + console.timeEnd("stratify"); + console.log({forest}) + return forest; + // return [sr]; + +} + export const reduceToSelectedNodesOnly = (nodes, selectedNodeIds = []) => { const byId = _.keyBy(nodes, d => d.id); const selectedNodesOnly = _ diff --git a/waltz-ng/client/measurable/components/tree/measurable-tree.html b/waltz-ng/client/measurable/components/tree/measurable-tree.html index db9a4c90fa..6cf424015f 100644 --- a/waltz-ng/client/measurable/components/tree/measurable-tree.html +++ b/waltz-ng/client/measurable/components/tree/measurable-tree.html @@ -45,12 +45,12 @@ tree-model="$ctrl.hierarchy" options="$ctrl.treeOptions" expanded-nodes="$ctrl.expandedNodes" - order-by="'-name'"> - + + ng-click="$ctrl.onSelect(node.data)"> - diff --git a/waltz-ng/client/measurable/components/tree/measurable-tree.js b/waltz-ng/client/measurable/components/tree/measurable-tree.js index 4e36b36de8..433a8a9ad4 100644 --- a/waltz-ng/client/measurable/components/tree/measurable-tree.js +++ b/waltz-ng/client/measurable/components/tree/measurable-tree.js @@ -25,7 +25,9 @@ import { doSearch, prepareSearchNodes, determineExpandedNodes, - determineDepthLimit} from "../../../common/hierarchy-utils"; + determineDepthLimit, + buildHierarchies2 +} from "../../../common/hierarchy-utils"; import template from "./measurable-tree.html"; @@ -76,7 +78,7 @@ const recursivelySum = buildPropertySummer(); function prepareTree(measurables = []) { - const hierarchy = buildHierarchies(measurables, false); + const hierarchy = buildHierarchies2(measurables, false); _.each(hierarchy, root => recursivelySum(root)); return hierarchy; } From 6c576bfd4588444fef9eda2512cf8e5010963110 Mon Sep 17 00:00:00 2001 From: dwatkins Date: Sat, 18 Mar 2023 13:40:36 +0000 Subject: [PATCH 2/2] Use stratify for faster hierarchy builds - still dome difficulties, parking #3780 --- waltz-ng/client/common/hierarchy-utils.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/waltz-ng/client/common/hierarchy-utils.js b/waltz-ng/client/common/hierarchy-utils.js index c927a03548..585b215ee5 100644 --- a/waltz-ng/client/common/hierarchy-utils.js +++ b/waltz-ng/client/common/hierarchy-utils.js @@ -133,10 +133,14 @@ export function buildHierarchies(nodes, parentsAsRefs = true) { } export function buildHierarchies2(nodes) { + console.time("stratify"); - const withRoot = _.concat([{id: -99}], nodes); + const withRoot = _.concat([{id: -99}], nodes || []); + console.log({nodes, withRoot}) const sr = stratify() - .parentId(d => d.id === -99 ? null : d.parentId ?? -99) + .parentId(d => d.id === -99 + ? null + : d.parentId ?? -99) (withRoot); const forest = _.map(sr.children, c => Object.assign(c, {parentId: null, parent: null})); console.timeEnd("stratify");