A fast and efficient tree table component for ReactJS
cp-react-tree-table
A fast, efficient tree table component for ReactJS.
Installation
[Method A] Using npm:
npm install --save cp-react-tree-table
[Method B] Using yarn:
yarn add cp-react-tree-table
Usage
Import the cp-react-tree-table
module:
import TreeDataTable from 'cp-react-tree-table';
Example
Example Live Demo (JSFiddle)
import React, { Component } from 'react';
import TreeDataTable from 'cp-react-tree-table';
const mockData = [
{
data: { name: '[1](1) Height: 25px.' },
height: 25,
children: [
{
data: { name: '[2](1)' },
children: [
{
data: { name: '[3](1)' },
},
{
data: { name: '[3](2)' },
},
{
data: { name: '[3](3)' },
}
],
},
{
data: { name: '[2](2) Height: 40px.' },
height: 40,
}
],
},
{
data: { name: '[1](2) Height: 30px.' },
height: 30,
},
{
data: { name: '[1](3) Height: 30px.' },
height: 30,
},
];
export default class DemoApp extends Component {
render () {
return (
<TreeDataTable data={mockData} height={100} className="demo-tree-table">
<TreeDataTable.Column grow={0} basis="300px" renderCell={this.renderIndexColumn} />
<TreeDataTable.Column grow={1} renderCell={this.renderColumn} />
</TreeDataTable>
);
}
renderIndexColumn = (data, metadata, toggleChildren) => {
return (
<div style={{ paddingLeft: (metadata.depth * 25) + 'px'}}>
<span className="toggle-button-wrapper" style={{ width: '80px'}}>
{(metadata.hasChildren)
? (
<span onClick={toggleChildren}>[toggle]</span>
)
: ''
}
</span>
<span>{data.name}</span>
</div>
);
}
renderColumn = (data, metadata, toggleChildren) => {
return (
<span>Column 2: {data.name}</span>
);
}
}
Props
Props for TreeDataTable
:
Prop | Type | Required | Description |
---|---|---|---|
data |
Array<TreeDataRow > |
yes |
List of data items |
height |
Number | no | Table height (px) * |
rowHeight |
Number | no | Default row height (px) ** |
onScroll |
Function | no | Callback for scroll event *** |
className |
String | no | Table custom class **** |
* Table height: default 200
.
** Default row height: will be used for items (TreeDataRow
) that don't specify their height property.
*** onScroll(scrollTop)
:
scrollTop
: (number
) The number of pixels that the table's content is scrolled vertically.
**** Table custom class: will be appended to the classList of TreeDataTable
's root element.
Props for TreeDataTable.Column
:
Prop | Type | Required | Description |
---|---|---|---|
grow |
Number | no | flexGrow CSS property |
basis |
String | no | flexBasis CSS property |
renderCell |
Function | yes |
Renders a single cell * |
* renderCell(rowData, rowMetadata, toggleChildren) => Node
:
rowData
: The item data object.rowMetadata
: Metadata object describing the item state:depth
: (number
) Starts from 0, indicates the depth level of the item inside the tree.hasChildren
: (boolean
)
toggleChildren
: Callback function that will toggle direct descendants of the item.
TreeDataRow
Object type
Properties:
Type | Required | Description | |
---|---|---|---|
data |
any | yes |
The item data object |
height |
Number | no | Row height (px) * |
children |
Array<TreeDataRow > |
no | List of children data items |
* Row height: defaults to 26
px if TreeDataTable
's property rowHeight
is not set.