@devexpress/dx-react-grid
Advanced tools
Changelog
1.0.0-rc.1 (2018-01-18)
react-grid: The draftGrouping
getter does not contain information about draft mode anymore. The draftGroupingChange
, and cancelGroupingChange
actions have been renamed to draftColumnGrouping
, and cancelColumnGroupingDraft
.
react-grid: The type of the TableColumnResizing plugin's columnWidths
and defaultColumnWidths
properties has been changed from object to array to improve API consistency.
Before:
<Grid>
<TableColumnResizing columnWidths={{ a: 120 }} />
</Grid>
After:
<Grid>
<TableColumnResizing columnWidths={[{ columnName: a, width: 120 }]} />
</Grid>
react-grid: The changeDraftTableColumnWidth
action has been renamed to draftTableColumnWidth
. The functionality that resets draft column width has been moved from from the draftTableColumnWidth
action into the separate cancelTableColumnWidthDraft
action.
The onDraftWidthChange
event of the TableHeaderRow's cellComponent has been renamed to onWidthDraft
. The functionality that cancels draft width changes has been extracted to the onWidthDraftCancel
event.
react-grid: The the GroupingState plugin's groupByColumn
action has been renamed to changeColumnGrouping
.
react-grid: We changed the selection
getter's data type from Set
to Array
to improve the API consistency.
react-grid: We renamed the following TableColumnVisibility plugin's properties to improve the API consistency:
hiddenColumns
=> hiddenColumnNames
defaultHiddenColumns
=> defaultHiddenColumnNames
onHiddenColumnsChange
=> onHiddenColumnNamesChange
The hiddenColumns
getter has been renamed to hiddenColumnNames
.
react-grid: The following RowDetailState plugin's properties have been renamed to improve the API consistency:
expandedRows
=> expandedRowIds
defaultExpandedRows
=> defaultExpandedRowIds
onExpandedRowsChange
=> onExpandedRowIdsChange
The expandedRows
getter has been renamed to expandedRowIds
.
react-grid: The following EditingState plugin's properties have been renamed to improve the API consistency:
changedRows
=> rowChanges
defaultChangedRows
=> defaultRowChanges
onChangedRowsChange
=> onRowChangesChange
The changedRows
getter has been renamed to rowChanges
.
react-grid: The FilteringState plugin's setColumnFilter
action has been renamed to changeColumnFilter
.
react-grid: The RowDetailState plugin's setDetailRowExpanded
action has been renamed to toggleDetailRowExpanded
.
react-grid: The toggleSelection
action's selected
parameter has been renamed to state
.
react-grid: We changed the expandedGroups
getter's data type from Set
to Array
to improve the API consistency.
react-grid: The following EditingState plugin's properties have been renamed to improve the API consistency:
deletedRows
=> deletedRowIds
defaultDeletedRows
=> defaultDeletedRowIds
onDeletedRowsChange
=> onDeletedRowIdsChange
editingRows
=> editingRowIds
defaultEditingRows
=> defaultEditingRowIds
onEditingRowsChange
=> onEditingRowIdsChange
The deletedRows
getter has been renamed to deletedRowIds
.
The editingRows
getter has been renamed to editingRowIds
.
react-grid: The SortingState plugin's setColumnSorting
action has been renamed to changeColumnSorting
.
<a name="1.0.0-beta.3"></a>
Changelog
1.0.0-beta.3 (2017-12-28)
react-grid: We have moved the PagingState plugin's totalCount
property to the CustomPaging plugin to improve API consistency. Now, you can add the CustomPaging plugin to a project and specify its totalCount
property to implement remote paging.
Before:
<Grid>
<...>
<PagingState totalCount={10} />
</Grid>
After:
<Grid>
<...>
<PagingState />
<CustomPaging totalCount={10} />
</Grid>
react-grid: To simplify working and make consistent API, some plugins properties have been renamed.
allowGroupingByClick
property has been renamed to showGroupingControls
.allowUngroupingByClick
property has been renamed to showGroupingControls
.allowedPageSizes
property has been renamed to pageSizes
.react-grid: A column's getCellValue
function has gotten higher priority than that defined in the Grid component.
react-grid: The createRowChange
function arguments order has been changed to (row: any, value: any, columnName: string)
to improve the API consistency. Now, the EditingState plugin's createRowChange
function has the same signature as the column extension's one.
react-grid: We have renamed the following plugins that process data to make the Grid API more consistent:
react-grid: We removed the LocalSorting plugin's getColumnIdentity
property to improve API consistency. Now, use the column extension's criteria
property to specify an individual column's grouping criteria.
Before:
const columns = [{ name: 'field' }, { name: 'field2' }];
const fieldGroupCriteria = /* custom group criteria */;
const getColumnIdentity = (columnName) => {
if (name === 'field') return fieldGroupCriteria;
};
<Grid columns={columns}>
<LocalGrouping getColumnIdentity={getColumnIdentity} />
</Grid>
After:
const columns= [{ name: 'field' }, { name: 'field2' }];
const fieldGroupCriteria = /* custom group criteria */;
const integratedGroupingColumnExtensions = [
{ columnName: 'field', criteria: fieldGroupCriteria },
];
<Grid columns={columns}>
<IntegratedGrouping columnExtensions={integratedGroupingColumnExtensions} />
</Grid>
react-grid: We removed the cancel
argument from the SortingState plugin's setColumnSorting
action and from the onSort
event of the TableHeaderCellProps and GroupPanelItemProps component properties. Now, you can pass null
to the direction
argument to cancel sorting by column.
react-grid: The TableHeaderCellProps interface's allowResizing
property has been renamed to resizingEnabled
to improve the API consistency.
react-grid: We removed the getColumnCompare
property from the LocalSorting plugin to improve API consistency. Now, use the columnExtension
property to specify individual column sorting options.
Before:
const columns = [{ name: 'field' }, { name: 'field2' }];
const fieldCompare = /* custom sort compare */;
const getColumnCompare = (columnName) => {
if (name === 'field') return fieldCompare;
};
<Grid columns={columns}>
<LocalSorting getColumnCompare={getColumnCompare} />
</Grid>
After:
const columns= [{ name: 'field' }, { name: 'field2' }];
const fieldCompare = /* custom sort compare */;
const integratedSortingColumnExtensions = [
{ columnName: 'field', compare: fieldIdentity },
];
<Grid columns={columns}>
<IntegratedSorting columnExtensions={integratedSortingColumnExtensions} />
</Grid>
react-grid: We have integrated the column chooser into the Grid as a plugin to simplify the API. Now, use the column chooser as follows:
<Grid>
{/* ... */}
<TableColumnVisibility
/* props */
/>
<Toolbar />
<ColumnChooser />
</Grid>
For details, see Controlling Column Visibility.
react-grid: We extracted the column's showWhenGrouped
property that the TableGroupRow plugin handles to a column extension to improve the API readability.
The TableGroupRow plugin's showColumnsWhenGrouped
property type has been changed to boolean
and this property affects all columns. If you need to control specific columns' visibility, use column extensions.
Before:
const columns = [{ name: 'field', showWhenGrouped: true }, { name: 'field2' }];
<Grid columns={columns}>
<TableGroupRow />
</Grid>
After:
const columns= [{ name: 'field' }, { name: 'field2' }];
const tableGroupColumnExtensions = [
{ columnName: 'field', showWhenGrouped: true },
];
<Grid columns={columns}>
<TableGroupRow columnExtensions={tableGroupColumnExtensions} />
</Grid>
Note that column extension properties have higher priority than corresponding plugin properties.
react-grid: We renamed the DragDropContext
plugin to DragDropProvider
to improve API consistency.
react-grid: We removed the allowResizing
property from the TableHeaderRow plugin to simplify the API. Now, adding the TableColumnResizing plugin enables column resizing.
react-grid: In order to improve API readability, we extracted the width
and align
column properties that the Table and VirtualTable plugins handle into a separate property. Now, the width
and align
properties in the Grid columns
are no longer supported. Use a TableColumnExtension instead:
Before:
const columns= [{ name: 'field', width: 100 }, { name: 'field2' }];
<Grid columns={columns}>
<Table />
</Grid>
After:
const columns= [{ name: 'field1' }, { name: 'field2' }];
const tableColumnExtensions = [{ columnName: 'field1', width: 100 }];
<Grid columns={columns}>
<Table columnExtensions={tableColumnExtensions} />
</Grid>
react-grid: In order to simplify API, we changed the way the DataTypeProvider plugin detects columns associated with a type. Now, to associate a custom formatter and editor with a column, pass a column array to the DataTypeProvider's for
field:
Before:
const columns= [{ name: 'field', dataType: 'boolean' }, { name: 'field2' }];
<Grid columns={columns}>
<DataTypeProvider type="boolean" />
</Grid>
After:
const columns= [{ name: 'field1' }, { name: 'field2' }];
const booleanColumns = ['field1'];
<Grid columns={columns}>
<DataTypeProvider for={booleanColumns} />
</Grid>
react-grid: In order to improve API consistency, we've decided to replace the getColumnPredicate
function in the LocalFiltering plugin with the LocalFilteringColumnExtension.
Before:
const columns = [{ name: 'field' }, { name: 'field2' }];
const fieldPredicate = /* custom filtering predicate */;
const getColumnPredicate = (columnName) => {
if (name === 'field') return fieldPredicate;
};
<Grid columns={columns}>
<LocalFiltering getColumnPredicate={getColumnPredicate} />
</Grid>
After:
const columns= [{ name: 'field' }, { name: 'field2' }];
const fieldPredicate = /* custom filtering predicate */;
const integratedFilteringColumnExtensions = [
{ columnName: 'field', predicate: fieldPredicate },
];
<Grid columns={columns}>
<IntegratedFiltering columnExtensions={integratedFilteringColumnExtensions} />
</Grid>
react-grid: In order to simplify API, we've decided to remove allowDragging properties in TableHeaderRow and GroupingPanel plugins. Now, to enable dragging it is enough to add the DragDropContext plugin.
react-grid: To provide a more convenient and flexible way to render elements that are placed within a Grid header we add the Toolbar plugin. For this reason, the GroupingPanel plugin has the Toolbar dependency:
import {
// ...
Toolbar,
GroupingPanel
} from '@devexpress/dx-react-grid-material-ui';
<Grid>
{/* ... */}
<Toolbar />
<GroupingPanel />
</Grid>
To simplify Grid's markup we removed header placeholder and footer placeholder components.
If you're customizing Grid appearance using the headerPlaceholderComponent
and footerPlaceholderComponent
properties, your code should be updated as follows:
Before:
<Grid
headerPlaceholderTemplate={() => (<div />)}
footerPlaceholderTemplate={() => (<div />)}
>
{/* ... */}
</Grid>
After:
import { Template, TemplatePlaceholder } from '@devexpress/dx-react-core';
<Grid>
<Template name="header">
<TemplatePlaceholder />
{/* Custom markup */}
</Template>
<Template name="footer">
<TemplatePlaceholder />
{/* Custom markup */}
</Template>
{/* ... */}
</Grid>
react-grid: We extracted the column's createRowChange
property that the EditingState plugin handles to a column extension to improve API readability.
Before:
const columns = [{ name: 'field', createRowChange: (row, value) => { /* logic */ } }, { name: 'field2' }];
<Grid columns={columns}>
<EditingState />
</Grid>
After:
const columns= [{ name: 'field' }, { name: 'field2' }];
const editingColumnExtensions = [
{ columnName: 'field', createRowChange: (row, value) => { /* logic */ } },
];
<Grid columns={columns}>
<EditingState columnExtensions={editingColumnExtensions} />
</Grid>
Note that column extension properties have higher priority than corresponding plugin properties.
<a name="1.0.0-beta.2"></a>
Changelog
1.0.0-beta.2 (2017-12-14)
react-core: To get rid of redundant 'div' elements in markup, we have updated the minimum React version the grid requires to 16.2.0.
react-grid: Some times ago, we created a pull request that allows using our React Grid with the seamless-immutable library. The main change is that we switched from the Array.prototype.slice()
function to the Array.from()
one to copy arrays. It was not a good decision, because Array.from()
is slower than Array.prototype.slice()
. Now we return back to Array.prototype.slice()
for performance reasons.
If you are using the seamless-immutable library, change your code as follows:
const state = {
data: Immutable({
selection: [],
})
};
<Grid>
{ /* ...*/ }
<SelectionState
// selection: this.state.data.selection -> before
selection: this.state.data.selection.asMutable() // now
/>
</Grid>
The related guide is updated as well.
react-grid-material-ui: To make Grid for Material-UI more flexible we've stopped using the Paper component inside the Grid's layout. It allows placing our Grid to an existing Paper with other components. For example:
<Paper>
<Button>Products</Button>
<Button>Customers</Button>
<Button>Sales</Button>
<Grid
/* ... */
>
{/* ... */}
</Grid>
</Paper>
react-grid: To simplify working with selection features and make the selection plugin's purposes clearer, the functionality that computes the selection state has been moved from the SelectionState
plugin to the LocalSelection
one:
availableToSelect
getter has been deleted from the SelectionState
plugin, while the selectAllAvailable
, allSelected
, and someSelected
getters have been added to the LocalSelection
plugin.SelectionState
plugin's setRowsSelection
action has been renamed to toggleSelection
.selection
getter's return value type has been changed to Set
.TableSelection
plugin's showSelectAll
property has been changed to false
.Both plugins are available from the @devexpress/dx-react-grid
package.
Note that LocalSelection
should be linked after SelectionState
if you use the TableSelection
plugin.
react-core: To simplify working with plugins, we have got rid of the Watcher. Now, you can use a Getter instead.
Before:
...
<Watcher
watch={
getter = getter('someGetter')
}
onChange={(action, someGetter) => {
action('someAction')(someGetter);
}}
/>
...
After:
...
<Getter
name="someGetter"
computed={(getters, actions) => {
actions.someAction(getters.someGetter);
return getters.someGetter;
}}
/>
...
react-grid: Such plugin names as TableView
and VirtualTableView
don't correspond to other plugins like TableFilterRow
, TableGroupRow
, TableSelection
, which do not have "view" in their names. To keep the names of plugins consistent, the following changes have been introduced:
TableView
plugin has been renamed to Table
;VirtualTableView
plugin has been renamed to VirtualTable
;react-grid: The TableEditRow plugin's editCellTemplate
, and editRowTemplate
properties have been replaced with cellComponent
, and rowComponent
ones, which accept components instead of render functions. Find more details here: #496
react-grid: The GroupingPanel plugin's groupPanelTemplate
, and groupPanelItemTemplate
properties have been replaced with containerComponent
, and itemComponent
ones, which accept components instead of render functions. Find more details here: #496
containerComponent
takes on the children
property instead of all arguments passed to the groupPanelTemplate
function.
The onSort
, and onGroup
properties passed to itemComponent
are used instead of the changeSortingDirection
, and groupByColumn
arguments passed to the groupPanelItemTemplate
function. The item
, and draft
properties are no longer available, use the item
property instead.
react-grid: The TableEditColumn plugin's commandTemplate
, cellTemplate
and headingCellTemplate
properties have been replaced with commandComponent
, cellComponent
, and headerCellComponent
ones, which accept components instead of render functions. Find more details here: #496
Properties passed to a component returned from commandComponent
have the same names as arguments passed to the commandTemplate
function with the following exception. The onExecute
property is used instead of the executeCommand
argument.
All properties passed to the cellComponent
except row
have been replaced by the children
property providing configured commands.
All properties passed to the headingCellComponent
have been replaced by the children
property providing configured commands.
react-grid: The TableGroupRow plugin's groupIndentColumnWidth
property has been renamed to indentColumnWidth
. The groupCellTemplate
, groupRowTemplate
and groupIndentCellTemplate
properties have been replaced with cellComponent
, rowComponent
, and indentCellComponent
ones, which accept components instead of render functions. Find more details here: #496
Properties passed to cellComponent
have the same names as arguments passed to the groupCellTemplate
function with the following exceptions:
onToggle
property is used instead of the toggleGroupExpanded
argument.expanded
property is used instead of the isExpanded
argument.react-grid: The TableFilterRow plugin's filterCellTemplate
and filterRowTemplate
properties have been replaced with cellComponent
, and rowComponent
ones, which accept components instead of render functions. Find more details here: #496
Properties passed to cellComponent
have the same names as arguments passed to the filterCellTemplate
function except for the onFilter
property, which is used instead of the setFilter
argument.
react-grid: The TableHeaderRow's headerCellTemplate
, and headerRowTemplate
properties have been replaced with cellComponent
, and rowComponent
, which accept components instead of render functions. Find more details here: #496
Properties passed to cellComponent
have the same names as arguments passed to the headerCellTemplate
function with the following exceptions: the onSort
, onGroup
, onWidthChange
and onDraftWidthChange
properties are used instead of the changeSortingDirection
, groupByColumn
, changeColumnWidth
and changeDraftColumnWidth
arguments respectively.
react-grid: The TableRowDetail plugin's detailToggleCellWidth
property has been renamed to toggleColumnWidth
. The template
, detailCellTemplate
, detailRowTemplate
, and detailToggleCellTemplate
properties have been replaced with contentComponent
, cellComponent
, rowComponent
, and toggleCellComponent
ones, which accept components instead of render functions. Find more details here: #496
Properties passed to cellComponent
have the same names as arguments passed to the detailCellTemplate
function except for the children
property, which is used instead of the template
argument.
Properties passed to toggleCellComponent
have the same names as arguments passed to the detailToggleCellTemplate
function except for the onToggle
property, which is used instead of the toggleExpanded
argument.
react-grid: The TableSelection plugin's highlightSelected
property has been renamed to highlightRow
. The selectCellTemplate
and selectAllCellTemplate
properties have been replaced with cellComponent
, and headerCellComponent
ones, which accept components instead of render functions. Find more details here: #496
Properties passed to headerCellComponent
have the same names as arguments passed to the selectAllCellTemplate
function with the following exceptions:
onToggle
property is used instead of the toggleAll
argument.disabled
property is used instead of the selectionAvailable
argument and it's value is inverted.Properties passed to cellComponent
have the same names as arguments passed to the selectCellTemplate
function except for the onToggle
property, which is used instead of the changeSelected
argument.
react-grid: The Table's tableLayoutTemplate
, tableCellTemplate
, tableRowTemplate
, tableNoDataCellTemplate
, tableNoDataRowTemplate
, tableStubCellTemplate
, and tableStubHeaderCellComponent
properties have been replaced with layoutComponent
, cellComponent
, rowComponent
, noDataCellComponent
, noDataRowComponent
, stubCellComponent
and stubHeaderCellComponent
. This also means that they accept components instead of render functions. Find more details here: #496
react-grid: The Grid's rootTemplate
, headerPlaceholderTemplate
, and footerPlaceholderTemplate
properties have been replaced with rootComponent
, headerPlaceholderComponent
, and footerPlaceholderComponent
. This also means that they accept components instead of render functions. Find more details here: #496
The headerTemplate
, bodyTemplate
, and footerTemplate
properties have been replaced with the children
property in rootTemplate
.
<a name="1.0.0-beta.1"></a>
Changelog
1.0.0-beta.1 (2017-11-10)
rect-grid: The ColumnOrderState
plugin has been renamed to TableColumnReordering
and is now available via the @devexpress/dx-react-grid-bootstrap3
and @devexpress/dx-react-grid-material-ui
packages.
The TableView
plugin's allowColumnReordering
property has been removed and the TableColumnReordering
plugin now depends on the TableView
plugin. Thus, it is enough to link the TableColumnReordering
plugin below the TableView
plugin to enable column reordering.
Before:
import {
// ...
ColumnOrderState
} from '@devexpress/dx-react-grid';
// ...
<ColumnOrderState defaultOrder={[/* ... */]} />
<TableView allowColumnReordering />
After:
import {
// ...
TableColumnReordering
} from '@devexpress/dx-react-grid-bootstrap3';
// } from '@devexpress/dx-react-grid-material-ui';
// ...
<TableView />
<TableColumnReordering defaultOrder={[/* ... */]} />
react-grid: The TableColumnResizing plugin is now available in the "@devexpress/dx-react-grid-bootstrap3" and "@devexpress/dx-react-grid-material-ui" packages.
Use the following code to import the plugin.
import {
TableColumnResizing,
} from from '@devexpress/dx-react-grid-bootstrap3'/* or '@devexpress/dx-react-grid-material-ui' */;
<a name="1.0.0-alpha.14"></a>
Changelog
1.0.0-alpha.13 (2017-10-19)
<a name="1.0.0-alpha.12"></a>
Changelog
1.0.0-alpha.12 (2017-10-19)
react-grid: The scope
parameter of the setColumnSorting
action has been removed.
The GroupingState
plugin now has an optional dependency on the SortingState
plugin. So, GroupingState
should be placed after SortingState
.
Before:
<GroupingState /* ... */ />
<SortingState /* ... */ />
After:
<SortingState /* ... */ />
<GroupingState /* ... */ />
<a name="1.0.0-alpha.11"></a>
Changelog
1.0.0-alpha.11 (2017-10-04)
filterFn
property of the LocalFiltering
has been renamed to getColumnPredicate
. The argument list has been changed from filterFn(row: Row, filter: Filter) => boolean
to getColumnPredicate(columnName: string) => Function
. The returning function has the following signature (value: any, filter, row: Row) => boolean
.getCellData
property of the TableView plugin and the getCellData
field of the Column interface have been renamed to getCellValue
.<a name="1.0.0-alpha.10"></a>
Changelog
1.0.0-alpha.10 (2017-09-18)
tableExtraProps
getter was removed from the TableView
and TableSelection
plugins.connectGetters
and connectActions
properties have been removed from the Template component. From now on, you can connect Getters and Actions using the TemplateConnector component.Before:
<Template name="templateName"
connectGetters={getter => ({ value: getter('value') })}
connectActions={action => ({ changeValue: action('changeValue') })}
>
{({ value, changeValue }) => /* ... */}
</Template>
After:
<Template name="templateName">
<TemplateConnector>
{({ value }, { changeValue }) => /* ... */}
</TemplateConnector>
</Template>
tableTemplate
property has been renamed to tableLayoutTemplate
to make the TableView
plugin API more eloquent.<a name="1.0.0-alpha.9"></a>
Changelog
1.0.0-alpha.9 (2017-09-04)
<a name="1.0.0-alpha.8"></a>