UNPKG

@syncfusion/ej2-grids

Version:

Feature-rich JavaScript datagrid (datatable) control with built-in support for editing, filtering, grouping, paging, sorting, and exporting to Excel.

232 lines (231 loc) 10.6 kB
var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); import { Row } from '../models/row'; import { Column } from '../models/column'; import { isNullOrUndefined } from '@syncfusion/ej2-base'; import { calculateAggregate, getUid } from '../base/util'; import { CellType } from '../base/enum'; import { Cell } from '../models/cell'; /** * Summary row model generator * * @hidden */ var SummaryModelGenerator = /** @class */ (function () { /** * Constructor for Summary row model generator * * @param {IGrid} parent - specifies the IGrid */ function SummaryModelGenerator(parent) { this.parent = parent; } SummaryModelGenerator.prototype.getData = function () { var _this = this; var rows = []; var row = this.parent.aggregates.slice(); for (var i = 0; i < row.length; i++) { var columns = row[parseInt(i.toString(), 10)].columns.filter(function (column) { return !(column.footerTemplate || column.groupFooterTemplate || column.groupCaptionTemplate) || _this.columnSelector(column); }); if (columns.length) { rows.push({ columns: columns }); } } return rows; }; SummaryModelGenerator.prototype.columnSelector = function (column) { return column.footerTemplate !== undefined; }; SummaryModelGenerator.prototype.getColumns = function (start) { var columns = []; if (this.parent.detailTemplate || !isNullOrUndefined(this.parent.childGrid)) { columns.push(new Column({})); } if (this.parent.allowGrouping) { for (var i = 0; i < this.parent.groupSettings.columns.length; i++) { columns.push(new Column({})); } } if (this.parent.isRowDragable() && !start) { columns.push(new Column({})); } columns.push.apply(columns, this.parent.getColumns()); return columns; }; SummaryModelGenerator.prototype.generateRows = function (input, args, start, end, columns) { if (input.length === 0) { if (args === undefined || !(args.count || args.loadSummaryOnEmpty)) { return []; } } var data = this.buildSummaryData(input, args); var rows = []; var row = this.getData(); for (var i = 0; i < row.length; i++) { rows.push(this.getGeneratedRow(row[parseInt(i.toString(), 10)], data[parseInt(i.toString(), 10)], args ? args.level : undefined, start, end, args ? args.parentUid : undefined, columns)); } return rows; }; SummaryModelGenerator.prototype.getGeneratedRow = function (summaryRow, data, raw, start, end, parentUid, columns) { var tmp = []; var indents = this.getIndentByLevel(); var isDetailGridAlone = !isNullOrUndefined(this.parent.childGrid); var indentLength = this.parent.getIndentCount(); if (this.parent.groupSettings.columns.length && this.parent.allowRowDragAndDrop) { indents.push('e-indentcelltop'); } else if (this.parent.isRowDragable() && !start) { indents = ['e-indentcelltop']; } var values = columns ? columns : this.getColumns(start); for (var i = 0; i < values.length; i++) { tmp.push(this.getGeneratedCell(values[parseInt(i.toString(), 10)], summaryRow, i >= indentLength ? this.getCellType() : i === 0 && (this.parent.childGrid || this.parent.detailTemplate) ? CellType.DetailFooterIntent : CellType.Indent, indents[parseInt(i.toString(), 10)], isDetailGridAlone)); } var row = new Row({ data: data, attributes: { class: 'e-summaryrow' } }); row.cells = tmp; row.uid = getUid('grid-row'); row.parentUid = parentUid; row.isAggregateRow = true; row.visible = tmp.some(function (cell) { return cell.isDataCell && cell.visible; }); return row; }; SummaryModelGenerator.prototype.getGeneratedCell = function (column, summaryRow, cellType, indent, isDetailGridAlone) { //Get the summary column by display var sColumn = summaryRow.columns.filter(function (scolumn) { return scolumn.columnName === column.field; })[0]; var attrs = { 'data-mappinguid': column.uid, 'data-index': column.index }; if (column.textAlign) { var alignmentClassMap = { right: 'e-rightalign', left: 'e-leftalign', center: 'e-centeralign', justify: 'e-justifyalign' }; if (alignmentClassMap[column.textAlign.toLowerCase()]) { attrs.class = alignmentClassMap[column.textAlign.toLowerCase()]; } } if (indent) { attrs.class = indent; } if (isNullOrUndefined(indent) && isDetailGridAlone) { attrs.class = 'e-detailindentcelltop'; } var opt = { 'visible': column.visible, 'isDataCell': !isNullOrUndefined(sColumn), 'isTemplate': sColumn && !isNullOrUndefined(sColumn.footerTemplate || sColumn.groupFooterTemplate || sColumn.groupCaptionTemplate), 'column': sColumn || {}, 'attributes': attrs, 'cellType': cellType }; opt.column.headerText = column.headerText; return new Cell(opt); }; SummaryModelGenerator.prototype.buildSummaryData = function (data, args) { var dummy = []; var summaryRows = this.getData(); var single = {}; for (var i = 0; i < summaryRows.length; i++) { single = {}; var column = summaryRows[parseInt(i.toString(), 10)].columns; for (var j = 0; j < column.length; j++) { single = this.setTemplate(column[parseInt(j.toString(), 10)], (args && args.aggregates) ? args : data, single); } dummy.push(single); } return dummy; }; SummaryModelGenerator.prototype.getIndentByLevel = function () { return this.parent.groupSettings.columns.map(function () { return 'e-indentcelltop'; }); }; SummaryModelGenerator.prototype.setTemplate = function (column, data, single) { var types = column.type; var helper = {}; var formatFn = column.getFormatter() || (function () { return function (a) { return a; }; })(); var group = data; if (!(types instanceof Array)) { types = [column.type]; } for (var i = 0; i < types.length; i++) { var key = column.field + ' - ' + types[parseInt(i.toString(), 10)].toLowerCase(); var disp = column.columnName; var disablePageWiseAggregatesGroup = this.parent.groupSettings.disablePageWiseAggregates && this.parent.groupSettings.columns.length && group.items ? true : false; var val = (types[parseInt(i.toString(), 10)] !== 'Custom' || disablePageWiseAggregatesGroup) && group.aggregates && key in group.aggregates ? group.aggregates["" + key] : calculateAggregate(types[parseInt(i.toString(), 10)], group.aggregates ? group : data, column, this.parent); single["" + disp] = single["" + disp] || {}; single["" + disp]["" + key] = val; single["" + disp][types[parseInt(i.toString(), 10)]] = !isNullOrUndefined(val) ? formatFn(val) : ' '; if (group.field) { single["" + disp].field = group.field; single["" + disp].key = group.key; } } helper.format = column.getFormatter(); column.setTemplate(helper); return single; }; SummaryModelGenerator.prototype.getCellType = function () { return CellType.Summary; }; return SummaryModelGenerator; }()); export { SummaryModelGenerator }; var GroupSummaryModelGenerator = /** @class */ (function (_super) { __extends(GroupSummaryModelGenerator, _super); function GroupSummaryModelGenerator() { return _super !== null && _super.apply(this, arguments) || this; } GroupSummaryModelGenerator.prototype.columnSelector = function (column) { return column.groupFooterTemplate !== undefined; }; GroupSummaryModelGenerator.prototype.getIndentByLevel = function (level) { if (level === void 0) { level = this.parent.groupSettings.columns.length; } if (this.parent.allowRowDragAndDrop && this.parent.groupSettings.columns.length) { level -= 1; } return this.parent.groupSettings.columns.map(function (v, indx) { return indx <= level - 1 ? '' : 'e-indentcelltop'; }); }; GroupSummaryModelGenerator.prototype.getCellType = function () { return CellType.GroupSummary; }; return GroupSummaryModelGenerator; }(SummaryModelGenerator)); export { GroupSummaryModelGenerator }; var CaptionSummaryModelGenerator = /** @class */ (function (_super) { __extends(CaptionSummaryModelGenerator, _super); function CaptionSummaryModelGenerator() { return _super !== null && _super.apply(this, arguments) || this; } CaptionSummaryModelGenerator.prototype.columnSelector = function (column) { return column.groupCaptionTemplate !== undefined; }; CaptionSummaryModelGenerator.prototype.getData = function () { var initVal = { columns: [] }; return [_super.prototype.getData.call(this).reduce(function (prev, cur) { prev.columns = prev.columns.concat(cur.columns); return prev; }, initVal)]; }; CaptionSummaryModelGenerator.prototype.isEmpty = function () { return (this.getData()[0].columns || []).length === 0; }; CaptionSummaryModelGenerator.prototype.getCellType = function () { return CellType.CaptionSummary; }; return CaptionSummaryModelGenerator; }(SummaryModelGenerator)); export { CaptionSummaryModelGenerator };