private createYOffsets()

in src/UXClient/Components/LineChart/LineChart.ts [1192:1247]


    private createYOffsets () {
        let visibleGroups = this.data.filter((agg) => this.chartComponentData.displayState[agg.aggKey]["visible"]);
        let visibleCDOs = this.aggregateExpressionOptions.filter((cDO) => this.chartComponentData.displayState[cDO.aggKey]["visible"]);

        let visibleNumericCount;
        let swimLaneSet = {};

        visibleCDOs.forEach((aEO, i) => {
            if (aEO.swimLane === null) {
                aEO.swimLane = i + 1;
            }
        });

        visibleCDOs.forEach((cDO) => {
            swimLaneSet[cDO.swimLane] = swimLaneSet[cDO.swimLane] || (cDO.dataType === DataTypes.Numeric);
        });    
        visibleNumericCount = Object.keys(swimLaneSet).reduce((visibleCount, swimLane) => {
            return visibleCount + (swimLaneSet[swimLane] ? 1 : 0);
        }, 0);

        let countNumericLanes = visibleNumericCount;

        let linechartTopPadding = this.chartOptions.isArea ? 0 : LINECHARTTOPPADDING;
        let useableHeight = this.chartHeight - linechartTopPadding;

        let fixedEventsHeight = 0;
        if (this.chartOptions.swimLaneOptions) {
            Object.keys(this.chartOptions.swimLaneOptions).forEach((swimlaneKey) => {
                let swimlane = Number(swimlaneKey)
                let sLO = this.chartOptions.swimLaneOptions[swimlane];
                if (sLO.collapseEvents) {
                    let swimlaneHeight = this.getEventsCollapsedSwimlaneHeight(visibleCDOs, swimlane);
                    fixedEventsHeight += swimlaneHeight;
                }    
            });
        }
        let heightNonNumeric = visibleCDOs.reduce((sumPrevious, currGroup, i) => {
            if (currGroup.dataType === DataTypes.Events && this.chartOptions.swimLaneOptions && this.chartOptions.swimLaneOptions[currGroup.swimLane] && this.chartOptions.swimLaneOptions[currGroup.swimLane].collapseEvents) {
                return sumPrevious;
            }
            return sumPrevious + (currGroup.dataType !== DataTypes.Numeric ? Utils.getNonNumericHeight(currGroup.height) : 0);
        }, 0);
        heightNonNumeric += fixedEventsHeight;
        
        let heightPerNumeric = (useableHeight - heightNonNumeric) / countNumericLanes;
        
        this.setSwimLaneYExtents(
            visibleGroups, 
            visibleCDOs, 
            Object.keys(swimLaneSet)
                .filter((lane) => swimLaneSet[lane])
                .map((stringLane) => Number(stringLane)),
            this.chartOptions.swimLaneOptions
        );
        return this.getSwimlaneOffsets(linechartTopPadding, visibleGroups, visibleCDOs, heightPerNumeric, swimLaneSet);
    }