all files / grid/renderer/ cell-merge-renderer.js

100% Statements 65/65
94.29% Branches 33/35
100% Functions 13/13
100% Lines 65/65
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   65× 65×   56× 56× 56×   56× 56× 77×     73×     56×       56× 16× 16×   56× 41×   56×   16×   56×   17×   35×   17×   18×   27×   17×   16× 16× 16× 16× 16× 16× 16× 16× 136× 136× 16× 16× 16×           16× 8000× 16×   7984×   16×        
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;
});