| 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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97 | 1×
 
1×
1×
1×
65×
65×
 
1×
56×
56×
56×
 
56×
56×
77×
4×
 
 
73×
 
 
56×
4×
4×
 
4×
4×
 
 
56×
16×
16×
 
56×
41×
 
56×
 
16×
 
56×
 
1×
17×
 
1×
35×
 
1×
17×
 
1×
18×
 
1×
27×
 
1×
17×
 
1×
8×
8×
16×
16×
16×
16×
16×
16×
16×
16×
136×
136×
16×
16×
16×
 
 
 
 
8×
 
1×
16×
8000×
16×
 
7984×
 
16×
 
1×
 
1×
 
  | define(["require", "exports", "@syncfusion/ej2-base", "../base/util", "../base/enum"], function (require, exports, ej2_base_1, util_1, enum_1) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    var CellMergeRender = (function () {
        function CellMergeRender(serviceLocator, parent) {
            this.serviceLocator = serviceLocator;
            this.parent = parent;
        }
        CellMergeRender.prototype.render = function (cellArgs, row, i, td) {
            var cellRendererFact = this.serviceLocator.getService('cellRendererFactory');
            var cellRenderer = cellRendererFact.getCellRenderer(row.cells[i].cellType || enum_1.CellType.Data);
            var span = row.cells[i].cellSpan ? row.cells[i].cellSpan :
                (cellArgs.colSpan + i) <= row.cells.length ? cellArgs.colSpan : row.cells.length - i;
            var visible = 0;
            for (var j = i + 1; j < i + span && j < row.cells.length; j++) {
                if (row.cells[j].visible === false) {
                    visible++;
                }
                else {
                    row.cells[j].isSpanned = true;
                }
            }
            if (visible > 0) {
                for (var j = i + span; j < i + span + visible && j < row.cells.length; j++) {
                    row.cells[j].isSpanned = true;
                }
                Eif (i + span + visible >= row.cells.length) {
                    span -= (i + span + visible) - row.cells.length;
                }
            }
            if (row.cells[i].cellSpan) {
                row.data[cellArgs.column.field] = row.cells[i].spanText;
                td = cellRenderer.render(row.cells[i], row.data, { 'index': !ej2_base_1.isNullOrUndefined(row.index) ? row.index.toString() : '' });
            }
            if (span > 1) {
                ej2_base_1.attributes(td, { 'colSpan': span.toString(), 'aria-colSpan': span.toString() });
            }
            if (this.parent.enableColumnVirtualization && !row.cells[i].cellSpan &&
                !this.containsKey(cellArgs.column.field, cellArgs.data[cellArgs.column.field])) {
                this.backupMergeCells(cellArgs.column.field, cellArgs.data[cellArgs.column.field], cellArgs.colSpan);
            }
            return td;
        };
        CellMergeRender.prototype.backupMergeCells = function (fName, data, span) {
            this.setMergeCells(this.generteKey(fName, data), span);
        };
        CellMergeRender.prototype.generteKey = function (fname, data) {
            return fname + '__' + data.toString();
        };
        CellMergeRender.prototype.splitKey = function (key) {
            return key.split('__');
        };
        CellMergeRender.prototype.containsKey = function (fname, data) {
            return this.getMergeCells().hasOwnProperty(this.generteKey(fname, data));
        };
        CellMergeRender.prototype.getMergeCells = function () {
            return this.parent.mergeCells;
        };
        CellMergeRender.prototype.setMergeCells = function (key, span) {
            this.parent.mergeCells[key] = span;
        };
        CellMergeRender.prototype.updateVirtualCells = function (rows) {
            var mCells = this.getMergeCells();
            for (var _i = 0, _a = Object.keys(mCells); _i < _a.length; _i++) {
                var key = _a[_i];
                var value = mCells[key];
                var merge = this.splitKey(key);
                var columnIndex = this.getIndexFromAllColumns(merge[0]);
                var vColumnIndices = this.parent.getColumnIndexesInView();
                var span = value - (vColumnIndices[0] - columnIndex);
                Eif (columnIndex < vColumnIndices[0] && span > 1) {
                    for (var _b = 0, rows_1 = rows; _b < rows_1.length; _b++) {
                        var row = rows_1[_b];
                        if (row.data[merge[0]].toString() === merge[1].toString()) {
                            row.cells[0].cellSpan = span;
                            row.cells[0].spanText = merge[1];
                            break;
                        }
                    }
                }
            }
            return rows;
        };
        CellMergeRender.prototype.getIndexFromAllColumns = function (field) {
            var index = util_1.iterateArrayOrObject(this.parent.getVisibleColumns(), function (item, index) {
                if (item.field === field) {
                    return index;
                }
                return undefined;
            })[0];
            return index;
        };
        return CellMergeRender;
    }());
    exports.CellMergeRender = CellMergeRender;
});
  |