+);
diff --git a/packages/react-bootstrap-table2-example/stories/index.js b/packages/react-bootstrap-table2-example/stories/index.js
index 788b083..e26f29d 100644
--- a/packages/react-bootstrap-table2-example/stories/index.js
+++ b/packages/react-bootstrap-table2-example/stories/index.js
@@ -20,6 +20,7 @@ import TabIndexCellTable from 'examples/basic/tabindex-column';
import Bootstrap4DefaultSortTable from 'examples/bootstrap4/sort';
import Bootstrap4RowSelectionTable from 'examples/bootstrap4/row-selection';
import Bootstrap4PaginationTable from 'examples/bootstrap4/pagination';
+import Bootstrap4ColumnToggleTable from 'examples/bootstrap4/column-toggle';
// work on columns
import NestedDataTable from 'examples/columns/nested-data-table';
@@ -193,6 +194,12 @@ import CustomCSVButton from 'examples/csv/custom-csv-button';
import ExportCustomData from 'examples/csv/export-custom-data';
import CustomCSV from 'examples/csv/custom-csv';
+// Column toggle
+import BasicColumnToggle from 'examples/column-toggle';
+import DefaultVisibility from 'examples/column-toggle/default-visibility';
+import StylingColumnToggle from 'examples/column-toggle/styling-toggle-list';
+import CustomToggleList from 'examples/column-toggle/custom-toggle-list';
+
// loading overlay
import EmptyTableOverlay from 'examples/loading-overlay/empty-table-overlay';
import TableOverlay from 'examples/loading-overlay/table-overlay';
@@ -240,7 +247,8 @@ storiesOf('Bootstrap 4', module)
.addDecorator(bootstrapStyle(BOOTSTRAP_VERSION.FOUR))
.add('Sort table with bootstrap 4', () => )
.add('Row selection table with bootstrap 4', () => )
- .add('Pagination table with bootstrap 4', () => );
+ .add('Pagination table with bootstrap 4', () => )
+ .add('Column Toggle with bootstrap 4', () => );
storiesOf('Work on Columns', module)
.addDecorator(bootstrapStyle())
@@ -415,6 +423,13 @@ storiesOf('Table Search', module)
.add('Search Fromatted Value', () => )
.add('Custom Search Value', () => );
+storiesOf('Column Toggle', module)
+ .addDecorator(bootstrapStyle())
+ .add('Basic Column Toggle', () => )
+ .add('Default Visibility', () => )
+ .add('Styling Column Toggle', () => )
+ .add('Custom Column Toggle', () => );
+
storiesOf('Export CSV', module)
.addDecorator(bootstrapStyle())
.add('Basic Export CSV', () => )
diff --git a/packages/react-bootstrap-table2-toolkit/README.md b/packages/react-bootstrap-table2-toolkit/README.md
index dcf7738..78fb3a0 100644
--- a/packages/react-bootstrap-table2-toolkit/README.md
+++ b/packages/react-bootstrap-table2-toolkit/README.md
@@ -2,9 +2,15 @@
`react-bootstrap-table2` support some additional features in [`react-bootstrap-table2-toolkit`](https://github.com/react-bootstrap-table/react-bootstrap-table2/tree/develop/packages/react-bootstrap-table2-toolkit).
-In the future, this toolkit will support other feature like row delete, insert etc. Right now we only support Table Search and CSV export.
+In the future, this toolkit will support other feature like row delete, insert etc. Right now we only following features:
+
+* Table Search
+* Export CSV
+* Column Toggle
**[Live Demo For Table Search](https://react-bootstrap-table.github.io/react-bootstrap-table2/storybook/index.html?selectedKind=Table%20Search)**
+**[Live Demo For Export CSV](https://react-bootstrap-table.github.io/react-bootstrap-table2/storybook/index.html?selectedKind=Export%20CSV&selectedStory=Basic%20Export%20CSV)**
+**[Live Demo For Column Toggle](https://react-bootstrap-table.github.io/react-bootstrap-table2/storybook/index.html?selectedKind=Column%20Toggle&selectedStory=Basic%20Column%20Toggle)**
**[API&Props Definitation](https://react-bootstrap-table.github.io/react-bootstrap-table2/docs/pagination-props.html)**
@@ -168,4 +174,36 @@ Default is `true`.
Default is `true`. `false` will only export current data which display on table.
#### onlyExportSelection - [bool]
-Default is `false`. `true` will only export the data which is selected.
\ No newline at end of file
+Default is `false`. `true` will only export the data which is selected.
+
+## Column Toggle
+
+Let's see how to render the column toggle in your react component:
+
+```js
+import BootstrapTable from 'react-bootstrap-table-next';
+import ToolkitProvider, { ColumnToggle } from 'react-bootstrap-table2-toolkit';
+
+
+ {
+ props => (
+
+
+
+
+
+ )
+ }
+
+```
+
+> `columnToggleProps` props have enough information to let you custom the toggle list: [demo]([Live Demo For Export CSV](https://react-bootstrap-table.github.io/react-bootstrap-table2/storybook/index.html?selectedKind=Export%20CSV&selectedStory=Custom%20Column%20Toggle))
+
+If you want to have default visibility on specified column, you can just give `true` or `false` on `column.hidden`.
\ No newline at end of file
diff --git a/packages/react-bootstrap-table2-toolkit/context.js b/packages/react-bootstrap-table2-toolkit/context.js
index c1664c3..322106e 100644
--- a/packages/react-bootstrap-table2-toolkit/context.js
+++ b/packages/react-bootstrap-table2-toolkit/context.js
@@ -1,13 +1,14 @@
+/* eslint no-param-reassign: 0 */
import React from 'react';
import PropTypes from 'prop-types';
-import statelessDrcorator from './statelessOp';
+import statelessDecorator from './statelessOp';
-import createContext from './src/search/context';
+import createSearchContext from './src/search/context';
const ToolkitContext = React.createContext();
-class ToolkitProvider extends statelessDrcorator(React.Component) {
+class ToolkitProvider extends statelessDecorator(React.Component) {
static propTypes = {
keyField: PropTypes.string.isRequired,
data: PropTypes.array.isRequired,
@@ -42,13 +43,22 @@ class ToolkitProvider extends statelessDrcorator(React.Component) {
constructor(props) {
super(props);
- this.state = {
- searchText: typeof props.search === 'object' ? (props.search.defaultSearch || '') : ''
- };
+ const state = {};
this._ = null;
this.onClear = this.onClear.bind(this);
this.onSearch = this.onSearch.bind(this);
+ this.onColumnToggle = this.onColumnToggle.bind(this);
this.setDependencyModules = this.setDependencyModules.bind(this);
+
+ if (props.columnToggle) {
+ state.columnToggle = props.columns
+ .reduce((obj, column) => {
+ obj[column.dataField] = !column.hidden;
+ return obj;
+ }, {});
+ }
+ state.searchText = typeof props.search === 'object' ? (props.search.defaultSearch || '') : '';
+ this.state = state;
}
onSearch(searchText) {
@@ -61,6 +71,14 @@ class ToolkitProvider extends statelessDrcorator(React.Component) {
this.setState({ searchText: '' });
}
+ onColumnToggle(dataField) {
+ const { columnToggle } = this.state;
+ columnToggle[dataField] = !columnToggle[dataField];
+ this.setState(({
+ ...this.state,
+ columnToggle
+ }));
+ }
/**
*
* @param {*} _
@@ -84,10 +102,15 @@ class ToolkitProvider extends statelessDrcorator(React.Component) {
};
if (this.props.search) {
baseProps.search = {
- searchContext: createContext(this.props.search),
+ searchContext: createSearchContext(this.props.search),
searchText: this.state.searchText
};
}
+ if (this.props.columnToggle) {
+ baseProps.columnToggle = {
+ toggles: this.state.columnToggle
+ };
+ }
return (
diff --git a/packages/react-bootstrap-table2-toolkit/index.js b/packages/react-bootstrap-table2-toolkit/index.js
index f9553ac..a5ea381 100644
--- a/packages/react-bootstrap-table2-toolkit/index.js
+++ b/packages/react-bootstrap-table2-toolkit/index.js
@@ -5,3 +5,4 @@ export default ToolkitProvider;
export const ToolkitContext = Context;
export { default as Search } from './src/search';
export { default as CSVExport } from './src/csv';
+export { default as ColumnToggle } from './src/column-toggle';
diff --git a/packages/react-bootstrap-table2-toolkit/src/column-toggle/index.js b/packages/react-bootstrap-table2-toolkit/src/column-toggle/index.js
new file mode 100644
index 0000000..afc5dae
--- /dev/null
+++ b/packages/react-bootstrap-table2-toolkit/src/column-toggle/index.js
@@ -0,0 +1,3 @@
+import ToggleList from './toggle-list';
+
+export default { ToggleList };
diff --git a/packages/react-bootstrap-table2-toolkit/src/column-toggle/toggle-list.js b/packages/react-bootstrap-table2-toolkit/src/column-toggle/toggle-list.js
new file mode 100644
index 0000000..b5039f8
--- /dev/null
+++ b/packages/react-bootstrap-table2-toolkit/src/column-toggle/toggle-list.js
@@ -0,0 +1,50 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+
+const ToggleList = ({
+ columns,
+ onColumnToggle,
+ toggles,
+ contextual,
+ className,
+ btnClassName
+}) => (
+