Skip to content

Latest commit

 

History

History
972 lines (776 loc) · 27.3 KB

columns.md

File metadata and controls

972 lines (776 loc) · 27.3 KB

Definition of columns props on BootstrapTable

Available properties in a column object:

Required

Optional

Following is a most simplest and basic usage:

const rows = [ { id: 1, name: '...', price: '102' } ];
const columns = [ {
    dataField: 'id', 
    text: 'Production ID'
  }, {
    dataField: 'name',
    text: 'Production Name'
  }, {
    dataField: 'price',
    text: 'Production Price'
  }
];

Let's introduce the definition of column object

Use dataField to specify what field should be apply on this column. If your raw data is nested, for example:

const row = {
  id: 'A001',
  address: {
    postal: '1234-12335',
    city: 'Chicago'
  }
}

You can use dataField with dot(.) to describe nested object:

dataField: 'address.postal'
dataField: 'address.city'

text will be the column text in header column by default, if your header is not only text or you want to customize the header column, please check column.headerFormatter

Sometime, you just want to have a column which is not perform any data but just some action components. In this situation, we suggest you to use isDummyField. If column is dummy, the column.dataField can be any string value, cause of it's meaningless.

There's only one different for dummy column than normal column, which is dummy column will compare the whole row value instead of cell value when call shouldComponentUpdate.

hidden allow you to hide column when true given.

formatter allow you to customize the table column and only accept a callback function which take four arguments and a JSX/String are expected for return.

Attention: Don't use any state data or any external data in formatter function, please pass them via formatExtraData. In addition, please make formatter function as pure function as possible as you can.

headerFormatter allow you to customize the header column and only accept a callback function which take three arguments and a JSX/String are expected for return.

  • column: current column object itself
  • colIndex: index of current column
  • components: an object which contain all of other react element, like sort caret or filter etc.

The third argument: components have following specified properties:

{
  sortElement, // sort caret element, it will not be undefined when you enable sort on this column
  filterElement // filter element, it will not be undefined when you enable column.filter on this column
}

It's only used for column.formatter, you can define any value for it and will be passed as fourth argument for column.formatter callback function.

Specify the data type on column. Available value so far is string, number, bool and date. Default is string.
column.type can be used when you enable the cell editing and want to save your cell data with correct data type.

Enable the column sort via a true value given.

column.sortValue only work when column.sort enabled. This prop allow you to replace the value when table sorting.

For example, consider following data:

const types = ['Cloud Service', 'Message Service', 'Add Service', 'Edit Service', 'Money'];
const data = [{id: 1, type: 2}, {id: 2, type: 1}, {id: 3, type:0}];
const columns = [{
  dataField: 'id',
  text: 'Job ID'
}, {
  dataField: 'type',
  text: 'Job Type'
  sort: true,
  formatter: (cell, row) => types[cell]
}]

In above case, when user try to sort Job Type column which will sort the original value: 0, 1, 2 but we display the type name via column.formatter, which will lead confuse because we are sorting by type value instead of type name. So sortValue is a way for you to decide what kind of value should be adopted when sorting on a specify column:

const columns = [{
  dataField: 'id',
  text: 'Job ID'
}, {
  dataField: 'type',
  text: 'Job Type'
  sort: true,
  formatter: (cell, row) => types[cell],
  sortValue: (cell, row) => types[cell] // we use type name to sort.
}]

column.sortFunc only work when column.sort enabled. sortFunc allow you to define your sorting algorithm. This callback function accept six arguments:

{
  // omit...
  sort: true,
  sortFunc: (valueA, valueB, order, dataField, rowA, rowB) => {
    if (order === 'asc') return valueA - valueB;
    else return valueB - valueA;
  }
}

The possible value of order argument is asc and desc.

column.onSort is an event listener for sort change event:

{
  // omit...
  sort: true,
  onSort: (field, order) => {
    // ....
  }
}

Usecolumn.sortCaret to customize the sort caret. This callback function accept two arguments: order and column

{
  // omit...
  sort: true,
  sortCaret: (order, column) => {
    return //...
  }
}

The possible value of order argument is asc, desc and undefined.

It's available to have custom class on table column:

{
  // omit...
  classes: 'id-custom-cell'
}

In addition, classes also accept a callback function which have more power to custom the css class on each columns. This callback function take 4 arguments and a String is expected to return::

{
  classes: function callback(cell, row, rowIndex, colIndex) { ... }
}

Parameters

  • cell: The value of current cell.
  • row: The value of row being processed in the BootstrapTable.
  • rowIndex: The index of the current row being processed in the BootstrapTable.
  • colIndex: The index of the current column being processed in BootstrapTable.

Return value

A new String will be the result as element class.

It's similar to column.classes, headerClasses is available to have customized class on table header column:

{
  // omit...
  headerClasses: 'id-custom-cell'
}

Furthermore, it also accept a callback function which takes 2 arguments and a String is expect to return:

{
  headerClasses: function callback(column, colIndex) { ... }
}

Parameters

  • column: The value of current column.
  • colIndex: The index of the current column being processed in BootstrapTable.

Return value

A new String will be the result of element headerClasses.

It's available to have custom style on table column:

{
  // omit...
  style: { backgroundColor: 'green' }
}

In addition, similar to column.classes, style also accept a callback function which have more power to customize the inline style on each columns. This callback function takes 4 arguments and an Object is expect to return:

{
  style: function callback(cell, row, rowIndex, colIndex) { ... }
}

Parameters

  • cell: The value of current cell.
  • row: The value of row being processed in the BootstrapTable.
  • rowIndex: The index of the current row being processed in the BootstrapTable.
  • colIndex: The index of the current column being processed in BootstrapTable.

Return value

A new Object will be the result of element style.

It's available to have customized inline-style on table header column:

{
  // omit...
  headerStyle: { backgroundColor: 'green' }
}

Moreover, it also accept a callback function which takes 2 arguments and an Object is expect to return:

{
  headerStyle: function callback(column, colIndex) { ... }
}

Parameters

  • column: The value of current column.
  • colIndex: The index of the current column being processed in BootstrapTable.

Return value

A new Object will be the result of element headerStyle.

react-bootstrap-table2 is disable HTML title as default. You can assign title as true to enable the HTML title on table column and take cell content as default value. Additionally, you could customize title via a callback. It takes 4 arguments and a String is expect to return:

{
  // omit...
  title: function callback(cell, row, rowIndex, colIndex) { ... }
  // return custom title here
}

Parameters

  • cell: The value of current cell.
  • row: The value of row being processed in the BootstrapTable.
  • rowIndex: The index of the current row being processed in the BootstrapTable.
  • colIndex: The index of the current column being processed in BootstrapTable.

Return value

A new String will be the result of element title.

Configure the title on header column, default is disable. The usage almost same as column.title,

{
  // omit...
  headerTitle: true
}

It's also available to custom via a callback function:

{
  headerTitle: function callback(column, colIndex) { ... }
}

Parameters

  • column: The value of current column.
  • colIndex: The index of the current column being processed in BootstrapTable.

Return value

A new String will be the result of element headerTitle.

You can configure the CSS text-align for table column by align property.

Besides, align also accept a callback function for dynamically setting text align. It takes 4 arguments and a String is expect to return:

{
  // omit...
  align: function callback(cell, row, rowIndex, colIndex) { ... }
}

Parameters

  • cell: The value of current cell.
  • row: The value of row being processed in the BootstrapTable.
  • rowIndex: The index of the current row being processed in the BootstrapTable.
  • colIndex: The index of the current column being processed in BootstrapTable.

Return value

A new String will be the result of element text alignment.

It's almost same as column.align, but it's for the CSS text-align on header column.

{
  // omit...
  headerAlign: 'center'
}

Also, you can custom the align by a callback function:

{
  // omit...
  headerAlign: (column, colIndex) => {
    // column is an object and perform itself
    // return custom title here
  }
}

Parameters

  • column: The value of current column.
  • colIndex: The index of the current column being processed in BootstrapTable.

Return value

A new String will be the result of element headerAlign.

You can assign any HTML Event on table column via events property.

react-bootstrap-table2 currently only support following events which will receive some specific information:

  • onClick
  • onDoubleClick
  • onMouseEnter
  • onMouseLeave
  • onContextMenu
  • onAuxClick
{
  // omit...
  events: {
    onClick: (e, column, columnIndex, row, rowIndex) => { ... },
  }
}

If the events is not listed above, the callback function will only pass the event object.

headerEvents same as column.events but this is for header column.

{
  // omit...
  headerEvents: {
    onClick: (e, column, columnIndex) => { ... }
  }
}

Via attrs property, You can customize table column HTML attribute which allow user to configure the elements or adjust their behavior.

{
  // omit...
  attrs: {
    title: 'bar',
    'data-test': 'foo'
  }
}

Not only Object, callback function is also acceptable. It takes 4 arguments and an Object is expect to return:

{
  attrs: function callback(cell, row, rowIndex, colIndex) { ... }
}

Parameters

  • cell: The value of current cell.
  • row: The value of row being processed in the BootstrapTable.
  • rowIndex: The index of the current row being processed in the BootstrapTable.
  • colIndex: The index of the current column being processed in BootstrapTable.

Return value

A new Object will be the result of element HTML attributes.

Caution:

If column.classes, column.style, column.title, column.hidden or column.align was given at the same time, property attrs has lower priority and it will be overwritten.

{
  // omit...
  title: true, // get higher priority
  attrs: { title: 'test' }
}

headerAttrs is similar to column.attrs but it works for header column.

{
  // omit...
  headerAttrs: {
    title: 'bar',
    'data-test': 'foo'
  }
}

Additionally, customize the header attributes by a 2 arguments callback function:

{
  // omit...
  headerAttrs: (column, colIndex) => ({
    // return customized HTML attribute here
  })
}

Parameters

  • column: The value of current column.
  • colIndex: The index of the current column being processed in BootstrapTable.

Return value

A new Object will be the result of element headerAttrs.

Caution:
Same as column.attrs, it has lower priority and will be overwritten when other props related to HTML attributes were given.

headerSortingClasses allows to customize class for header cell when this column is sorting.

const headerSortingClasses = 'demo-sorting';

Furthermore, it also accepts a callback which takes 4 arguments and String is expected to return:

const headerSortingClasses = (column, sortOrder, isLastSorting, colIndex) => { ... }
  • column: The value of current column.
  • sortOrder: The order of current sorting
  • isLastSorting: Is the last one of sorted columns.
  • colIndex: The index of the current column being processed in BootstrapTable.

It's similar to headerSortingClasses. It allows to customize the style of header cell when this column is sorting. A style Object and callback are acceptable. callback takes 4 arguments and an Object is expected to return:

const sortingHeaderStyle = {
  backgroundColor: 'red'
};

Give a string to render the string value on the footer column.

const columns = [{
  dataField: 'id',
  text: 'Product ID',
  footerAlign: 'center',
  footer: 'Footer 1'
}, .....];

This prop also accept a function:

{
  dataField: 'price',
  text: 'Product Price',
  footer: column => column.reduce((acc, item) => acc + item, 0)
}

footerFormatter allow you to customize the table footer column and only accept a callback function which take two arguments and a JSX/String are expected for return.

  • column
  • columnIndex
  • props: It's an object and contain text property only.

It's similar to column.classes, footerClasses is available to have customized class on table footer column:

{
  // omit...
  footerClasses: 'id-custom-cell'
}

Furthermore, it also accept a callback function which takes 2 arguments and a String is expect to return:

{
  footerClasses: function callback(column, colIndex) { ... }
}

Parameters

  • column: The value of current column.
  • colIndex: The index of the current column being processed in BootstrapTable.

Customized the inline-style on table footer column:

{
  // omit...
  footerStyle: { backgroundColor: 'green' }
}

Moreover, it also accept a callback function which takes 2 arguments and an Object is expect to return:

{
  footerStyle: function callback(column, colIndex) { ... }
}

Parameters

  • column: The value of current column.
  • colIndex: The index of the current column being processed in BootstrapTable.

Configure the title on footer column, default is disable. The usage is almost same as column.title,

{
  // omit...
  footerTitle: true
}

It's also available to custom via a callback function:

{
  footerTitle: function callback(column, colIndex) { ... }
}

Parameters

  • column: The value of current column.
  • colIndex: The index of the current column being processed in BootstrapTable.

footerEvents same as column.events but it is for footer column:

{
  // omit...
  footerEvents: {
    onClick: (e, column, columnIndex) => { ... }
  }
}

It's almost same as column.align, but it's for the CSS text-align on footer column.

{
  // omit...
  footerAlign: 'center'
}

Also, you can custom the align by a callback function:

{
  // omit...
  footerAlign: (column, colIndex) => {
    // column is an object and perform itself
    // return custom title here
  }
}

Parameters

  • column: The value of current column.
  • colIndex: The index of the current column being processed in BootstrapTable.

footerAttrs is similar to column.attrs but it works for footer column.

{
  // omit...
  footerAttrs: {
    title: 'bar',
    'data-test': 'foo'
  }
}

Additionally, customize the header attributes by a 2 arguments callback function:

{
  // omit...
  footerAttrs: (column, colIndex) => ({
    // return customized HTML attribute here
  })
}

Parameters

  • column: The value of current column.
  • colIndex: The index of the current column being processed in BootstrapTable.

column.editable default is true, means every column is editable if you configure cellEdit. But you can disable some columns editable via setting false.

If a callback function given, you can control the editable level as cell level:

{
  // omit...
  editable: (cell, row, rowIndex, colIndex) => {
    // return true or false;
  }
}

column.validator used for validate the data when cell on updating. it's should accept a callback function with following argument: newValue, row and column:

{
  // omit...
  validator: (newValue, row, column) => {
    return ...;
  }
}

The return value can be a bool or an object. If your validation is pass, return true explicitly. If your validation is invalid, return following object instead:

{
  valid: false,
  message: 'SOME_REASON_HERE'
}

If you want to perform a asycn validation, you can do it like this:

{
  // omit...
  validator: (newValue, row, column, done) => {
    settimeout(() => {
      // async validation ok
      return done();

      // async validation not ok
      return done({
        valid: false,
        message: 'SOME_REASON_HERE'
      });

    }, 2000);
    return { async: true };
  }
}

You can use column.editCellStyle to custom the style of <td> when cell editing. It like most of customizable functionality, it also accept a callback function with following params:

Parameters

  • cell: The value of current cell.
  • row: The object of row being processed in the BootstrapTable.
  • rowIndex: The index of the current row being processed in the BootstrapTable.
  • colIndex: The index of the current column being processed in BootstrapTable.
{
  editCellStyle: { ... }
}

Or take a callback function

{
  editCellStyle: (cell, row, rowIndex, colIndex) => {
    // it is suppose to return an object
  }
}

You can use column.editCellClasses to add custom class on <td> when cell editing. It's same as column.editCellStyle which also accept a callback function to able to custom your class more flexible. Following is the arguments of this callback function: cell, row, rowIndex, colIndex.

{
  editCellClasses: 'custom-class'
}

Or take a callback function

{
  editCellClasses: (cell, row, rowIndex, colIndex) => {
    // it is suppose to return a string
  }
}

This is almost same as column.editCellStyle, but column.editorStyle is custom the style on editor instead of cell(td).

This is almost same as column.editCellClasses, but column.editorClasses is custom the class on editor instead of cell(td).

column.editor allow you to custom the type of cell editor by following predefined type:

  • Text(Default)
  • Dropdown
  • Date
  • Textarea
  • Checkbox

Following is a quite example:

import cellEditFactory, { Type } from 'react-bootstrap-table2-editor';

const columns = [
  //...
  , {
    dataField: 'done',
    text: 'Done',
    editor: {
      type: Type.CHECKBOX,
      value: 'Y:N'
    }
  }
];

If you want more information, please check here.

If you feel above predefined editors are not satisfied to your requirement, you can totally custom the editor via column.editorRenderer:

import cellEditFactory, { Type } from 'react-bootstrap-table2-editor';

// Custom Editor
class QualityRanger extends React.Component {
  static propTypes = {
    value: PropTypes.number,
    onUpdate: PropTypes.func.isRequired
  }
  static defaultProps = {
    value: 0
  }
  getValue() {
    return parseInt(this.range.value, 10);
  }
  render() {
    const { value, onUpdate, ...rest } = this.props;
    return [
      <input
        { ...rest }
        key="range"
        ref={ node => this.range = node }
        type="range"
        min="0"
        max="100"
      />,
      <button
        key="submit"
        className="btn btn-default"
        onClick={ () => onUpdate(this.getValue()) }
      >
        done
      </button>
    ];
  }
}


const columns = [
  //...
  , {
    dataField: 'done',
    text: 'Done',
    editorRenderer: (editorProps, value, row, column, rowIndex, columnIndex) =>
      <QualityRanger { ...editorProps } value={ value } />;
  }
];

Configure column.filter will able to setup a column level filter on the header column. Currently, react-bootstrap-table2 support following filters:

  • Text(textFilter)
  • Select(selectFilter)
  • Number(numberFilter)
  • Date(dateFilter)

We have a quick example to show you how to use column.filter:

import { textFilter } from 'react-bootstrap-table2-filter';

// omit...
{
  dataField: 'price',
  text: 'Product Price',
  filter: textFilter()
}

For some reason of simple customization, react-bootstrap-table2 allow you to pass some props to filter factory function. Please check here for more detail tutorial.

Sometimes, if the cell/column value that you don't want to filter on them, you can define filterValue to return a actual value you wanna be filtered:

Parameters

  • cell: The value of current cell.
  • row: The value of current row.

Return value

A final String value you want to be filtered.

// omit...
{
  dataField: 'price',
  text: 'Product Price',
  filter: textFilter(),
  filterValue: (cell, row) => owners[cell]
}

Default the column is searchable. Give false to disable search functionality on specified column.

Default is String. Currently, the available value is String and Number. If Number assigned, the cell value will not wrapped with double quote.

This is same as column.formatter. But csvFormatter only for CSV export and called when export CSV.

Custom the CSV header cell, Default is column.text.

Default is true, false will hide this column when export CSV.