Dynamic columns
You can dynamically show and hide grid columns by changing the viewColumns
property.
In this example, we’ve created a form with checkboxes and column names as options.
When checkboxes are clicked, the value of viewColumns changes and the grid updates appropriately.
Form.js
:
class Form extends React . Component {
constructor ( props ) {
super ( props );
this . state = {
cols : _ . clone ( this . props . cols ) // Copy all columns
};
this . applyChanges = this . applyChanges . bind ( this );
this . onChangeCheckbox = this . onChangeCheckbox . bind ( this );
}
applyChanges () {
this . props . onChange ( _ . clone ( this . state . cols ));
}
onChangeCheckbox ( key , value ) {
this . state . cols [ key ] = value ; // Change checkbox value
this . forceUpdate (); // and update it
}
render () {
return (
< div className = "modal-dialog" >
< div className = "modal-content animated fadeIn" >
< div className = "modal-header" >
< button type = "button" className = "close" data - dismiss = "modal" >
< span aria - hidden = "true" > × < /span >
< span className = "sr-only" > Close < /span >
< /button >
< h4 className = "modal-title" > Columns < /h4 >
< /div >
< div className = "modal-body" >
< form className = "form-horizontal" >
{ _ . map ( columns , function ( value , key ) {
return (
< FormCheckbox
id = { key }
key = { key }
value = { this . state . cols [ key ]}
label = { value . name }
onChange = { this . onChangeCheckbox . bind ( null , key )}
/> ) ;
}. bind ( this ))}
< /form >
< /div >
< div className = "modal-footer" >
< button type = "button" className = "btn btn-white" data - dismiss = "modal" > Cancel < /button >
< button type = "submit" className = "btn btn-primary" onClick = { this . applyChanges } > Apply < /button >
< /div >
< /div >
< /div >
);
}
}
MainComponent.js
:
class MainComponent extends React . Component {
constructor ( props ) {
super ( props );
this . state = {
model : model ,
cols : {
// display name, surname, phone by default
name : true ,
surname : true ,
phone : true ,
// hide age, gender
age : false ,
gender : false
}
};
this . openColumnsForm = this . openColumnsForm . bind ( this );
}
openColumnsForm () {
//open modal with our information (you can use your own modal)
const columnsWindow = popup . open ( Form , {
cols : this . state . cols ,
onChange : ( cols ) => {
columnsWindow . close ();
this . setState ({ cols });
}
}, "opened" );
}
render () {
return (
< div >
< a className = "btn btn-success" onClick = { this . openColumnsForm } >
< i className = "fa fa-th-list" >< /i>{' '}Column s
< /a >
< UIKernel . Grid
cols = { columns }
model = { this . state . model }
viewColumns = { this . state . cols }
viewCount = { 20 }
/ >
< /div >
);
}
}
main.js
:
ReactDOM . render ( < MainComponent /> , document . getElementById ( "example" ));