import React, { Component } from 'react' // import PropTypes from 'prop-types' import ChoseColumnsIcon from 'material-ui-icons/MoreVert' import IconButton from 'material-ui/IconButton' import Menu from 'material-ui/Menu' import ListItem from 'material-ui/List/ListItem' import ListItemText from 'material-ui/List/ListItemText' import Switch from 'material-ui/Switch' import { TableViewChoseColumnsProps, TableViewChoseColumnsState, } from './interfaces' export * from './interfaces' export class TableViewChoseColumns extends Component< TableViewChoseColumnsProps, TableViewChoseColumnsState > { // static propTypes = { // classes: PropTypes.object.isRequired, // columnData: PropTypes.array.isRequired, // toggleColumnVisibility: PropTypes.func.isRequired, // } state: TableViewChoseColumnsState = { anchorEl: undefined, } handleClick = (event: React.MouseEvent): void => { this.setState({ anchorEl: event.currentTarget as HTMLElement }) } handleClose = (): void => { this.setState({ anchorEl: undefined }) } toggleColumnVisibility = (event: React.MouseEvent): void => { const { toggleColumnVisibility } = this.props const index = parseInt( event.currentTarget.attributes.getNamedItem('value')?.value || '', 10 ) const checked: boolean = event.currentTarget.attributes.getNamedItem('aria-checked')?.value === 'true' if (isNaN(index)) { return } return toggleColumnVisibility(event, !checked, index) } render(): JSX.Element | null { const { columnData } = this.props if (!columnData || !columnData.length) { return null } const ITEM_HEIGHT = 48 const { anchorEl } = this.state const columns: JSX.Element[] = [] columnData.map((n, index) => { const { id, label, description, hidden } = n if (hidden === undefined) { return } const textPrimary = label || id const checked = hidden === true ? false : true columns.push( toggleColumnVisibility(event, !checked, index)} onClick={this.toggleColumnVisibility} > ) }) if (!columns || !columns.length) { return null } return (
{columns}
) } } export default TableViewChoseColumns