UNPKG

ag-grid

Version:

Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components

174 lines (173 loc) 9.32 kB
/** * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components * @version v18.1.2 * @link http://www.ag-grid.com/ * @license MIT */ "use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); var utils_1 = require("../utils"); var gridOptionsWrapper_1 = require("../gridOptionsWrapper"); var context_1 = require("../context/context"); var dragAndDropService_1 = require("../dragAndDrop/dragAndDropService"); var columnController_1 = require("../columnController/columnController"); var eventService_1 = require("../eventService"); var events_1 = require("../events"); var headerRowComp_1 = require("./headerRowComp"); var bodyDropTarget_1 = require("./bodyDropTarget"); var column_1 = require("../entities/column"); var scrollVisibleService_1 = require("../gridPanel/scrollVisibleService"); var HeaderContainer = (function () { function HeaderContainer(eContainer, eViewport, pinned) { this.headerRowComps = []; this.eContainer = eContainer; this.pinned = pinned; this.eViewport = eViewport; } HeaderContainer.prototype.registerGridComp = function (gridPanel) { this.setupDragAndDrop(gridPanel); }; HeaderContainer.prototype.forEachHeaderElement = function (callback) { this.headerRowComps.forEach(function (headerRowComp) { return headerRowComp.forEachHeaderElement(callback); }); }; HeaderContainer.prototype.init = function () { this.scrollWidth = this.gridOptionsWrapper.getScrollbarWidth(); // if value changes, then if not pivoting, we at least need to change the label eg from sum() to avg(), // if pivoting, then the columns have changed this.eventService.addEventListener(events_1.Events.EVENT_COLUMN_VALUE_CHANGED, this.onColumnValueChanged.bind(this)); this.eventService.addEventListener(events_1.Events.EVENT_COLUMN_ROW_GROUP_CHANGED, this.onColumnRowGroupChanged.bind(this)); this.eventService.addEventListener(events_1.Events.EVENT_GRID_COLUMNS_CHANGED, this.onGridColumnsChanged.bind(this)); this.eventService.addEventListener(events_1.Events.EVENT_SCROLL_VISIBILITY_CHANGED, this.onScrollVisibilityChanged.bind(this)); this.eventService.addEventListener(events_1.Events.EVENT_COLUMN_RESIZED, this.onColumnResized.bind(this)); this.eventService.addEventListener(events_1.Events.EVENT_DISPLAYED_COLUMNS_CHANGED, this.onDisplayedColumnsChanged.bind(this)); }; // if row group changes, that means we may need to add aggFunc's to the column headers, // if the grid goes from no aggregation (ie no grouping) to grouping HeaderContainer.prototype.onColumnRowGroupChanged = function () { this.onGridColumnsChanged(); }; // if the agg func of a column changes, then we may need to update the agg func in columns header HeaderContainer.prototype.onColumnValueChanged = function () { this.onGridColumnsChanged(); }; HeaderContainer.prototype.onColumnResized = function () { this.setWidthOfPinnedContainer(); }; HeaderContainer.prototype.onDisplayedColumnsChanged = function () { this.setWidthOfPinnedContainer(); }; HeaderContainer.prototype.onScrollVisibilityChanged = function () { this.setWidthOfPinnedContainer(); }; HeaderContainer.prototype.setWidthOfPinnedContainer = function () { var pinningLeft = this.pinned === column_1.Column.PINNED_LEFT; var pinningRight = this.pinned === column_1.Column.PINNED_RIGHT; if (pinningLeft || pinningRight) { // size to fit all columns var width = pinningLeft ? this.columnController.getPinnedLeftContainerWidth() : this.columnController.getPinnedRightContainerWidth(); // if there is a scroll showing (and taking up space, so Windows, and not iOS) // in the body, then we add extra space to keep header aligned with the body, // as body width fits the cols and the scrollbar var addPaddingForScrollbar = pinningLeft ? this.scrollVisibleService.isLeftVerticalScrollShowing() : this.scrollVisibleService.isRightVerticalScrollShowing(); if (addPaddingForScrollbar) { width += this.scrollWidth; } this.eContainer.style.width = width + 'px'; } }; HeaderContainer.prototype.destroy = function () { this.removeHeaderRowComps(); }; // grid cols have changed - this also means the number of rows in the header can have // changed. so we remove all the old rows and insert new ones for a complete refresh HeaderContainer.prototype.onGridColumnsChanged = function () { this.removeHeaderRowComps(); this.createHeaderRowComps(); }; // we expose this for gridOptions.api.refreshHeader() to call HeaderContainer.prototype.refresh = function () { this.onGridColumnsChanged(); }; HeaderContainer.prototype.setupDragAndDrop = function (gridComp) { var dropContainer = this.eViewport ? this.eViewport : this.eContainer; var bodyDropTarget = new bodyDropTarget_1.BodyDropTarget(this.pinned, dropContainer); this.context.wireBean(bodyDropTarget); bodyDropTarget.registerGridComp(gridComp); }; HeaderContainer.prototype.removeHeaderRowComps = function () { this.headerRowComps.forEach(function (headerRowComp) { headerRowComp.destroy(); }); this.headerRowComps.length = 0; utils_1.Utils.removeAllChildren(this.eContainer); }; HeaderContainer.prototype.createHeaderRowComps = function () { // if we are displaying header groups, then we have many rows here. // go through each row of the header, one by one. var rowCount = this.columnController.getHeaderRowCount(); for (var dept = 0; dept < rowCount; dept++) { var groupRow = dept !== (rowCount - 1); var type = groupRow ? headerRowComp_1.HeaderRowType.COLUMN_GROUP : headerRowComp_1.HeaderRowType.COLUMN; var headerRowComp = new headerRowComp_1.HeaderRowComp(dept, type, this.pinned, this.dropTarget); this.context.wireBean(headerRowComp); this.headerRowComps.push(headerRowComp); this.eContainer.appendChild(headerRowComp.getGui()); } var includeFloatingFilterRow = this.gridOptionsWrapper.isFloatingFilter() && !this.columnController.isPivotMode(); if (includeFloatingFilterRow) { var headerRowComp = new headerRowComp_1.HeaderRowComp(rowCount, headerRowComp_1.HeaderRowType.FLOATING_FILTER, this.pinned, this.dropTarget); this.context.wireBean(headerRowComp); this.headerRowComps.push(headerRowComp); this.eContainer.appendChild(headerRowComp.getGui()); } }; __decorate([ context_1.Autowired('gridOptionsWrapper'), __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper) ], HeaderContainer.prototype, "gridOptionsWrapper", void 0); __decorate([ context_1.Autowired('context'), __metadata("design:type", context_1.Context) ], HeaderContainer.prototype, "context", void 0); __decorate([ context_1.Autowired('$scope'), __metadata("design:type", Object) ], HeaderContainer.prototype, "$scope", void 0); __decorate([ context_1.Autowired('dragAndDropService'), __metadata("design:type", dragAndDropService_1.DragAndDropService) ], HeaderContainer.prototype, "dragAndDropService", void 0); __decorate([ context_1.Autowired('columnController'), __metadata("design:type", columnController_1.ColumnController) ], HeaderContainer.prototype, "columnController", void 0); __decorate([ context_1.Autowired('eventService'), __metadata("design:type", eventService_1.EventService) ], HeaderContainer.prototype, "eventService", void 0); __decorate([ context_1.Autowired('scrollVisibleService'), __metadata("design:type", scrollVisibleService_1.ScrollVisibleService) ], HeaderContainer.prototype, "scrollVisibleService", void 0); __decorate([ context_1.PostConstruct, __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0) ], HeaderContainer.prototype, "init", null); return HeaderContainer; }()); exports.HeaderContainer = HeaderContainer;