# Row expand `react-bootstrap-table2` supports the row expand feature. By passing prop `expandRow` to enable this functionality. > Default is click to expand/collapse a row. In addition, we don't support any way to change this mechanism! ## Required * [renderer (**required**)](#renderer) ## Optional * [expanded](#expanded) * [nonExpandable](#nonExpandable) * [onExpand](#onExpand) * [onExpandAll](#onExpandAll) * [showExpandColumn](#showExpandColumn) * [onlyOneExpanding](#onlyOneExpanding) * [expandByColumnOnly](#expandByColumnOnly) * [expandColumnPosition](#expandColumnPosition) * [expandColumnRenderer](#expandColumnRenderer) * [expandHeaderColumnRenderer](#expandHeaderColumnRenderer) * [className](#className) * [parentClassName](#parentClassName) ### expandRow.renderer - [Function] Specify the content of expand row, `react-bootstrap-table2` will pass a row object as argument and expect return a react element. #### values * **row** * **rowIndex** #### examples ```js const expandRow = { renderer: (row, rowIndex) => (

{ `This Expand row is belong to rowKey ${row.id}` }

You can render anything here, also you can add additional data on every row object

expandRow.renderer callback will pass the origin row object to you

) }; ``` ### expandRow.expanded - [Array] `expandRow.expanded` allow you have default row expandations on table. ```js const expandRow = { renderer: (row) => ... expanded: [1, 3] // should be a row keys array }; ``` ### expandRow.nonExpandable - [Array] This prop allow you to restrict some rows which can not be expanded by user. `expandRow.nonExpandable` accept an rowkeys array. ```js const expandRow = { renderer: (row) => ... nonExpandable: [1, 3 ,5] }; ``` ### expandRow.onExpand - [Function] This callback function will be called when a row is expand/collapse and pass following four arguments: `row`, `isExpand`, `rowIndex` and `e`. ```js const expandRow = { renderer: (row) => ... onExpand: (row, isExpand, rowIndex, e) => { // ... } }; ``` ### expandRow.onExpandAll - [Function] This callback function will be called when expand/collapse all. It only work when you configure [`expandRow.showExpandColumn`](#showExpandColumn) as `true`. ```js const expandRow = { renderer: (row) => ... onExpandAll: (isExpandAll, results, e) => { // ... } }; ``` ### expandRow.expandColumnRenderer - [Function] Provide a callback function which allow you to custom the expand indicator. This callback only have one argument which is an object and contain these properties: * `expanded`: If current row is expanded or not * `rowKey`: Current row key * `expandable`: If currnet row is expandable or not ```js const expandRow = { renderer: (row) => ... expandColumnRenderer: ({ expanded, rowKey, expandable }) => ( // .... ) }; ``` > By default, `react-bootstrap-table2` will help you to handle the click event, it's not necessary to handle again by developer. ### expandRow.expandHeaderColumnRenderer - [Function] Provide a callback function which allow you to custom the expand indicator in the expand header column. This callback only have one argument which is an object and contain one property `isAnyExpands` which indicate if there's any rows are expanded: ```js const expandRow = { renderer: (row) => ... expandHeaderColumnRenderer: ({ isAnyExpands }) => ( // .... ) }; ``` > By default, `react-bootstrap-table2` will help you to handle the click event, it's not necessary to handle again by developer. ### expandRow.showExpandColumn - [Bool] Default is `false`, if you want to have a expand indicator, give this prop as `true` ```js const expandRow = { renderer: (row) => ... showExpandColumn: true }; ``` ### expandRow.onlyOneExpanding - [Bool] Default is `false`. Enable this will only allow one row get expand at the same time. ```js const expandRow = { renderer: (row) => ... onlyOneExpanding: true }; ``` ### expandRow.expandByColumnOnly - [Bool] Default is `false`. If you want to restrict user to expand/collapse row via clicking the expand column only, you can enable it. ```js const expandRow = { renderer: (row) => ..., showExpandColumn: true, expandByColumnOnly: true }; ``` ### expandRow.expandColumnPosition - [String] Default is `left`. You can give this as `right` for rendering expand column in the right side. ```js const expandRow = { renderer: (row) => ..., showExpandColumn: true, expandColumnPosition: 'right' }; ``` ### expandRow.className - [String | Function] Apply the custom class name on the expanding row. For example: ```js const expandRow = { renderer: (row) => ..., className: 'foo' }; ``` following usage is more flexible way for customing the class name: ```js const expandRow = { renderer: (row) => ..., className: (isExpanded, row, rowIndex) => { if (rowIndex > 2) return 'foo'; return 'bar'; } }; ``` ### expandRow.parentClassName - [String | Function] Apply the custom class name on parent row of expanded row. For example: ```js const expandRow = { renderer: (row) => ..., parentClassName: 'foo' }; ``` Below case is more flexible way to custom the class name: ```js const expandRow = { renderer: (row) => ..., parentClassName: (isExpanded, row, rowIndex) => { if (rowIndex > 2) return 'foo'; return 'bar'; } }; ```