Newer
Older
piotr.kupczyk@id.ethz.ch
committed
import _ from 'lodash'
import React from 'react'
piotr.kupczyk@id.ethz.ch
committed
import { withStyles } from '@material-ui/core/styles'
piotr.kupczyk@id.ethz.ch
committed
import IconButton from '@material-ui/core/IconButton'
import SettingsIcon from '@material-ui/icons/Settings'
piotr.kupczyk@id.ethz.ch
committed
import Popover from '@material-ui/core/Popover'
import ColumnConfigRow from './ColumnConfigRow.jsx'
piotr.kupczyk@id.ethz.ch
committed
import logger from '../../../common/logger.js'
piotr.kupczyk@id.ethz.ch
committed
const styles = () => ({
container: {
piotr.kupczyk@id.ethz.ch
committed
display: 'flex',
alignItems: 'center'
},
columns: {
listStyle: 'none',
padding: '10px 20px',
margin: 0
piotr.kupczyk@id.ethz.ch
committed
}
})
class ColumnConfig extends React.Component {
piotr.kupczyk@id.ethz.ch
committed
constructor(props) {
piotr.kupczyk@id.ethz.ch
committed
super(props)
this.state = {
el: null
}
this.handleOpen = this.handleOpen.bind(this)
this.handleClose = this.handleClose.bind(this)
}
piotr.kupczyk@id.ethz.ch
committed
handleOpen(event) {
piotr.kupczyk@id.ethz.ch
committed
this.setState({
el: event.currentTarget
})
}
piotr.kupczyk@id.ethz.ch
committed
handleClose() {
piotr.kupczyk@id.ethz.ch
committed
this.setState({
el: null
})
}
render() {
piotr.kupczyk@id.ethz.ch
committed
logger.log(logger.DEBUG, 'ColumnConfig.render')
piotr.kupczyk@id.ethz.ch
committed
const { classes, columns, onVisibleChange, onOrderChange } = this.props
piotr.kupczyk@id.ethz.ch
committed
const { el } = this.state
return (
piotr.kupczyk@id.ethz.ch
committed
<div className={classes.container}>
piotr.kupczyk@id.ethz.ch
committed
<IconButton onClick={this.handleOpen}>
<SettingsIcon />
piotr.kupczyk@id.ethz.ch
committed
</IconButton>
piotr.kupczyk@id.ethz.ch
committed
<Popover
open={Boolean(el)}
anchorEl={el}
onClose={this.handleClose}
anchorOrigin={{
vertical: 'top',
piotr.kupczyk@id.ethz.ch
committed
horizontal: 'center'
piotr.kupczyk@id.ethz.ch
committed
}}
transformOrigin={{
vertical: 'bottom',
piotr.kupczyk@id.ethz.ch
committed
horizontal: 'center'
piotr.kupczyk@id.ethz.ch
committed
}}
>
piotr.kupczyk@id.ethz.ch
committed
<ol className={classes.columns}>
{columns.map(column => (
piotr.kupczyk@id.ethz.ch
committed
<li key={column.field}>
<ColumnConfigRow
column={column}
onVisibleChange={onVisibleChange}
onOrderChange={onOrderChange}
piotr.kupczyk@id.ethz.ch
committed
/>
piotr.kupczyk@id.ethz.ch
committed
</li>
))}
</ol>
piotr.kupczyk@id.ethz.ch
committed
</Popover>
piotr.kupczyk@id.ethz.ch
committed
</div>
piotr.kupczyk@id.ethz.ch
committed
)
}
}
piotr.kupczyk@id.ethz.ch
committed
export default _.flow(withStyles(styles))(ColumnConfig)