What's New
See the release post for details of what's new in version 31.1.
Codemods
Follow these steps to upgrade your project's AG Grid version to 31.1.0
:
Locate your project's
package.json
and note the version of AG Grid that you are currently using.Update any AG Grid dependencies listed in your project's
package.json
to version31.1.0
.Open a terminal and navigate to your project's root folder.
Run the
migrate
command of version31.1
of the AG Grid codemod runner, where$FROM_VERSION
refers to your project's existing AG Grid version:npx @ag-grid-devtools/cli@31.1 migrate --from=$FROM_VERSION
This will update your project's source files to prepare for the new release.
By default the Codemod runner will locate all source files within the current directory. For projects with more specific requirements, pass a list of input files to the
migrate
command, or specify the--help
argument to see more fine-grained usage instructions.
The Codemod runner will check the state of your project to ensure that you don't lose any work. If you would rather see a diff of the changes instead of applying them, pass the --dry-run
argument.
The codemod only transforms source files that make use of deprecated features, so if you aren't currently making use of any of those APIs your source code will be unaffected by the codemod.
See the Codemods documentation for more details.
Migrating Custom Components to Use reactiveCustomComponents Option
Custom components can now be created more easily by setting reactiveCustomComponents
. Custom components built in an imperative way (without setting reactiveCustomComponents
) may need to be rebuilt in order to work with the setting enabled. Using custom components built in an imperative way is now deprecated, and in AG Grid v32 the reactiveCustomComponents
option will be true
by default, and custom components built in an imperative way will still be supported as an optional behaviour.
Please note that enabling this setting affects all custom components and you cannot use a mix of reactive custom components and imperative custom components in the same grid instance.
Custom Cell Editor Components
getValue
is no longer used. The component will be passedvalue
as a prop with the latest value (andinitialValue
with the value when editing started). When the value is updated in the UI, the component should call the proponValueChange
with the updated value.- Any other date methods defined via
useImperativeHandle
should now be defined as callbacks, and passed to the new hookuseGridCellEditor
. These are all optional; the hook is only needed if the callbacks are required. - If using
api.getCellEditorInstances
, the instance returned will now be a wrapper. To get the React custom cell editor component, use the helper functiongetInstance
with the returned wrapper instance. See Accessing Cell Editor Instances.
See Implementing a Cell Editor Component for examples and more details on the interfaces.
Custom Date Components
getDate
andsetDate
are no longer used. The component will be passeddate
as a prop with the latest date. When the date is updated in the UI, the component should call the proponDateChange
with the updated date (instead of calling the proponDateChanged
when the date changes).- Any other editing methods defined via
useImperativeHandle
should now be defined as callbacks, and passed to the new hookuseGridDate
. These are all optional; the hook is only needed if the callbacks are required.
See Implementing a Date Component for examples and more details on the interfaces.
Custom Filter Components
isFilterActive
method is no longer used. If the model isnull
, the filter is treated as inactive.getModel
andsetModel
are no longer used. The component will be passedmodel
as a prop with the latest model. When the filter is updated in the UI, the component should call the proponModelChange
with the updated model (instead of calling the propfilterChangedCallback
when the model changes).- The
filterModifiedCallback
prop is replaced with the proponUiChange
. - Any other filter methods defined via
useImperativeHandle
should now be defined as callbacks, and passed to the new hookuseGridFilter
.doesFilterPass
is a mandatory callback; all others are optional. - If using
api.getColumnFilterInstance
(orapi.getFilterInstance
, which has been deprecated byapi.getColumnFilterInstance
), the instance returned will now be a wrapper. To get the React custom filter component, use the helper functiongetInstance
with the returned wrapper instance. See Accessing the Component Instance.
See Implementing a Filter Component for examples and more details on the interfaces.
Custom Floating Filter Components
onParentModelChanged
is no longer used. The component will be passedmodel
as a prop with the latest model. When the filter is updated in the UI, the component should call the proponModelChange
with the updated model (instead of calling the propparentFilterInstance
and setting the updated value directly on the parent filter instance when the model changes).- Any other filter methods defined via
useImperativeHandle
should now be defined as callbacks, and passed to the new hookuseGridFloatingFilter
. These are all optional; the hook is only needed if the callbacks are required.
See Implementing a Floating Filter Component for examples and more details on the interfaces.
Custom Status Bar Panel Components
- If using
api.getStatusPanel
, the instance returned will now be a wrapper. To get the React custom status bar panel component, use the helper functiongetInstance
with the returned wrapper instance. See Accessing Status Bar Panel Instances.
Deprecations
This release includes the following deprecations:
React
AgReactUiProps
- deprecated, useAgGridReactProps
instead.AgGridReactProps.disableStaticMarkup
,AgGridReactProps.legacyComponentRendering
- deprecated, as they are no longer used.
The following React custom component interfaces are deprecated along with their methods:
getReactContainerStyle
andgetReactContainerClasses
- deprecated, apply styling directly to the CSS class.ag-react-container
if needed.IHeaderGroupReactComp
- deprecated, useIHeaderGroup
instead.IHeaderReactComp
- deprecated, useIHeader
instead.IDateReactComp
- deprecated, useIDate
instead.IFilterReactComp
- deprecated, useIFilter
instead.IFloatingFilterReactComp
- deprecated, useIFloatingFilter
instead.ICellRendererReactComp
- deprecated, useICellRenderer
instead.ICellEditorReactComp
- deprecated, useICellEditor
instead.ILoadingCellRendererReactComp
- deprecated, no interface needed.ILoadingOverlayReactComp
- deprecated, useILoadingOverlay
instead.INoRowsOverlayReactComp
- deprecated, useINoRowsOverlay
instead.IStatusPanelReactComp
- deprecated, useIStatusPanel
instead.IToolPanelReactComp
- deprecated, useIToolPanel
instead.ITooltipReactComp
- deprecated, no interface needed.
GridOptions
gridOptions.cellFlashDelay
- deprecated, usegridOptions.cellFlashDuration
instead.gridOptions.cellFadeDelay
- deprecated, usegridOptions.cellFadeDuration
instead.colDef.floatingFilterComponentParams.suppressFilterButton
- deprecated, usecolDef.suppressFloatingFilterButton
instead.suppressServerSideInfiniteScroll
- deprecated without replacement.serverSideSortOnServer
- deprecated without replacement.serverSideFilterOnServer
- deprecated without replacement.
Column Filters
api.getFilterInstance
- deprecated, useapi.getColumnFilterInstance
instead. To get/set individual filter models, useapi.getColumnFilterModel
orapi.setColumnFilterModel
instead.
Column API
suppressMenu
- deprecated, usesuppressHeaderMenuButton
instead.columnsMenuParams
- deprecated, usecolumnChooserParams
instead.column.getMenuTabs
- deprecated, usecolumns.getColDef.menuTabs ?? defaultValues
instead.
Grid API
getModel
- deprecated, use grid API methods listed in Accessing Data.getModel().getRow(index)
- deprecated, useapi.getDisplayedRowAtIndex(index)
instead.getModel().getRowNode(id)
- deprecated, useapi.getRowNode(id)
instead.getModel().getRowCount()
- deprecated, useapi.getDisplayedRowCount()
instead.getModel().isEmpty()
- deprecated, use!!api.getDisplayedRowCount()
instead.getModel().forEachNode()
- deprecated, useapi.forEachNode()
instead.getFirstDisplayedRow
- deprecated, useapi.getFirstDisplayedRowIndex
instead.getLastDisplayedRow
- deprecated, useapi.getLastDisplayedRowIndex
instead.flashCells
,flashDelay
andfadeDelay
params are deprecated in favor offlashDuration
andfadeDuration
params.showColumnMenuAfterButtonClick
- deprecated, useIHeaderParams.showColumnMenu
within a header component, orapi.showColumnMenu
elsewhere.showColumnMenuAfterMouseClick
- deprecated, useIHeaderParams.showColumnMenuAfterMouseClick
within a header component, orapi.showColumnMenu
elsewhere.removeRowGroupColumn
- deprecated, useremoveRowGroupColumns
providing the single string input param in an array instead.addRowGroupColumn
- deprecated, useaddRowGroupColumns
providing the single string input param in an array instead.setColumnPinned
- deprecated, usesetColumnsPinned
providing the single string input param in an array instead.removePivotColumn
- deprecated, useremovePivotColumns
providing the single string input param in an array instead.addPivotColumn
- deprecated, useaddPivotColumns
providing the single string input param in an array instead.addAggFunc
- deprecated, useaddAggFuncs
providing the single string input param in an array instead.removeValueColumn
- deprecated, useremoveValueColumns
providing the single string input param in an array instead.addValueColumn
- deprecated, useaddValueColumns
providing the single string input param in an array instead.autoSizeColumn
- deprecated, useautoSizeColumns
providing the single string input param in an array instead.moveColumn
- deprecated, usemoveColumns
providing the single string input param in an array instead.setColumnWidth
- deprecated, usesetColumnWidths
providing the single string input param in an array instead.setColumnVisible
- deprecated, usesetColumnsVisible
providing the single string input param in an array instead.
Custom Components
- When implementing a custom date component,
IDate.onParamsUpdated
has been deprecated in favour ofIDate.refresh
. - When implementing a custom floating filter component,
IFloatingFilter.onParamsUpdated
has been deprecated in favour ofIFloatingFilter.refresh
.