@dccs/react-datagrid-mui
Version:
A light datagrid build upon react-table-plain for React in a Material-UI theme.
130 lines (95 loc) • 4.58 kB
Markdown
A light datagrid build upon react-table-mui for React, themed with [Material-UI](https://mui.com).
You should install [react-datagrid-mui with npm or yarn](https://www.npmjs.com/package/@dccs/react-datagrid-mui):
npm install @dccs/react-datagrid-mui
or
yarn add @dccs/react-datagrid-mui
This command will download and install react-datagrid-mui
react-datagrid-mui uses:
- [@dccs/react-table-mui](https://www.npmjs.com/package/@dccs/react-table-mui) to display the table data
- [TablePagination](https://material-ui.com/api/table-pagination/) from [Material-UI](https://material-ui.com) for the paging controls.
react-datagrid-mui is designed to do all the paging and sorting for you. You only provide the `onLoadData` callback, that returns the data as a `Promise<{data: any[], total: number}>` (paging needs `total` to provide the maximal number pages).
Here is an example:
With Version 4 we merged react-datagrid-plain into react-datagrid-plain. Now there is only a MUI datagrid; no need to theme anymore.
```javascript
import { DataGridMui } from "@dccs/react-datagrid-mui";
<DataGridPlain
colDef={[
{ prop: "id", header: "Id" },
{ prop: "display_name", header: "Full name", sortable: true }
]}
onLoadData={(page, rowsPerPage, orderBy, desc) =>
fetch(url /* with querystring params */)
.then(resp => resp.json())
.then(resp => ({ data: resp.data, total: resp.total }))
}
/>;
```
```javascript
import { DataGridPlain } from "@dccs/react-datagrid-plain";
import { datagridMuiTheme } from "@dccs/react-datagrid-mui";
<DataGridPlain
{...datagridMuiTheme}
colDef={[
{ prop: "id", header: "Id" },
{ prop: "display_name", header: "Full name", sortable: true }
]}
onLoadData={(page, rowsPerPage, orderBy, desc) =>
fetch(url /* with querystring params */)
.then(resp => resp.json())
.then(resp => ({ data: resp.data, total: resp.total }))
}
/>;
```
TODO: Codesandbox
```javascript
import { DataGridMui } from "@dccs/react-datagrid-mui";
<DataGridMui
colDef={[
{ prop: "id", header: "Id" },
{ prop: "display_name", header: "Full name", sortable: true }
]}
onLoadData={(page, rowsPerPage, orderBy, desc) =>
fetch(url /* with querystring params */)
.then(resp => resp.json())
.then(resp => ({ data: resp.data, total: resp.total }))
}
/>;
```
[](https://codesandbox.io/s/qlwk15q7vq)
or with sorting
[](https://codesandbox.io/s/o9no9k4mzq)
Inside the `onLoadData` you can use whatever Http library you want. That way it is possible to append i.e. authorization tokens, custom http headers, ...
`onLoadData` can provide data from every source. Server, client, rest, GraphQL, ... react-datagrid-mui does not care.
react-datagrid-mui keeps the state of the table (current page, number of displayes rows, ...) internal, so you don't have to worry about the state.
But that also means that react-datagrid-mui triggers any (re-)load of the data itself. If you want to reload the datagrid from outside you must grap the datagrid instance with a `ref` and call `load()` on it.
```javascript
import { DataGridMui } from "@dccs/react-datagrid-mui";
class Example extends React.Component {
datagrid = null;
render() {
return (
<React.Fragment>
<DataGridMui
colDef={[
{ prop: "id", header: "Id" },
{ prop: "display_name", header: "Full name", sortable: true }
]}
onLoadData={createLoader(url)}
ref={r => (this.datagrid = r)}
/>
<button onClick={() => this.datagrid.load()}>Reload</button>
</React.Fragment>
);
}
}
```
Version 2 introduced the [react-datagrid-plain](https://www.npmjs.com/package/@dccs/react-table-plain) component. It host all the necessary functionality for paging, etc.
This package is just to theme the react-datagrid-plain component. So the usage changed.