0.0.3 • Published 7 years ago

react-dtable v0.0.3

Weekly downloads
3
License
MIT
Repository
github
Last release
7 years ago

react-dtable

**Experimental**

react-dtable is a React component that lets you generate a data table easily.

Installation

npm install --save react-dtable

Example

import React from "react";
import ReactDOM from "react-dom";
import { DataTable, Column } from "react-dtable";

class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = { data: [] };
  }

  componentWillMount() {
    fetch(`https://randomuser.me/api/?results=50`)
      .then(res => res.json())
      .then(json => this.setState({ data: json.results }))
      .catch(err => console.error(err));
  }

  render() {
    return (
      <DataTable data={this.state.data}>
        <Column label="Username" field="login.username" />
        <Column
          label="Full Name"
          filter={filter => {
            return (
              <input
                className="form-control"
                onChange={e => {
                  const input = e.target.value;
                  filter({
                    fullName: row => {
                      const value = `${row.name.first} ${row.name.last}`;
                      return ~value.indexOf(input.trim());
                    }
                  });
                }}
              />
            );
          }}
          cell={row => (
            <span><strong>{row.name.first}</strong> {row.name.last}</span>
          )}
        />
        <Column
          field="gender"
          label="Gender"
          filter={filter => (
            <select
              name="gender"
              className="form-control"
              onChange={e => {
                const value = e.target.value;
                filter({
                  gender: row => {
                    if (value === "") return true;
                    return row.gender === value;
                  }
                });
              }}
            >
              <option value="">All</option>
              <option value="male">Male</option>
              <option value="female">Female</option>
            </select>
          )}
        />
        <Column label="Email" field="email" />
        <Column label={false} cell={row => <button>Action</button>} />
      </DataTable>
    );
  }
}

ReactDOM.render(<App />, document.getElementById("root"));

API

<DataTable> Props

PropertyTypeDescription
dataobjectrequired - Array of object.
renderColumnLabelsbooleandefault: true. Setting to false will skip rendering the labels row
 function() => <tr> ... </tr> - For customizing column headings row
renderColumnFiltersbooleandefault: true. Setting to false, will skip rendering the filters row
 function(filterColumn) => <tr> ... </tr> - For customizing column filters row
tableClassNamestring<table className={tableClassName}>
theadClassNamestring<thead className={theadClassName}>
tbodyClassNamestring<tbody className={tbodyClassName}>
tfootClassNamestring<tfoot className={tfootClassName}>

<Column> Props

PropertyTypeDescription
labelstringColumn heading to display.
labelClassNamestring<th className={labelClassName}>
fieldstringField name for displaying value and filter. For nested object, you can use the dot (.) notation. (e.g. name.firstName)
filterfunction(filterColumn) => { ... } - If you need to use a different element for filtering. filterColumn is a function that you can call to pass a key/value pair to be used for filtering(e.g. <select name="status" onChange={e => filterColumn({ [e.target.name]: e.target.value })}><option value="1">Active</option><option value="0">Inactive</option></select>)
filterClassNamestring<th className={filterClassName}>
cellstringText to display instead of the data
 function(row) => { ... } - Allows you to customize the cell content
cellClassNamestring<td className={cellClassName}>
classNamestring<tr className={className}>

Todo

  • Pagination
  • Dynamic loading of data
  • Better docs
  • Add tests
  • Add more examples