UNPKG

ag-grid

Version:

Advanced Javascript Datagrid. Supports raw Javascript, AngularJS 1.x, AngularJS 2.0 and Web Components

175 lines (148 loc) 7.75 kB
module ag.grid { export class ComponentUtil { public static SIMPLE_PROPERTIES = [ 'sortingOrder', 'icons','localeText','localeTextFunc', 'groupColumnDef','context','rowStyle','rowClass','headerCellRenderer', 'groupDefaultExpanded','slaveGrids','rowSelection' ]; public static SIMPLE_NUMBER_PROPERTIES = [ 'rowHeight','rowBuffer','colWidth' ]; public static SIMPLE_BOOLEAN_PROPERTIES = [ 'virtualPaging','toolPanelSuppressPivot','toolPanelSuppressValues','rowsAlreadyGrouped', 'suppressRowClickSelection','suppressCellSelection','suppressHorizontalScroll','debug', 'enableColResize','enableCellExpressions','enableSorting','enableServerSideSorting', 'enableFilter','enableServerSideFilter','angularCompileRows','angularCompileFilters', 'angularCompileHeaders','groupSuppressAutoColumn','groupSelectsChildren','groupHidePivotColumns', 'groupIncludeFooter','groupUseEntireRow','groupSuppressRow','groupSuppressBlankHeader','forPrint', 'suppressMenuHide','rowDeselection','unSortIcon','suppressMultiSort','suppressScrollLag', 'singleClickEdit' ]; public static WITH_IMPACT_NUMBER_PROPERTIES = ['pinnedColumnCount','headerHeight']; public static WITH_IMPACT_BOOLEAN_PROPERTIES = ['groupHeaders','showToolPanel']; public static WITH_IMPACT_OTHER_PROPERTIES = [ 'rowData','floatingTopRowData','floatingBottomRowData','groupKeys', 'groupAggFields','columnDefs','datasource','quickFilterText']; public static CALLBACKS = ['groupRowInnerRenderer', 'groupRowRenderer', 'groupAggFunction', 'isScrollLag','isExternalFilterPresent','doesExternalFilterPass','getRowClass','getRowStyle', 'headerCellRenderer']; public static ALL_PROPERTIES = ComponentUtil.SIMPLE_PROPERTIES .concat(ComponentUtil.SIMPLE_NUMBER_PROPERTIES) .concat(ComponentUtil.SIMPLE_BOOLEAN_PROPERTIES) .concat(ComponentUtil.WITH_IMPACT_NUMBER_PROPERTIES) .concat(ComponentUtil.WITH_IMPACT_BOOLEAN_PROPERTIES) .concat(ComponentUtil.WITH_IMPACT_OTHER_PROPERTIES); public static copyAttributesToGridOptions(gridOptions: GridOptions, component: any): GridOptions { // create empty grid options if none were passed if (typeof gridOptions !== 'object') { gridOptions = <GridOptions> {}; } // to allow array style lookup in TypeScript, take type away from 'this' and 'gridOptions' var pGridOptions = <any>gridOptions; // add in all the simple properties ComponentUtil.SIMPLE_PROPERTIES.concat(ComponentUtil.WITH_IMPACT_OTHER_PROPERTIES).forEach( (key)=> { if (typeof (component)[key] !== 'undefined') { pGridOptions[key] = component[key]; } }); ComponentUtil.SIMPLE_BOOLEAN_PROPERTIES.concat(ComponentUtil.WITH_IMPACT_BOOLEAN_PROPERTIES).forEach( (key)=> { if (typeof (component)[key] !== 'undefined') { pGridOptions[key] = ComponentUtil.toBoolean(component[key]); } }); ComponentUtil.SIMPLE_NUMBER_PROPERTIES.concat(ComponentUtil.WITH_IMPACT_NUMBER_PROPERTIES).forEach( (key)=> { if (typeof (component)[key] !== 'undefined') { pGridOptions[key] = ComponentUtil.toNumber(component[key]); } }); return gridOptions; } public static processOnChange(changes: any, gridOptions: GridOptions, component: any): void { if (!component._initialised || !changes) { return; } // to allow array style lookup in TypeScript, take type away from 'this' and 'gridOptions' //var pThis = <any>this; var pGridOptions = <any> gridOptions; // check if any change for the simple types, and if so, then just copy in the new value ComponentUtil.SIMPLE_PROPERTIES.forEach( (key)=> { if (changes[key]) { pGridOptions[key] = changes[key].currentValue; } }); ComponentUtil.SIMPLE_BOOLEAN_PROPERTIES.forEach( (key)=> { if (changes[key]) { pGridOptions[key] = ComponentUtil.toBoolean(changes[key].currentValue); } }); ComponentUtil.SIMPLE_NUMBER_PROPERTIES.forEach( (key)=> { if (changes[key]) { pGridOptions[key] = ComponentUtil.toNumber(changes[key].currentValue); } }); if (changes.showToolPanel) { component.api.showToolPanel(component.showToolPanel); } if (changes.quickFilterText) { component.api.setQuickFilter(component.quickFilterText); } if (changes.rowData) { component.api.setRows(component.rowData); } if (changes.floatingTopRowData) { component.api.setFloatingTopRowData(component.floatingTopRowData); } if (changes.floatingBottomRowData) { component.api.setFloatingBottomRowData(component.floatingBottomRowData); } if (changes.columnDefs) { component.api.setColumnDefs(component.columnDefs); } if (changes.datasource) { component.api.setDatasource(component.datasource); } if (changes.pinnedColumnCount) { component.columnApi.setPinnedColumnCount(component.pinnedColumnCount); } if (changes.pinnedColumnCount) { component.columnApi.setPinnedColumnCount(component.pinnedColumnCount); } if (changes.groupHeaders) { component.api.setGroupHeaders(component.groupHeaders); } if (changes.headerHeight) { component.api.setHeaderHeight(component.headerHeight); } // need to review these, they are not impacting anything, they should // call something on the API to update the grid if (changes.groupKeys) { component.gridOptions.groupKeys = component.groupKeys; } if (changes.groupAggFunction) { component.gridOptions.groupAggFunction = component.groupAggFunction; } if (changes.groupAggFields) { component.gridOptions.groupAggFields = component.groupAggFields; } } public static toBoolean(value: any): boolean { if (typeof value === 'boolean') { return value; } else if (typeof value === 'string') { // for boolean, compare to empty String to allow attributes appearing with // not value to be treated as 'true' return value.toUpperCase() === 'TRUE' || value==''; } else { return false; } } public static toNumber(value: any): number { if (typeof value === 'number') { return value; } else if (typeof value === 'string') { return Number(value); } else { return undefined; } } } }