All files / app/codeCharta/ui/attributeSideBar/attributeSideBarSecondaryMetrics secondaryMetrics.selector.ts

100% Statements 14/14
100% Branches 3/3
100% Functions 4/4
100% Lines 12/12

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24  5x 5x   5x   5x 12x 7x     5x 5x 16x 6x   9x           5x  
import { CodeMapNode, PrimaryMetrics } from "../../../codeCharta.model"
import { primaryMetricNamesSelector } from "../../../state/selectors/primaryMetrics/primaryMetricNames.selector"
import { selectedNodeSelector } from "../../../state/selectors/selectedNode.selector"
import { Metric } from "../util/metric"
import { createSelector } from "@ngrx/store"
 
export const _calculateSecondaryMetrics = (primaryMetrics: PrimaryMetrics, node?: Pick<CodeMapNode, "attributes">) => {
    if (!node) {
        return [] as Metric[]
    }
 
    const primaryMetricNamesList = Object.values(primaryMetrics)
    const secondaryMetricNames = Object.keys(node.attributes)
        .filter(metricName => metricName !== "unary" && !primaryMetricNamesList.includes(metricName))
        .sort((metricNameA, metricNameB) => metricNameA.localeCompare(metricNameB))
 
    return secondaryMetricNames.map(secondaryMetricName => ({
        name: secondaryMetricName,
        value: node.attributes[secondaryMetricName]
    }))
}
 
export const secondaryMetricsSelector = createSelector(primaryMetricNamesSelector, selectedNodeSelector, _calculateSecondaryMetrics)