This section shows how Tree Data can be used with the Server-Side Row Model.
Tree Data is defined as data that has parent / child relationships where the parent / child relationships are provided as part of the data. This is in contrast to Row Grouping where the parent / child relationships are the result of grouping. When working with Tree Data, there are no columns getting grouped.
An example of a Tree Data JSON structure is shown below:
[{
"employeeId": 101,
"employeeName": "Erica Rogers",
"jobTitle": "CEO",
"employmentType": "Permanent",
"children": [{
"employeeId": 102,
"employeeName": "Malcolm Barrett",
"jobTitle": "Exec. Vice President",
"employmentType": "Permanent",
"children": [
{
"employeeId": 103,
"employeeName": "Leah Flowers",
"jobTitle": "Parts Technician",
"employmentType": "Contract"
},
{
"employeeId": 104,
"employeeName": "Tammy Sutton",
"jobTitle": "Service Technician",
"employmentType": "Contract"
}
]
}]
}]
It is expected that the data set will be too large to send over the network, hence the SSRM is used to lazy-load child row as the parent rows are expanded.
In order to set the grid to work with Tree Data, simply enable Tree Data mode via the Grid Options
using: gridOptions.treeData = true
.
Tree Data is supplied via the Server-Side Datasource just like flat data,
however there are two additional gridOptions callbacks: isServerSideGroup(dataItem)
and getServerSideGroupKey(dataItem)
.
The following code snippet shows the relevant gridOptions
entries for configuring tree data with the
server-side row model:
<ag-grid-vue
:rowModelType="rowModelType"
:treeData="treeData"
:isServerSideGroup="isServerSideGroup"
:getServerSideGroupKey="getServerSideGroupKey"
/* other grid options ... */>
</ag-grid-vue>
// choose Server-Side Row Model
this.rowModelType = 'serverSide';
// enable Tree Data
this.treeData = true;
// indicate if row is a group node
this.isServerSideGroup = dataItem => {
return dataItem.group;
};
// specify which group key to use
this.getServerSideGroupKey = dataItem => {
return dataItem.employeeId;
};
Be careful not to get mixed up with the Client-Side Tree Data configurations by mistake.
The example below shows this in action where the following can be noted:
gridOptions.treeData = true
.gridOptions.isServerSideGroup(dataItem)
.gridOptions.getServerSideGroupKey(dataItem)
.Tree Data can be refreshed in the same way as groups are refreshed when not using Tree Data. This is explained in the SSRM Refresh.
The example below shows this in action where the following can be noted:
gridOptions.api.refreshServerSide({ route: [], purge: true })
.gridOptions.api.refreshServerSide({ route: ['Kathryn Powers','Mabel Ward'], purge: true })
.Tree Data can have transactions applied in the same way as row groups. This is explained in the SSRM Transactions section.
The example below demonstrates transactions with Tree Data. Note the following:
Employment Type
.Robert Peterson
.Tree Data can have row selection applied in the same way as row groups. This is explained in the SSRM Row Selection section.
The example below demonstrates row selection with Tree Data. Note the following:
groupSelectsChildren
has been enabled, alongside rowSelection='multiple'
.Server-Side Tree Data Filtering should behave the same as Client-Side Tree Data Filtering. A group will be included if:
The following example demonstrates Server-Side Tree Data Filtering using the Set Filter Tree List, which replicates the Tree Data structure in the filter.
filterParams.treeList = true
. A Key Creator is specified to convert the path into a string.filterParams.treeList = true
, and is grouped by year -> month -> day.Date
objects.filterParams.keyCreator
provided to convert the Date
values into the (string) format the server is expecting in the Filter Model.filterParams.excelMode = 'windows'
, which allows changes to the tree filter to be applied in batches.