ag-grid
Version:
Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
229 lines (228 loc) • 13.9 kB
JavaScript
/**
* 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";
Object.defineProperty(exports, "__esModule", { value: true });
var gridOptionsWrapper_1 = require("./gridOptionsWrapper");
var selectionController_1 = require("./selectionController");
var columnApi_1 = require("./columnController/columnApi");
var columnController_1 = require("./columnController/columnController");
var rowRenderer_1 = require("./rendering/rowRenderer");
var headerRootComp_1 = require("./headerRendering/headerRootComp");
var filterManager_1 = require("./filter/filterManager");
var valueService_1 = require("./valueService/valueService");
var eventService_1 = require("./eventService");
var gridPanel_1 = require("./gridPanel/gridPanel");
var gridApi_1 = require("./gridApi");
var balancedColumnTreeBuilder_1 = require("./columnController/balancedColumnTreeBuilder");
var displayedGroupCreator_1 = require("./columnController/displayedGroupCreator");
var expressionService_1 = require("./valueService/expressionService");
var templateService_1 = require("./templateService");
var popupService_1 = require("./widgets/popupService");
var logger_1 = require("./logger");
var columnUtils_1 = require("./columnController/columnUtils");
var autoWidthCalculator_1 = require("./rendering/autoWidthCalculator");
var horizontalResizeService_1 = require("./headerRendering/horizontalResizeService");
var context_1 = require("./context/context");
var csvCreator_1 = require("./csvCreator");
var gridCore_1 = require("./gridCore");
var standardMenu_1 = require("./headerRendering/standardMenu");
var dragAndDropService_1 = require("./dragAndDrop/dragAndDropService");
var dragService_1 = require("./dragAndDrop/dragService");
var sortController_1 = require("./sortController");
var focusedCellController_1 = require("./focusedCellController");
var mouseEventService_1 = require("./gridPanel/mouseEventService");
var cellNavigationService_1 = require("./cellNavigationService");
var utils_1 = require("./utils");
var filterStage_1 = require("./rowModels/clientSide/filterStage");
var sortStage_1 = require("./rowModels/clientSide/sortStage");
var flattenStage_1 = require("./rowModels/clientSide/flattenStage");
var cellEditorFactory_1 = require("./rendering/cellEditorFactory");
var events_1 = require("./events");
var infiniteRowModel_1 = require("./rowModels/infinite/infiniteRowModel");
var clientSideRowModel_1 = require("./rowModels/clientSide/clientSideRowModel");
var cellRendererFactory_1 = require("./rendering/cellRendererFactory");
var cellRendererService_1 = require("./rendering/cellRendererService");
var valueFormatterService_1 = require("./rendering/valueFormatterService");
var agCheckbox_1 = require("./widgets/agCheckbox");
var baseFrameworkFactory_1 = require("./baseFrameworkFactory");
var scrollVisibleService_1 = require("./gridPanel/scrollVisibleService");
var downloader_1 = require("./downloader");
var xmlFactory_1 = require("./xmlFactory");
var gridSerializer_1 = require("./gridSerializer");
var stylingService_1 = require("./styling/stylingService");
var columnHoverService_1 = require("./rendering/columnHoverService");
var columnAnimationService_1 = require("./rendering/columnAnimationService");
var sortService_1 = require("./rowNodes/sortService");
var filterService_1 = require("./rowNodes/filterService");
var autoGroupColService_1 = require("./columnController/autoGroupColService");
var paginationProxy_1 = require("./rowModels/paginationProxy");
var immutableService_1 = require("./rowModels/clientSide/immutableService");
var constants_1 = require("./constants");
var valueCache_1 = require("./valueService/valueCache");
var changeDetectionService_1 = require("./valueService/changeDetectionService");
var alignedGridsService_1 = require("./alignedGridsService");
var pinnedRowModel_1 = require("./rowModels/pinnedRowModel");
var componentResolver_1 = require("./components/framework/componentResolver");
var componentRecipes_1 = require("./components/framework/componentRecipes");
var componentProvider_1 = require("./components/framework/componentProvider");
var agComponentUtils_1 = require("./components/framework/agComponentUtils");
var componentMetadataProvider_1 = require("./components/framework/componentMetadataProvider");
var beans_1 = require("./rendering/beans");
var environment_1 = require("./environment");
var animationFrameService_1 = require("./misc/animationFrameService");
var navigationService_1 = require("./gridPanel/navigationService");
var heightScaler_1 = require("./rendering/heightScaler");
var selectableService_1 = require("./rowNodes/selectableService");
var autoHeightCalculator_1 = require("./rendering/autoHeightCalculator");
var paginationComp_1 = require("./rowModels/pagination/paginationComp");
var Grid = (function () {
function Grid(eGridDiv, gridOptions, params) {
if (!eGridDiv) {
console.error('ag-Grid: no div element provided to the grid');
}
if (!gridOptions) {
console.error('ag-Grid: no gridOptions provided to the grid');
}
var rowModelClass = this.getRowModelClass(gridOptions);
var enterprise = utils_1.Utils.exists(Grid.enterpriseBeans);
var frameworkFactory = params ? params.frameworkFactory : null;
if (utils_1.Utils.missing(frameworkFactory)) {
frameworkFactory = new baseFrameworkFactory_1.BaseFrameworkFactory();
}
var overrideBeans = [];
if (Grid.enterpriseBeans) {
overrideBeans = overrideBeans.concat(Grid.enterpriseBeans);
}
if (Grid.frameworkBeans) {
overrideBeans = overrideBeans.concat(Grid.frameworkBeans);
}
var seed = {
enterprise: enterprise,
gridOptions: gridOptions,
eGridDiv: eGridDiv,
$scope: params ? params.$scope : null,
$compile: params ? params.$compile : null,
quickFilterOnScope: params ? params.quickFilterOnScope : null,
globalEventListener: params ? params.globalEventListener : null,
frameworkFactory: frameworkFactory
};
if (params && params.seedBeanInstances) {
utils_1.Utils.assign(seed, params.seedBeanInstances);
}
var components = [
{ componentName: 'AgCheckbox', theClass: agCheckbox_1.AgCheckbox },
{ componentName: 'AgGridComp', theClass: gridPanel_1.GridPanel },
{ componentName: 'AgHeaderRoot', theClass: headerRootComp_1.HeaderRootComp },
{ componentName: 'AgPagination', theClass: paginationComp_1.PaginationComp },
];
if (Grid.enterpriseComponents) {
components = components.concat(Grid.enterpriseComponents);
}
var contextParams = {
overrideBeans: overrideBeans,
seed: seed,
//Careful with the order of the beans here, there are dependencies between them that need to be kept
beans: [rowModelClass, beans_1.Beans, paginationProxy_1.PaginationAutoPageSizeService, gridApi_1.GridApi, componentProvider_1.ComponentProvider, agComponentUtils_1.AgComponentUtils, componentMetadataProvider_1.ComponentMetadataProvider,
componentProvider_1.ComponentProvider, componentResolver_1.ComponentResolver, componentRecipes_1.ComponentRecipes, heightScaler_1.HeightScaler, autoHeightCalculator_1.AutoHeightCalculator,
cellRendererFactory_1.CellRendererFactory, horizontalResizeService_1.HorizontalResizeService, pinnedRowModel_1.PinnedRowModel, dragService_1.DragService,
displayedGroupCreator_1.DisplayedGroupCreator, eventService_1.EventService, gridOptionsWrapper_1.GridOptionsWrapper, selectionController_1.SelectionController,
filterManager_1.FilterManager, columnController_1.ColumnController, paginationProxy_1.PaginationProxy, rowRenderer_1.RowRenderer, expressionService_1.ExpressionService,
balancedColumnTreeBuilder_1.BalancedColumnTreeBuilder, csvCreator_1.CsvCreator, downloader_1.Downloader, xmlFactory_1.XmlFactory, gridSerializer_1.GridSerializer, templateService_1.TemplateService,
navigationService_1.NavigationService, popupService_1.PopupService, valueCache_1.ValueCache, valueService_1.ValueService, alignedGridsService_1.AlignedGridsService,
logger_1.LoggerFactory, columnUtils_1.ColumnUtils, autoWidthCalculator_1.AutoWidthCalculator, popupService_1.PopupService, gridCore_1.GridCore, standardMenu_1.StandardMenuFactory,
dragAndDropService_1.DragAndDropService, columnApi_1.ColumnApi, focusedCellController_1.FocusedCellController, mouseEventService_1.MouseEventService,
cellNavigationService_1.CellNavigationService, filterStage_1.FilterStage, sortStage_1.SortStage, flattenStage_1.FlattenStage, filterService_1.FilterService,
cellEditorFactory_1.CellEditorFactory, cellRendererService_1.CellRendererService, valueFormatterService_1.ValueFormatterService, stylingService_1.StylingService, scrollVisibleService_1.ScrollVisibleService,
columnHoverService_1.ColumnHoverService, columnAnimationService_1.ColumnAnimationService, sortService_1.SortService, selectableService_1.SelectableService, autoGroupColService_1.AutoGroupColService,
immutableService_1.ImmutableService, changeDetectionService_1.ChangeDetectionService, environment_1.Environment, animationFrameService_1.AnimationFrameService, sortController_1.SortController],
components: components,
debug: !!gridOptions.debug
};
var isLoggingFunc = function () { return contextParams.debug; };
this.context = new context_1.Context(contextParams, new logger_1.Logger('Context', isLoggingFunc));
this.setColumnsAndData();
this.dispatchGridReadyEvent(gridOptions);
if (gridOptions.debug) {
console.log('ag-Grid -> initialised successfully, enterprise = ' + enterprise);
}
}
Grid.setEnterpriseBeans = function (enterpriseBeans, rowModelClasses) {
this.enterpriseBeans = enterpriseBeans;
// the enterprise can inject additional row models. this is how it injects the viewportRowModel
utils_1.Utils.iterateObject(rowModelClasses, function (key, value) { return Grid.RowModelClasses[key] = value; });
};
Grid.setEnterpriseComponents = function (components) {
this.enterpriseComponents = components;
};
Grid.setFrameworkBeans = function (frameworkBeans) {
this.frameworkBeans = frameworkBeans;
};
Grid.prototype.setColumnsAndData = function () {
var gridOptionsWrapper = this.context.getBean('gridOptionsWrapper');
var columnController = this.context.getBean('columnController');
var rowModel = this.context.getBean('rowModel');
var columnDefs = gridOptionsWrapper.getColumnDefs();
var rowData = gridOptionsWrapper.getRowData();
var nothingToSet = utils_1.Utils.missing(columnDefs) && utils_1.Utils.missing(rowData);
if (nothingToSet) {
return;
}
if (utils_1.Utils.exists(columnDefs)) {
columnController.setColumnDefs(columnDefs, "gridInitializing");
}
if (utils_1.Utils.exists(rowData) && rowModel.getType() === constants_1.Constants.ROW_MODEL_TYPE_CLIENT_SIDE) {
var clientSideRowModel = rowModel;
clientSideRowModel.setRowData(rowData);
}
};
Grid.prototype.dispatchGridReadyEvent = function (gridOptions) {
var eventService = this.context.getBean('eventService');
var readyEvent = {
type: events_1.Events.EVENT_GRID_READY,
api: gridOptions.api,
columnApi: gridOptions.columnApi
};
eventService.dispatchEvent(readyEvent);
};
Grid.prototype.getRowModelClass = function (gridOptions) {
var rowModelType = gridOptions.rowModelType;
//TODO: temporary measure before 'enterprise' is completely removed (similar handling in gridOptionsWrapper is also required)
rowModelType = rowModelType === 'enterprise' ? constants_1.Constants.ROW_MODEL_TYPE_SERVER_SIDE : rowModelType;
if (utils_1.Utils.exists(rowModelType)) {
var rowModelClass = Grid.RowModelClasses[rowModelType];
if (utils_1.Utils.exists(rowModelClass)) {
return rowModelClass;
}
else {
if (rowModelType === 'normal') {
console.warn("ag-Grid: normal rowModel deprecated. Should now be called client side row model instead.");
return clientSideRowModel_1.ClientSideRowModel;
}
console.error('ag-Grid: could not find matching row model for rowModelType ' + rowModelType);
if (rowModelType === constants_1.Constants.ROW_MODEL_TYPE_VIEWPORT) {
console.error('ag-Grid: rowModelType viewport is only available in ag-Grid Enterprise');
}
if (rowModelType === constants_1.Constants.ROW_MODEL_TYPE_SERVER_SIDE) {
console.error('ag-Grid: rowModelType server side is only available in ag-Grid Enterprise');
}
}
}
return clientSideRowModel_1.ClientSideRowModel;
};
;
Grid.prototype.destroy = function () {
this.context.destroy();
};
// the default is ClientSideRowModel, which is also used for pagination.
// the enterprise adds viewport to this list.
Grid.RowModelClasses = {
infinite: infiniteRowModel_1.InfiniteRowModel,
clientSide: clientSideRowModel_1.ClientSideRowModel
};
return Grid;
}());
exports.Grid = Grid;