• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

IgniteUI / igniteui-angular / 13331632524

14 Feb 2025 02:51PM CUT coverage: 22.015% (-69.6%) from 91.622%
13331632524

Pull #15372

github

web-flow
Merge d52d57714 into bcb78ae0a
Pull Request #15372: chore(*): test ci passing

1990 of 15592 branches covered (12.76%)

431 of 964 new or added lines in 18 files covered. (44.71%)

19956 existing lines in 307 files now uncovered.

6452 of 29307 relevant lines covered (22.02%)

249.17 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

31.43
/projects/igniteui-angular/src/lib/grids/grid/grid.summary.pipe.ts
1
import { Inject, Pipe, PipeTransform } from '@angular/core';
2
import { ISummaryRecord } from '../summaries/grid-summary';
3
import { IGroupByRecord } from '../../data-operations/groupby-record.interface';
4
import { IGroupByResult } from '../../data-operations/grouping-result.interface';
5
import { GridSummaryCalculationMode, GridSummaryPosition } from '../common/enums';
6
import { GridType, IGX_GRID_BASE } from '../common/grid.interface';
7

8
/** @hidden */
9
interface ISkipRecord { skip?: boolean }
10

11
/** @hidden */
12
@Pipe({
13
    name: 'gridSummary',
14
    standalone: true
15
})
16
export class IgxGridSummaryPipe implements PipeTransform {
2✔
17

18
    constructor(@Inject(IGX_GRID_BASE) private grid: GridType) { }
36✔
19

20
    public transform(collection: IGroupByResult,
21
        hasSummary: boolean,
22
        summaryCalculationMode: GridSummaryCalculationMode,
23
        summaryPosition: GridSummaryPosition,
24
        id: string, showSummary, _: number, __: number): any[] {
25

26
        if (!collection.data || !hasSummary || summaryCalculationMode === GridSummaryCalculationMode.rootLevelOnly) {
66✔
27
            return collection.data;
7✔
28
        }
29

30
        return this.addSummaryRows(id, collection, summaryPosition, showSummary);
59✔
31
    }
32

33
    private addSummaryRows(gridId: string, collection: IGroupByResult, summaryPosition: GridSummaryPosition, showSummary): any[] {
34
        const recordsWithSummary = [];
59✔
35
        const lastChildMap = new Map<any, IGroupByRecord[]>();
59✔
36
        const maxSummaryHeight = this.grid.summaryService.calcMaxSummaryHeight();
59✔
37

38
        if (collection.metadata.length && !this.grid.isGroupByRecord(collection.data[0]) &&
59!
39
            this.grid.isGroupByRecord(collection.metadata[0]) && summaryPosition === GridSummaryPosition.bottom) {
UNCOV
40
            const groups: Array<IGroupByRecord & ISkipRecord> = [];
×
UNCOV
41
            groups.push(collection.metadata[0]);
×
UNCOV
42
            while (groups[groups.length - 1].groupParent) {
×
43
                groups.push(groups[groups.length - 1].groupParent);
×
44
            }
UNCOV
45
            groups.reverse();
×
UNCOV
46
            groups.forEach(g => g.skip = true);
×
UNCOV
47
            collection.data.splice(0, 0, ...groups);
×
48
        }
49
        for (const record of collection.data) {
59✔
50
            let skipAdd = false;
358✔
51
            let recordId;
52
            let groupByRecord: IGroupByRecord = null;
358✔
53
            if (this.grid.isGroupByRecord(record)) {
358!
UNCOV
54
                skipAdd = !!record.skip;
×
UNCOV
55
                record.skip = null;
×
UNCOV
56
                groupByRecord = record as IGroupByRecord;
×
UNCOV
57
                recordId = this.grid.gridAPI.get_groupBy_record_id(groupByRecord);
×
58
            } else {
59
                recordId = this.grid.gridAPI.get_row_id(record);
358✔
60
            }
61
            if (!skipAdd) {
358✔
62
                recordsWithSummary.push(record);
358✔
63
            }
64

65
            if (summaryPosition === GridSummaryPosition.bottom && showSummary &&
358!
66
                (groupByRecord && !this.grid.isExpandedGroup(groupByRecord))) {
UNCOV
67
                const records = this.removeDeletedRecord(this.grid, groupByRecord.records.slice());
×
UNCOV
68
                const summaries = this.grid.summaryService.calculateSummaries(recordId, records);
×
UNCOV
69
                const summaryRecord: ISummaryRecord = {
×
70
                    summaries,
71
                    max: maxSummaryHeight
72
                };
UNCOV
73
                recordsWithSummary.push(summaryRecord);
×
74
            }
75
            if (summaryPosition === GridSummaryPosition.bottom && lastChildMap.has(recordId)) {
358!
UNCOV
76
                const groupRecords = lastChildMap.get(recordId);
×
77

UNCOV
78
                for (const groupRecord of groupRecords) {
×
UNCOV
79
                    const groupRecordId = this.grid.gridAPI.get_groupBy_record_id(groupRecord);
×
UNCOV
80
                    const records = this.removeDeletedRecord(this.grid, groupRecord.records.slice());
×
UNCOV
81
                    const summaries = this.grid.summaryService.calculateSummaries(groupRecordId, records, groupRecord);
×
UNCOV
82
                    const summaryRecord: ISummaryRecord = {
×
83
                        summaries,
84
                        max: maxSummaryHeight
85
                    };
UNCOV
86
                    recordsWithSummary.push(summaryRecord);
×
87
                }
88
            }
89

90
            const showSummaries = showSummary ? false : (groupByRecord && !this.grid.isExpandedGroup(groupByRecord));
358!
91
            if (groupByRecord === null || showSummaries) {
358!
92
                continue;
358✔
93
            }
94

UNCOV
95
            if (summaryPosition === GridSummaryPosition.top) {
×
UNCOV
96
                const records = this.removeDeletedRecord(this.grid, groupByRecord.records.slice());
×
UNCOV
97
                const summaries = this.grid.summaryService.calculateSummaries(recordId, records, groupByRecord);
×
UNCOV
98
                const summaryRecord: ISummaryRecord = {
×
99
                    summaries,
100
                    max: maxSummaryHeight
101
                };
UNCOV
102
                recordsWithSummary.push(summaryRecord);
×
UNCOV
103
            } else if (summaryPosition === GridSummaryPosition.bottom) {
×
UNCOV
104
                let lastChild = groupByRecord;
×
105

UNCOV
106
                while (lastChild.groups && lastChild.groups.length > 0 && this.grid.isExpandedGroup(lastChild)) {
×
UNCOV
107
                    lastChild = lastChild.groups[lastChild.groups.length - 1];
×
108
                }
109

110
                let lastChildId;
UNCOV
111
                if (this.grid.isExpandedGroup(lastChild)) {
×
UNCOV
112
                    lastChildId = this.grid.gridAPI.get_row_id(lastChild.records[lastChild.records.length - 1]);
×
113
                } else {
UNCOV
114
                    lastChildId = this.grid.gridAPI.get_groupBy_record_id(lastChild);
×
115
                }
116

UNCOV
117
                let groupRecords = lastChildMap.get(lastChildId);
×
UNCOV
118
                if (!groupRecords) {
×
UNCOV
119
                    groupRecords = [];
×
UNCOV
120
                    lastChildMap.set(lastChildId, groupRecords);
×
121
                }
UNCOV
122
                groupRecords.unshift(groupByRecord);
×
123
            }
124
        }
125
        return recordsWithSummary;
59✔
126
    }
127

128
    private removeDeletedRecord(grid: GridType, data: any[]) {
UNCOV
129
        if (!grid.transactions.enabled) {
×
UNCOV
130
            return data;
×
131
        }
UNCOV
132
        const deletedRows = grid.transactions.getTransactionLog().filter(t => t.type === 'delete').map(t => t.id);
×
UNCOV
133
        deletedRows.forEach(rowID => {
×
UNCOV
134
            const tempData = grid.primaryKey ? data.map(rec => rec[grid.primaryKey]) : data;
×
UNCOV
135
            const index = tempData.indexOf(rowID);
×
UNCOV
136
            if (index !== -1) {
×
UNCOV
137
                data.splice(index, 1);
×
138
            }
139
        });
UNCOV
140
        return data;
×
141
    }
142
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc