Skip to content

Commit

Permalink
Add sorting of nodes by number of edges #3847
Browse files Browse the repository at this point in the history
  • Loading branch information
BenediktMehl committed Feb 11, 2025
1 parent ed6f9cc commit 6839b4c
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 9 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import { createSelector } from "@ngrx/store"
import { visibleFileStatesSelector } from "../../visibleFileStates/visibleFileStates.selector"
import { blacklistSelector } from "../../../store/fileSettings/blacklist/blacklist.selector"
import { calculateEdgeMetricData } from "./edgeMetricData.calculator"

export const sortedNodeEdgeMetricsMapSelector = createSelector(
visibleFileStatesSelector,
blacklistSelector,
(visibleFileStates, blacklist) => {
const { nodeEdgeMetricsMap } = calculateEdgeMetricData(visibleFileStates, blacklist)

const sortedNodeEdgeMetricsMap = new Map()

for (const [key, value] of nodeEdgeMetricsMap) {
const newSortedEdgeMetricEntry = new Map(
[...value.entries()].sort((a, b) => {
const aCount = a[1].incoming + a[1].outgoing
const bCount = b[1].incoming + b[1].outgoing
return bCount - aCount
})
)
sortedNodeEdgeMetricsMap.set(key, newSortedEdgeMetricEntry)
}

return sortedNodeEdgeMetricsMap
}
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,34 @@ import { createSelector } from "@ngrx/store"
import { NodeEdgeMetricsMap } from "../../../../state/selectors/accumulatedData/metricData/edgeMetricData.calculator"
import { amountOfEdgePreviewsSelector } from "../../../../state/store/appSettings/amountOfEdgePreviews/amountOfEdgePreviews.selector"
import { edgeMetricSelector } from "../../../../state/store/dynamicSettings/edgeMetric/edgeMetric.selector"
import { metricDataSelector } from "../../../../state/selectors/accumulatedData/metricData/metricData.selector"
import { sortedNodeEdgeMetricsMapSelector } from "../../../../state/selectors/accumulatedData/metricData/sortedNodeEdgeMetricsMap.selector"

export const edgePreviewNodesSelector = createSelector(
metricDataSelector,
sortedNodeEdgeMetricsMapSelector,
edgeMetricSelector,
amountOfEdgePreviewsSelector,
(metricData, edgeMetric, amountOfEdgePreviews) =>
new Set(_getNodesWithHighestValue(metricData.nodeEdgeMetricsMap, edgeMetric, amountOfEdgePreviews))
(sortedNodeEdgeMetricsMap, edgeMetric, amountOfEdgePreviews) =>
new Set(_getNodesWithHighestValue(sortedNodeEdgeMetricsMap, edgeMetric, amountOfEdgePreviews))
)

export const _getNodesWithHighestValue = (edgeMetricMap: NodeEdgeMetricsMap, edgeMetric: string, amountOfEdgePreviews: number) => {
export const _getNodesWithHighestValue = (
sortedNodeEdgeMetricsMap: NodeEdgeMetricsMap,
edgeMetric: string,
amountOfEdgePreviews: number
) => {
const keys: string[] = []

if (amountOfEdgePreviews === 0) {
return keys
}

const nodeEdgeMetrics = edgeMetricMap.get(edgeMetric)
const sortedNodeEdgeMetrics = sortedNodeEdgeMetricsMap.get(edgeMetric)

if (nodeEdgeMetrics === undefined) {
if (sortedNodeEdgeMetrics === undefined) {
return keys
}

// note that this depends on the fact, that edgeMetricMap is created by a list which is sorted by max value
for (const key of nodeEdgeMetrics.keys()) {
for (const key of sortedNodeEdgeMetrics.keys()) {
keys.push(key)
if (keys.length === amountOfEdgePreviews) {
break
Expand Down

0 comments on commit 6839b4c

Please sign in to comment.