Hi everybody :)
Creating a table in reactJS with selectable rows has been the biggest challenge for me, So I decided to create a light package that help me.
you can visit its storybook online Here.
Install via NPM
npm install --save react-custable
You only need two variables for configuration, column and data
import { Table } from 'react-custable';
//the fieldName should be as same as data's key
const column = [
{ fieldName: 'name', title: 'Name', width: '180px', sortable: true },
{ fieldName: 'email', title: 'Email', width: '180px', sortable: true },
];
const data = [
{ id: '1', name: 'name one', email: 'mailone@mail.com' },
{ id: '2', name: 'name two', email: 'mailtwo@mail.com' },
];
<div className="App">
<Table columns={columns} data={data} />
</div>;
what's column props?
the 'fieldName' is the key name of your data and 'title' is the table header for that data and these are mandatory.
Optional column configuration
- width: you can assign certain width to each column
- sortable: this table can sort columns data if these are string
- sortFunc: if the column's data isn't string you can pass a function that knows how to sort your data.
- fixed: if you want to fixed the column for horizontal scroll (only work for first column or last column)
- render: if you want to render custom component, you should pass a function that get row (data of current row) and index (index of current row) and your function should return a Cell object
{
value: React.ReactNode,
props: { [key: string]: string }, //props will be applied to td elemenet like colspan
}
Option | Type | Description |
---|---|---|
fieldName* | string | data key |
title* | string | column header title |
width | string(px) | column width (Default is auto) |
fixed | string ('left' or 'right') | to fix column |
sortable | boolean | Default is false |
sortFunc | ( a , b ) => number | sort function should return -1 when a < b , 1 when a > b , 0 when a = b |
render | (row, index) => Cell | for rendering custom component in cell |
As you've seen before 'data' and 'column' are mandatory for the table, let's see what are optional for the table
Option | Type | Description |
---|---|---|
column* | Column[] | array of columns |
data* | { id:string, ... }[] | array of data |
isSelectable | boolean | to enable checkboxes for rows |
selectRowHandler | (selectedRowIds) => void | the callback function will receiver selected row IDs |
selectedRowKeys | string[] | default value for selected rows |
pagination | { currentPage: number; totalCount: number; pageLimit: number; } | values for table pagination |
pageChangeHandler | (pageNumner: number) => void | the callback for handle page changes |
rowClickHandler | (row: Row) => void | the callback for handle row click |
showLoading | boolean | show spinner over table |
Contribute
this is the first version of my package, so feel free to contribute
https://github.com/barzin144/react-custable
Top comments (0)