All files / app/codeCharta/state/selectors/accumulatedData accumulatedData.selector.ts

78.12% Statements 25/32
53.84% Branches 7/13
100% Functions 2/2
77.41% Lines 24/31

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 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62    82x 82x 82x 82x 82x 82x 82x 82x 82x 82x 82x 82x   82x             82x             19x 19x                                     82x 4x 2x   2x 2x 2x 1x   1x      
import { CodeMapNode, FileMeta } from "../../../codeCharta.model"
import { FileState } from "../../../model/files/files"
import { fileStatesAvailable, isDeltaState, isPartialState } from "../../../model/files/files.helper"
import { AggregationGenerator } from "../../../util/aggregationGenerator"
import { NodeDecorator } from "../../../util/nodeDecorator"
import { metricNamesSelector } from "./metricData/metricNames.selector"
import { getDeltaFile } from "./utils/getDeltaFile"
import { addEdgeMetricsForLeaves } from "./utils/addEdgeMetricsForLeaves"
import { blacklistSelector } from "../../store/fileSettings/blacklist/blacklist.selector"
import { attributeTypesSelector } from "../../store/fileSettings/attributeTypes/attributeTypes.selector"
import { visibleFileStatesSelector } from "../visibleFileStates/visibleFileStates.selector"
import { metricDataSelector } from "./metricData/metricData.selector"
import { createSelector } from "@ngrx/store"
import { clone } from "../../../util/clone"
 
const accumulatedDataFallback: AccumulatedData = Object.freeze({
    unifiedMapNode: undefined,
    unifiedFileMeta: undefined
})
 
export type AccumulatedData = { unifiedMapNode: CodeMapNode | undefined; unifiedFileMeta: FileMeta | undefined }
 
export const accumulatedDataSelector = createSelector(
    metricDataSelector,
    visibleFileStatesSelector,
    attributeTypesSelector,
    blacklistSelector,
    metricNamesSelector,
    (metricData, fileStates, attributeTypes, blacklist, metricNames) => {
        if (!fileStatesAvailable(fileStates) || !metricData.nodeMetricData) {
            return accumulatedDataFallback
        }
 
        const data = _getUndecoratedAccumulatedData(clone(fileStates))
        Iif (!data?.map) {
            return accumulatedDataFallback
        }
 
        NodeDecorator.decorateMap(data.map, metricData, blacklist)
        addEdgeMetricsForLeaves(metricData.nodeEdgeMetricsMap, data.map, metricNames)
        NodeDecorator.decorateParentNodesWithAggregatedAttributes(data.map, isDeltaState(fileStates), attributeTypes)
 
        return {
            unifiedMapNode: data.map,
            unifiedFileMeta: data.fileMeta
        }
    }
)
 
export const _getUndecoratedAccumulatedData = (fileStates: FileState[]) => {
    if (isPartialState(fileStates)) {
        return AggregationGenerator.calculateAggregationFile(fileStates)
    }
    if (isDeltaState(fileStates)) {
        const [reference, comparison] = fileStates
        if (comparison && reference.file.map.name !== comparison.file.map.name) {
            return AggregationGenerator.calculateAggregationFile(fileStates)
        }
        return getDeltaFile(fileStates)
    }
}