0.5.0 • Published 7 years ago
re-grid v0.5.0
React GridZilla: A React Data Grid Library
A React library utilizing Bootstrap tables and other Bootstrap CSS components such as Glyphicons to build a robust grid. The grid receives the data and fires events for editing an sorting executing the passed handler. This allows you to do whatever you'd like when for example a user types a filter or clicks a column to sort.
Community React Components Used:-
Note:
Some props and configuration are just exposed props of the used components. Especially the react-paginate component.
How To Use:
- Run
npm install re-grid - Add import
import ReGrid from './re-grid';
To render the grid you need to pass it some props:-
columns--array: Configuration of columns and their filtersrows--array: The actual dataremoteFilterHandlerfilters--callback: Callback that gets the filters as an object. Here you can execute you're server-side/client-side filteringremoteExportHandlerfilters--callback: Same as filter callback but only fired when click the export buttonisExportButtonEnabled--bool: Enable/disable export buttonremoteSortHandlersort--callback: Callback that getssortobject having thecolumnanddirection.pageCount--integer: Number of pages to displayhandlePageClick(data)--callback: Fired whenvernextorpreviousbuttons are clicked. This is where you issue a request to you're data source to get next or previous set.forcePage--integer: Page number to force. Usually set to current page.activeClassName--string: Class name of active buttonsnextClassName--string: Class name ofnextbutton.previousClassName--string: Class name ofpreviousbutton.pageClassName--string: Class name to assign to the page.disabledClassName--string: Class name to use for disabled buttonseditSaveHandler(data)--callback: Call back fired when submitting row edits.
Column structure:-
@TODO: Segregate different column structure explanation.
columns = [
{
label: 'ID',
id: 'p_id',
filter: {
enabled: false
}
},
{
label: 'Product Name',
id: 'p_product_name',
filter: {
enabled: true,
type: 'text',
placeHolder: 'Filter ...'
},
editing: {
enabled: true,
type: 'text',
}
},
{
label: 'Item Price',
id: 'p_item_price',
filter: {
enabled: true,
type: 'number',
min: 0,
max: 100
},
editing: {
enabled: true,
type: 'number',
options: {
min: 0,
max: 1000
}
}
},
{
label: 'Category',
id: 'category_name',
filter: {
enabled: true,
type: 'select',
options: [
{
label: '...',
value: ''
},
{
label: 'Books',
value: 'Books'
},
{
label: 'Shoes',
value: 'Shoes'
}
]
},
editing: {
enabled: true,
type: 'select',
options: {
options: [
{
label: '...',
value: ''
},
{
label: 'Books',
value: 'Books'
},
{
label: 'Shoes',
value: 'Shoes'
}
]
}
}
},
{
label: 'Date Range',
id: 'product_date',
filter:{
enabled: true,
type: 'date_range',
options: {
format: "YYYY/MM/DD", // Optional,
startDatePlaceholder: 'Start Date', // Optional,
endDatePlaceholder: 'End Date', // Optional,
}
}
},
{
label: 'Date',
id: 'category_date',
filter:{
enabled: true,
type: 'date',
options: { // Optional
format: "YYYY/MM/DD", // Optional
fromMonth: new Date(new Date(30,0).getFullYear(), 0), // Optional
toMonth: new Date(new Date().getFullYear() + 2, 11) // Optional
}
}
}
];Grid Component with the props:-
<ReGrid
columns={columns}
rows={this.state.rows}
remoteFilterHandler={this.remoteFilterHandler}
remoteExportHandler={this.remoteExportHandler}
isExportButtonEnabled={this.state.isExportButtonEnabled}
remoteSortHandler={this.remoteSortHandler}
pageCount={this.state.pageCount}
handlePageClick={this.handlePageClick}
editSaveHandler={this.saveProducts}
/>For now you can check App.js in the src folder for an example
from the git repo.
Features:
- Filtering
- Date range
- Date
- Text
- Number
- Select Menu
- Sorting
- Editing
- Pagination
- Available Field Types:
- Text
- Checkbox
- Select
- Number
Date Picker (To Be included)
Note:-
This library is still in development phase.