Table
Overview
| Number | Description | 
|---|---|
| 1 | Header of column | 
| 2 | Icon button for insert row | 
| 3 | Icon button for remove row | 
| 4 | Child control component | 
| 5 | Sample row | 
Note
The Table are supporting child control components (Item-4) as below:
- 
    Built-in supported components:
      Text
      Dropdown
      CheckBox
      MultipleChoice
      RadioButton
      Label
      Alert    
 
- Custom components (DOM Elements)
Constructor
Parameter
| Name | Type | Required | Description | 
|---|---|---|---|
| options | Object | No | The object contains the parameters of constructor. | 
| options.columns | Array<Object> | No | The row template. | 
| options.columns[x].header | String | No | Header of column. | 
| options.columns[x].cell | Function | No | Returns cell template object. Refer TableCell for more information. | 
| options.data | Array<Object> | No | The value of table. Refer to the getValue() and setValue(value) for more information. | 
| options.defaultRowData | Object | No | The default value of new row. | 
| options.actionButtonsShown | Boolean | No | Show the action buttons when this parameter is True. Default: True | 
| options.onRowAdd | Callback | No | Handler for row add event. Return row data object to overwrite default row data object. | 
| options.onRowRemove | Callback | No | Handler for row remove event. | 
| options.onCellChange | Callback | No | Handler for cell change event. | 
Sample
JS Simple
(function() {
  // create built-in cell component
  var textBuiltInCell = function () {
    return kintoneUIComponent.createTableCell('text', 'textBuiltIn');
  };
  // create custom cell component
  var textCustomCell = function() {
    return {
      init: function({rowData, updateRowData}) {
        var text = document.createElement('input');
        text.onchange = function(event) {
          updateRowData({textCustom: {value: event.target.value}}, false);
        };
        this.textCustom = text;
        return text;
      },
      update: function({ rowData }) {
        this.textCustom.value = rowData.textCustom.value;
      }
    }
  };
  var columns = [
    { header: 'Built-in cell', cell: function() { return textBuiltInCell() }},
    { header: 'Custom cell', cell: function() { return textCustomCell() }}
  ];
  var initialData = [
    {
      textBuiltIn: { value: 'built-in' },
      textCustom: { value: 'custom' }
    }
  ];
  var defaultRowData = {
    textBuiltIn: { value: '' },
    textCustom: { value: '' }
  };
  var table = new kintoneUIComponent.Table({
    columns: columns,
    data: initialData,
    defaultRowData: defaultRowData
  });
  document.body.appendChild(table.render());
})();
JS Advanced
(function () {
  // custom cell containing 2 text fields
  var customCell = function () {
    return {
      init: function ({ rowData, updateRowData }) {
        var wrapper = document.createElement('span');
        this.textfield1 = new kintoneUIComponent.Text({ value: rowData.text1.value });
        this.textfield1.on('change', function (event) {
          updateRowData({ text1: { value: event.target.value } }, false);
        });
        wrapper.appendChild(this.textfield1.render());
        this.textfield2 = new kintoneUIComponent.Text({ value: rowData.text2.value });
        this.textfield2.on('change', function (event) {
          updateRowData({ text2: { value: event.target.value } }, false);
        });
        wrapper.appendChild(this.textfield2.render());
        return wrapper;
      },
      update: function ({ rowData }) {
        if (rowData.text1) this.textfield1.setValue(rowData.text1.value);
        if (rowData.text2) this.textfield2.setValue(rowData.text2.value);
      }
    }
  };
  // initial data of a table
  var initialData = [
    {
      // initial data of text
      text: { value: 'text field' },
      // initial data of radio buttons
      fruit: {
        name: 'fruit',
        value: 'Banana',
        items: [
          { label: 'Orange', value: 'Orange', isDisabled: false },
          { label: 'Banana', value: 'Banana', isDisabled: true },
          { label: 'Lemon', value: 'Lemon', isDisabled: true },
        ]
      },
      // initial data of multiple choices
      colors: {
        value: ['red'],
        items: [
          { label: 'Red', value: 'red', isDisabled: false },
          { label: 'Green', value: 'green', isDisabled: true },
          { label: 'Blue', value: 'blue', isDisabled: true },
        ]
      },
      // initial data of checkbox
      vegetables: {
        value: ['potato', 'celery'],
        items: [
          { label: 'Potato', value: 'potato', isDisabled: false },
          { label: 'Celery', value: 'celery', isDisabled: false },
          { label: 'Carrot', value: 'carrot', isDisabled: true },
        ]
      },
      // initial data of dropdown
      toys: {
        value: 'cars',
        items: [
          { label: 'Cars', value: 'cars', isDisabled: false },
          { label: 'Robots', value: 'robots', isDisabled: false },
          { label: 'Animals', value: 'animals', isDisabled: true },
        ]
      },
      // initial data of label
      label: { text: 'Name', textColor: '#e74c3c', backgroundColor: 'yellow', isRequired: true },
      // initial data of icon button
      iconBtn: { type: 'insert', color: 'blue', size: 'small' },
      // initial data of alert
      alert: { text: 'Network error', type: 'error' },
      // initial data of custom cell containing 2 text fields
      text1: { value: 'text field 1' },
      text2: { value: 'text field 2' },
    },
  ];
  // default row data of a table, this data will be used to create new row
  var defaultRowData = {
    // default data of text
    text: { value: 'text field' },
    // default data of radio buttons
    fruit: {
      name: 'fruit',
      value: 'Banana',
      items: [
        { label: 'Orange', value: 'Orange', isDisabled: false },
        { label: 'Banana', value: 'Banana', isDisabled: true },
        { label: 'Lemon', value: 'Lemon', isDisabled: true },
      ]
    },
    // default data of multiple choices
    colors: {
      value: ['red'],
      items: [
        { label: 'Red', value: 'red', isDisabled: false },
        { label: 'Green', value: 'green', isDisabled: true },
        { label: 'Blue', value: 'blue', isDisabled: true },
      ]
    },
    // default data of checkbox
    vegetables: {
      value: ['potato', 'celery'],
      items: [
        { label: 'Potato', value: 'potato', isDisabled: false },
        { label: 'Celery', value: 'celery', isDisabled: true },
        { label: 'Carrot', value: 'carrot', isDisabled: true },
      ]
    },
    // default data of dropdown
    toys: {
      value: 'cars',
      items: [
        { label: 'Cars', value: 'cars', isDisabled: false },
        { label: 'Robots', value: 'robots', isDisabled: false },
        { label: 'Animals', value: 'animals', isDisabled: true },
      ]
    },
    // default data of label
    label: { text: 'Name', textColor: '#e74c3c', backgroundColor: 'yellow', isRequired: true },
    // default data of icon button
    iconBtn: { type: 'insert', color: 'blue', size: 'small' },
    // default data of alert
    alert: { text: 'Network error', type: 'error' },
    // default data of custom cell containing 2 text fields
    text1: { value: 'text field 1' },
    text2: { value: 'text field 2' },
  };
  // return this data to override default row data onRowAdd
  var overriddenRowData = {
    // overridden data of text
    text: { value: 'overwritten field value' },
    // overridden data of radio buttons
    fruit: {
      name: 'fruit',
      value: 'Banana',
      items: [
        { label: 'Orange', value: 'Orange', isDisabled: true },
        { label: 'Banana', value: 'Banana', isDisabled: false },
        { label: 'Lemon', value: 'Lemon', isDisabled: false },
      ]
    },
    // overridden data of multiple choices
    colors: {
      value: ['red'],
      items: [
        { label: 'Red', value: 'red', isDisabled: false },
        { label: 'Green', value: 'green', isDisabled: true },
        { label: 'Blue', value: 'blue', isDisabled: true },
      ]
    },
    // overridden data of checkbox
    vegetables: {
      value: ['potato', 'celery'],
      items: [
        { label: 'Potato', value: 'potato', isDisabled: false },
        { label: 'Celery', value: 'celery', isDisabled: true },
        { label: 'Carrot', value: 'carrot', isDisabled: false },
      ]
    },
    // overridden data of dropdown
    toys: {
      value: 'cars',
      items: [
        { label: 'Cars', value: 'cars', isDisabled: false },
        { label: 'Robots', value: 'robots', isDisabled: false },
        { label: 'Animals', value: 'animals', isDisabled: true },
      ]
    },
    // overridden data of label
    label: { text: 'Name', textColor: '#e74c3c', backgroundColor: 'yellow', isRequired: true },
    // overridden data of icon button
    iconBtn: { type: 'insert', color: 'blue', size: 'small' },
    // overridden data of alert
    alert: { text: 'Network error', type: 'error' },
    // overridden data of custom cell containing 2 text fields
    text1: { value: 'overwritten field1 value' },
    text2: { value: 'overwritten field2 value' },
  };
  var table = new kintoneUIComponent.Table({
    // initial table data
    data: initialData,
    // default row data on row add
    defaultRowData: defaultRowData,
    onRowAdd: function (e) {
      console.log('table.onAdd', e);
      /**
       * if onRowAdd does not return anything, defaultRowData will be used to create new table row
       * if below row data is returned, it will override defaultRowData to be used to create new table row
       */
      return JSON.parse(JSON.stringify(overriddenRowData));
    },
    columns: [
      { header: 'Text', cell: function () { return kintoneUIComponent.createTableCell('text', 'text') } },
      { header: 'Radio', cell: function () { return kintoneUIComponent.createTableCell('radio', 'fruit') } },
      { header: 'Multichoice', cell: function () { return kintoneUIComponent.createTableCell('multichoice', 'colors') } },
      { header: 'Checkbox', cell: function () { return kintoneUIComponent.createTableCell('checkbox', 'vegetables') } },
      { header: 'Dropdown', cell: function () { return kintoneUIComponent.createTableCell('dropdown', 'toys') } },
      { header: 'Label', cell: function () { return kintoneUIComponent.createTableCell('label', 'label') } },
      {
        header: 'Icon Button', cell: function () {
          return kintoneUIComponent.createTableCell('icon', 'iconBtn', {
            onClick: function (event) { alert('icon button clicked') }
          });
        }
      },
      { header: 'Alert', cell: function () { return kintoneUIComponent.createTableCell('alert', 'alert') } },
      { header: 'Custom cell contains 2 textfields', cell: function () { return customCell() } },
    ]
  });
  document.body.appendChild(table.render());
})();
React
import React from 'react';
import {render} from 'react-dom';
import { Table, Text} from '@kintone/kintone-ui-component';
export default class Plugin extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      tableData: [
        {text: 'this is a text field'}
      ],
      // default row data on row add
      defaultRowData: {text: 'default text field value'}
    }
  }
  handleRowAdd = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleRowRemove = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleCellChange = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  render() {
    const {tableData, defaultRowData} = this.state;
    const columns = [
      {
        header: 'Text',
        cell: ({ rowIndex, onCellChange }) => {
          return (
            <Text
              value={tableData[rowIndex].text}
              onChange={newValue => onCellChange(newValue, tableData, rowIndex, 'text')}
            />
          )
        }
      },
    ];
    return (
      <Table
        columns={columns}
        data={this.state.tableData}
        defaultRowData={defaultRowData}
        onRowAdd={this.handleRowAdd}
        onRowRemove={this.handleRowRemove}
        onCellChange={this.handleCellChange}
      />
    );
  }
}
render(<Plugin />, kintone.app.getHeaderSpaceElement());
Methods
render()
Get dom element of component.
Parameter
None
Returns
Dom element
Sample
Javascript
var table = new kintoneUIComponent.Table({
  // initial table data
  data: [
    {text: { value: 'this is a text field' }}
  ],
  // default row data on row add
  defaultRowData: {text: { value: 'default text field value' }},
  columns: [
    {
      header: 'Text',
      cell: function() { return kintoneUIComponent.createTableCell('text', 'text') }
    },
  ]
});
var body = document.getElementsByTagName("BODY")[0];
body.appendChild(table.render());
React
import React from 'react';
import {render} from 'react-dom';
import { Table, Text} from '@kintone/kintone-ui-component';
export default class Plugin extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      tableData: [
        {text: 'this is a text field'}
      ],
      // default row data on row add
      defaultRowData: {text: 'default text field value'}
    }
  }
  handleRowAdd = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleRowRemove = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleCellChange = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  render() {
    const {tableData, defaultRowData} = this.state;
    const columns = [
      {
        header: 'Text',
        cell: ({ rowIndex, onCellChange }) => {
          return (
            <Text
              value={tableData[rowIndex].text}
              onChange={newValue => onCellChange(newValue, tableData, rowIndex, 'text')}
            />
          )
        }
      },
    ];
    return (
      <Table
        columns={columns}
        data={this.state.tableData}
        defaultRowData={defaultRowData}
        onRowAdd={this.handleRowAdd}
        onRowRemove={this.handleRowRemove}
        onCellChange={this.handleCellChange}
      />
    );
  }
}
render(<Plugin />, kintone.app.getHeaderSpaceElement());
getValue()
Get value of all rows in the table.
Parameter
None
Returns
| Name | Type | Description | 
|---|---|---|
| value | Array<Object> | Value of all rows in the table | 
Sample
Javascript
var table = new kintoneUIComponent.Table({
  // initial table data
  data: [
    {text: { value: 'this is a text field' }}
  ],
  // default row data on row add
  defaultRowData: {text: { value: 'default text field value' }},
  columns: [
    {
      header: 'Text',
      cell: function() { return kintoneUIComponent.createTableCell('text', 'text') }
    },
  ]
});
var body = document.getElementsByTagName("BODY")[0];
body.appendChild(table.render());
var button = document.createElement('button');
button.innerText = 'Get value';
button.onclick = function () {
  var value = table.getValue();
  value.forEach(rowData => {
    console.log(rowData);
  });
};
body.appendChild(button);
React
import React from 'react';
import {render} from 'react-dom';
import { Table, Text, Button} from '@kintone/kintone-ui-component';
export default class Plugin extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      tableData: [
        {text: 'this is a text field'}
      ],
      // default row data on row add
      defaultRowData: {text: 'default text field value'}
    }
  }
  handleRowAdd = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleRowRemove = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleCellChange = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleClick = () => {
    console.log(this.state.tableData)
  }
  render() {
    const {tableData, defaultRowData} = this.state;
    const columns = [
      {
        header: 'Text',
        cell: ({ rowIndex, onCellChange }) => {
          return (
            <Text
              value={tableData[rowIndex].text}
              onChange={newValue => onCellChange(newValue, tableData, rowIndex, 'text')}
            />
          )
        }
      },
    ];
    return (
      <div>
        <Table 
          columns={columns}
          data={this.state.tableData} 
          defaultRowData={defaultRowData}
          onRowAdd={this.handleRowAdd}
          onRowRemove={this.handleRowRemove}
          onCellChange={this.handleCellChange}
          actionButtonsShown={true}
          isVisible={true}
        />
        <button onClick={this.handleClick}>Get table value</button>
      </div>
    );
  }
}
render(<Plugin />, kintone.app.getHeaderSpaceElement());
setValue(value)
Set data for every row in table. The number of rows in table's dependent on the length on this parameters.
Parameter
| Name | Type | Required | Description | 
|---|---|---|---|
| value | Array<Object> | Yes | Value for every row in table | 
Returns
None
Sample
Javascript
var table = new kintoneUIComponent.Table({
  // initial table data
  data: [
    {text: { value: 'this is a text field' }}
  ],
  // default row data on row add
  defaultRowData: {text: { value: 'default text field value' }},
  columns: [
    {
      header: 'Text',
      cell: function() { return kintoneUIComponent.createTableCell('text', 'text') }
    },
  ]
});
var body = document.getElementsByTagName("BODY")[0];
body.appendChild(table.render());
var button = document.createElement('button');
button.innerText = 'Set Values';
button.onclick = function () {
  table.setValue([
    {text: { value: 'first row' }},
    {text: { value: 'second row' }},
    {text: { value: 'third row' }}
  ]);
};
body.appendChild(button);
React
import React from 'react';
import {render} from 'react-dom';
import { Table, Text, Button} from '@kintone/kintone-ui-component';
export default class Plugin extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      tableData: [
        {text: 'this is a text field'}
      ],
      // default row data on row add
      defaultRowData: {text: 'default text field value'}
    }
  }
  handleRowAdd = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleRowRemove = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleCellChange = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleClick = () => {
    const tableData = [
      {text: 'first row'},
      {text: 'second row'},
      {text: 'third row'}
    ]
    this.setState({tableData})
  }
  render() {
    const {tableData, defaultRowData} = this.state;
    const columns = [
      {
        header: 'Text',
        cell: ({ rowIndex, onCellChange }) => {
          return (
            <Text
              value={tableData[rowIndex].text}
              onChange={newValue => onCellChange(newValue, tableData, rowIndex, 'text')}
            />
          )
        }
      },
    ];
    return (
      <div>
        <Table 
          columns={columns}
          data={this.state.tableData} 
          defaultRowData={defaultRowData}
          onRowAdd={this.handleRowAdd}
          onRowRemove={this.handleRowRemove}
          onCellChange={this.handleCellChange}
          actionButtonsShown={true}
          isVisible={true}
        />
        <button onClick={this.handleClick}>Set table value</button>
      </div>
    );
  }
}
render(<Plugin />, kintone.app.getHeaderSpaceElement());
on(eventName, callBack)
Register callback for an event
Parameter
| Name | Type | Required | Description | 
|---|---|---|---|
| eventName | String | Yes | Name of events: 
 | 
| callback | function | Yes | callback | 
Returns
None
Callback data
| Event | Name | Type | Description | 
|---|---|---|---|
| rowAdd | event | Object | Callback data. | 
| event.data | Array<Object> | Current values of the table. | |
| event.rowIndex | Interger | Position of the new row in the table. | |
| rowRemove | event | object | Callback data. | 
| event.data | Array<Object> | Current values of the table. | |
| event.rowIndex | Interger | Position of the removed row in the table. | |
| cellChange | event | object | Callback data. | 
| event.data | Array<Object> | Values of the table. | |
| event.rowIndex | Interger | Position of the changed row in the table. | |
| event.fieldName | String | name of the data property which changed. | 
Sample
Javascript
var table = new kintoneUIComponent.Table({
  // initial table data
  data: [
    {text: { value: 'this is a text field' }}
  ],
  // default row data on row add
  defaultRowData: {text: { value: 'default text field value' }},
  columns: [
    {
      header: 'Text',
      cell: function() { return kintoneUIComponent.createTableCell('text', 'text') }
    },
  ]
});
var body = document.getElementsByTagName("BODY")[0];
body.appendChild(table.render());
table.on('rowAdd', function(event) {
  console.log(event);
});
table.on('rowRemove', function(event) {
  console.log(event);
});
table.on('cellChange', function(event) {
  console.log(event);
});
React
import React from 'react';
import {render} from 'react-dom';
import { Table, Text, Button} from '@kintone/kintone-ui-component';
export default class Plugin extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      tableData: [
        {text: 'this is a text field'}
      ],
      // default row data on row add
      defaultRowData: {text: 'default text field value'}
    }
  }
  handleRowAdd = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleRowRemove = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleCellChange = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  render() {
    const {tableData, defaultRowData} = this.state;
    const columns = [
      {
        header: 'Text',
        cell: ({ rowIndex, onCellChange }) => {
          return (
            <Text
              value={tableData[rowIndex].text}
              onChange={newValue => onCellChange(newValue, tableData, rowIndex, 'text')}
            />
          )
        }
      },
    ];
    return (
      <Table
        columns={columns}
        data={this.state.tableData}
        defaultRowData={defaultRowData}
        onRowAdd={this.handleRowAdd}
        onRowRemove={this.handleRowRemove}
        onCellChange={this.handleCellChange}
        actionButtonsShown={true}
        isVisible={true}
      />
    );
  }
}
render(<Plugin />, kintone.app.getHeaderSpaceElement());
showActionButtons()
Display table action buttons.
Parameter
None
Returns
None
Sample
Javascript
var table = new kintoneUIComponent.Table({
  // initial table data
  data: [
    {text: { value: 'this is a text field' }}
  ],
  // default row data on row add
  defaultRowData: {text: { value: 'default text field value' }},
  columns: [
    {
      header: 'Text',
      cell: function() { return kintoneUIComponent.createTableCell('text', 'text') }
    },
  ],
  actionButtonsShown: false
});
var body = document.getElementsByTagName("BODY")[0];
body.appendChild(table.render());
var button = document.createElement('button');
button.innerText = 'Show action buttons';
button.onclick = function () {
  table.showActionButtons();
};
body.appendChild(button);
React
import React from 'react';
import {render} from 'react-dom';
import { Table, Text, Button} from '@kintone/kintone-ui-component';
export default class Plugin extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      tableData: [
        {text: 'this is a text field'}
      ],
      // default row data on row add
      defaultRowData: {text: 'default text field value'},
      actionButtonsShown: false
    };
    }
  handleRowAdd = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleRowRemove = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleCellChange = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleClick = () => {
    this.setState({actionButtonsShown: true})
  }
  render() {
    const {tableData, actionButtonsShown, defaultRowData} = this.state;
    const columns = [
      {
        header: 'Text',
        cell: ({ rowIndex, onCellChange }) => {
          return (
            <Text
              value={tableData[rowIndex].text}
              onChange={newValue => onCellChange(newValue, tableData, rowIndex, 'text')}
            />
          )
        }
      },
    ];
    return (
      <div>
        <Table
          columns={columns}
          data={this.state.tableData}
          defaultRowData={defaultRowData}
          onRowAdd={this.handleRowAdd}
          onRowRemove={this.handleRowRemove}
          onCellChange={this.handleCellChange}
          actionButtonsShown={actionButtonsShown}
          isVisible={true}
        />
        <button onClick={this.handleClick}>Show action buttons</button>
      </div>
    );
  }
}
render(<Plugin />, kintone.app.getHeaderSpaceElement());
hideActionButtons()
Hide table action buttons.
Parameter
None
Returns
None
Sample
Javascript
var table = new kintoneUIComponent.Table({
  // initial table data
  data: [
    {text: { value: 'this is a text field' }}
  ],
  // default row data on row add
  defaultRowData: {text: { value: 'default text field value' }},
  columns: [
    {
      header: 'Text',
      cell: function() { return kintoneUIComponent.createTableCell('text', 'text') }
    },
  ],
  actionButtonsShown: true,
});
var body = document.getElementsByTagName("BODY")[0];
body.appendChild(table.render());
var button = document.createElement('button');
button.innerText = 'Hide action buttons';
button.onclick = function () {
  table.hideActionButtons();
};
body.appendChild(button);
React
import React from 'react';
import {render} from 'react-dom';
import { Table, Text, Button} from '@kintone/kintone-ui-component';
export default class Plugin extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      tableData: [
        {text: 'this is a text field'}
      ],
      // default row data on row add
      defaultRowData: {text: 'default text field value'},
      actionButtonsShown: true
    };
  }
  handleRowAdd = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleRowRemove = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleCellChange = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleClick = () => {
    this.setState({actionButtonsShown: false});
  }
  render() {
    const {tableData, actionButtonsShown, defaultRowData} = this.state;
    const columns = [
      {
        header: 'Text',
        cell: ({ rowIndex, onCellChange }) => {
          return (
            <Text
              value={tableData[rowIndex].text}
              onChange={newValue => onCellChange(newValue, tableData, rowIndex, 'text')}
            />
          )
        }
      },
    ];
    return (
      <div>
        <Table
          columns={columns}
          data={this.state.tableData}
          defaultRowData={defaultRowData}
          onRowAdd={this.handleRowAdd}
          onRowRemove={this.handleRowRemove}
          onCellChange={this.handleCellChange}
          actionButtonsShown={actionButtonsShown}
          isVisible={true}
        />
        <button onClick={this.handleClick}>Hide action buttons</button>
      </div>
    );
  }
}
render(<Plugin />, kintone.app.getHeaderSpaceElement());
updateRowData(rowIndex, data, rerender, trigger)
Update data of row at rowIndex with new data
Parameter
| Name | Type | Required | Description | 
|---|---|---|---|
| rowIndex | Integer | Yes | Position of the row which will be updated in the table. | 
| data | Object | Yes | Data object for the row. | 
| rerender | Boolean | No | If true, will re-render table cells according to new data. Default: true | 
| trigger | Boolean | No | If true, will trigger onCellChange event. Default: true | 
Returns
None
Sample
Javascript
var table = new kintoneUIComponent.Table({
  // initial table data
  data: [
      {
        text: { value: 'this is a text field1' },
        checkbox: {
          items: [
            { label: 'Orange', value: 'Orange', isDisabled: false },
            { label: 'Banana', value: 'Banana', isDisabled: true },
            { label: 'Lemon', value: 'Lemon', isDisabled: true },
  ],
          value: ['Orange', 'Banana']
        },
      }
    ],
  // default row data on row add
    defaultRowData: {
      text: { value: 'default text field value' },
      checkbox: {
        items: [
          { label: 'Orange', value: 'Orange', isDisabled: false },
          { label: 'Banana', value: 'Banana', isDisabled: true },
          { label: 'Lemon', value: 'Lemon', isDisabled: true },
        ],
        value: ['Orange', 'Banana']
      },
    },
  columns: [
    {
      header: 'Text',
        cell: function () {
          return kintoneUIComponent.createTableCell('text', 'text', {
            onChange: function ({ data, rowIndex }) {
              data[rowIndex].checkbox.value = ['Lemon'];
              table.updateRowData(rowIndex, data[rowIndex]);
            }
          })
        }
    },
      {
        header: 'Checkbox',
        cell: function () { return kintoneUIComponent.createTableCell('checkbox', 'checkbox') }
      }
    ]
});
var body = document.getElementsByTagName("BODY")[0];
body.appendChild(table.render());
React
import React from 'react';
import {render} from 'react-dom';
import { Table, Text, Button} from '@kintone/kintone-ui-component';
export default class Plugin extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      tableData: [
        {text: 'this is a text field'}
      ],
      // default row data on row add
      defaultRowData: {text: 'default text field value'}
    };
  }
  handleRowAdd = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleRowRemove = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleCellChange = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleClick = () => {
    const {tableData} = this.state;
    tableData[0].text = 'Updated text field value';
    this.setState({tableData});
  }
  render() {
    const {tableData, defaultRowData} = this.state;
    const columns = [
      {
        header: 'Text',
        cell: ({ rowIndex, onCellChange }) => {
          return (
            <Text
              value={tableData[rowIndex].text}
              onChange={newValue => onCellChange(newValue, tableData, rowIndex, 'text')}
            />
          )
        }
      },
    ];
    return (
      <div>
        <Table
          columns={columns}
          data={this.state.tableData}
          defaultRowData={defaultRowData}
          onRowAdd={this.handleRowAdd}
          onRowRemove={this.handleRowRemove}
          onCellChange={this.handleCellChange}
          actionButtonsShown={true}
          isVisible={true}
        />
        <button onClick={this.handleClick}>Update row data</button>
      </div>
    );
  }
}
render(<Plugin />, kintone.app.getHeaderSpaceElement());
createTableCell(type, dataFieldName, props)
Note
- This function support to create built-in components for options.columns[x].cell on Constructor.
- Components: Text Dropdown CheckBox MultipleChoice RadioButton Label Alert
Parameter
| Name | Type | Required | Description | 
|---|---|---|---|
| type | String | Yes | Type of built-in cell. Can be one of the following types: 
 | 
| dataFieldName | String | Yes | Name of the data field associated with the table cell. | 
| props | Object | No | Additional props to pass to component. It can be used to define custom event handler for component. You should specify this arg like following object. | 
Returns
TableCell
Sample
Javascript
var table = new kintoneUIComponent.Table({
  // initial table data
  data: [
    {text: { value: 'this is a text field' }}
  ],
  // default row data on row add
  defaultRowData: {text: { value: 'default text field value' }},
  columns: [
    {
      header: 'Text',
      cell: function() { return kintoneUIComponent.createTableCell(
        'text',
        'text',
        {onClick: function(event) {
          alert('text box was clicked');
          console.log(event);
        }}
      )}
    },
  ]
});
var body = document.getElementsByTagName("BODY")[0];
body.appendChild(table.render());
React
import React from 'react';
import {render} from 'react-dom';
import { Table, Text, Button} from '@kintone/kintone-ui-component';
export default class Plugin extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      tableData: [
        {text: 'this is a text field'}
      ],
      // default row data on row add
      defaultRowData: {text: 'default text field value'}
    };
  }
  handleRowAdd = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleRowRemove = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleCellChange = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  render() {
    const {tableData, defaultRowData} = this.state;
    const columns = [
      {
        header: 'Text',
        cell: ({ rowIndex, onCellChange }) => {
          return (
            <Text
              value={tableData[rowIndex].text}
              onChange={newValue => onCellChange(newValue, tableData, rowIndex, 'text')}
            />
          )
        }
      },
    ];
    return (
        <Table
          columns={columns}
          data={this.state.tableData}
          defaultRowData={defaultRowData}
          onRowAdd={this.handleRowAdd}
          onRowRemove={this.handleRowRemove}
          onCellChange={this.handleCellChange}
          actionButtonsShown={true}
          isVisible={true}
        />
    );
  }
}
render(<Plugin />, kintone.app.getHeaderSpaceElement());
show()
Display the table
Parameter
None
Returns
None
Sample
Javascript
var table = new kintoneUIComponent.Table({
  // initial table data
  data: [
    {text: { value: 'this is a text field' }}
  ],
  // default row data on row add
  defaultRowData: {text: { value: 'default text field value' }},
  columns: [
    {
      header: 'Text',
      cell: function() { return kintoneUIComponent.createTableCell('text', 'text') }
    },
  ],
  isVisible: false
});
var body = document.getElementsByTagName("BODY")[0];
body.appendChild(table.render());
var button = document.createElement('button');
button.innerText = 'Show table';
button.onclick = function () {
  table.show();
};
body.appendChild(button);
React
import React from 'react';
import {render} from 'react-dom';
import { Table, Text, Button} from '@kintone/kintone-ui-component';
export default class Plugin extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      tableData: [
        {text: 'this is a text field'}
      ],
      // default row data on row add
      defaultRowData: {text: 'default text field value'},
      isVisible: false
    }
  }
  handleRowAdd = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleRowRemove = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleCellChange = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleClick = () => {
    this.setState({isVisible: true});
  }
  render() {
    const {tableData, isVisible, defaultRowData} = this.state;
    const columns = [
      {
        header: 'Text',
        cell: ({ rowIndex, onCellChange }) => {
          return (
            <Text
              value={tableData[rowIndex].text}
              onChange={newValue => onCellChange(newValue, tableData, rowIndex, 'text')}
            />
          )
        }
      },
    ];
    return (
      <div>
        <Table
          columns={columns}
          data={this.state.tableData}
          defaultRowData={defaultRowData}
          onRowAdd={this.handleRowAdd}
          onRowRemove={this.handleRowRemove}
          onCellChange={this.handleCellChange}
          actionButtonsShown={true}
          isVisible={isVisible}
        />
        <button onClick={this.handleClick}>Show table</button>
      </div>
    );
  }
}
render(<Plugin />, kintone.app.getHeaderSpaceElement());
hide()
Hide the table
Parameter
None
Returns
None
Sample
Javascript
var table = new kintoneUIComponent.Table({
  // initial table data
  data: [
    {text: { value: 'this is a text field' }}
  ],
  // default row data on row add
  defaultRowData: {text: { value: 'default text field value' }},
  columns: [
    {
      header: 'Text',
      cell: function() { return kintoneUIComponent.createTableCell('text', 'text') }
    },
  ],
  isVisible: true
});
var body = document.getElementsByTagName("BODY")[0];
body.appendChild(table.render());
var button = document.createElement('button');
button.innerText = 'Hide table';
button.onclick = function () {
  table.hide();
};
body.appendChild(button);
React
import React from 'react';
import {render} from 'react-dom';
import { Table, Text, Button} from '@kintone/kintone-ui-component';
export default class Plugin extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      tableData: [
        {text: 'this is a text field'}
      ],
      // default row data on row add
      defaultRowData: {text: 'default text field value'},
      isVisible: true
    };
  }
  handleRowAdd = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleRowRemove = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleCellChange = ({data}) => {
    this.setState({ tableData: data })
    console.log('data: ', data);
  }
  handleClick = () => {
    this.setState({isVisible: false})
  }
  render() {
    const {tableData, isVisible, defaultRowData} = this.state;
    const columns = [
      {
        header: 'Text',
        cell: ({ rowIndex, onCellChange }) => {
          return (
            <Text
              value={tableData[rowIndex].text}
              onChange={newValue => onCellChange(newValue, tableData, rowIndex, 'text')}
            />
          )
        }
      },
    ];
    return (
      <div>
      <Table
        columns={columns}
        data={this.state.tableData}
        defaultRowData={defaultRowData}
        onRowAdd={this.handleRowAdd}
        onRowRemove={this.handleRowRemove}
        onCellChange={this.handleCellChange}
        actionButtonsShown={true}
        isVisible={isVisible}
        />
      <button onClick={this.handleClick}>Hide table</button>
      </div>
    );
  }
}
render(<Plugin />, kintone.app.getHeaderSpaceElement());
Model
TableCell
Note
- TableCell is the template object for options.columns[x].cell on Constructor.
- 
    Cell template can be creating by createTableCell(type, dataFieldName, props) or custom funcions. 
 If using custom function, Cell template object must implement init and update functions.
| Name | Type | Required | Description | 
|---|---|---|---|
| init | Function | Yes | Cell initialization callback. Used to initialize DOM of a cell | 
| update | Function | Yes | Cell update callback. Used to update DOM of a cell. | 
Sample
Javascript
// create built-in cell component
var textBuiltInCell = function () {
  return kintoneUIComponent.createTableCell('text', 'textBuiltIn');
};
// create custom cell component
var textCustomCell = function() {
  return {
    init: function({rowData, updateRowData}) {
        var text = document.createElement('input');
      text.onchange = function(event) {
        updateRowData({textCustom: {value: event.target.value}}, false);
      };
      this.textCustom = text;
      return text;
    },
    update: function({ rowData }) {
      this.textCustom.value = rowData.textCustom.value;
    }
  }
};
var columns = [
  { header: 'Built-in cell', cell: function() { return textBuiltInCell() }},
  { header: 'Custom cell', cell: function() { return textCustomCell() }}
];
var initialData = [
    {
    textBuiltIn: { value: 'built-in' },
    textCustom: { value: 'custom' }
    }
];
var defaultRowData = {
  textBuiltIn: { value: '' },
  textCustom: { value: '' }
};
var table = new kintoneUIComponent.Table({
  columns: columns,
  data: initialData,
  defaultRowData: defaultRowData
});
document.body.appendChild(table.render());