import React, { useState } from 'react'import PropTypes from 'prop-types'import IconButton from '@material-ui/core/IconButton'import Menu from '@material-ui/core/Menu'import MenuItem from '@material-ui/core/MenuItem'import { makeStyles, Typography } from '@material-ui/core'import MoreVertIcon from '@material-ui/icons/MoreVert'import Checkbox from '@material-ui/core/Checkbox'import { useDispatch, useSelector } from 'react-redux'import { useTranslate } from 'react-admin'import { setToggleableFields } from '../actions'const useStyles = makeStyles({menuIcon: {position: 'relative',top: '-0.5em',},menu: {width: '24ch',},columns: {maxHeight: '21rem',overflow: 'auto',},title: {margin: '1rem',},})export const ToggleFieldsMenu = ({resource,topbarComponent: TopBarComponent,hideColumns,}) => {const [anchorEl, setAnchorEl] = useState(null)const dispatch = useDispatch()const translate = useTranslate()const toggleableColumns = useSelector((state) => state.settings.toggleableFields[resource],)const omittedColumns =useSelector((state) => state.settings.omittedFields[resource]) || []const classes = useStyles()const open = Boolean(anchorEl)const handleOpen = (event) => {setAnchorEl(event.currentTarget)}const handleClose = () => {setAnchorEl(null)}const handleClick = (selectedColumn) => {dispatch(setToggleableFields({[resource]: {...toggleableColumns,[selectedColumn]: !toggleableColumns[selectedColumn],},}),)}return (<div className={classes.menuIcon}><IconButtonaria-label="more"aria-controls="long-menu"aria-haspopup="true"onClick={handleOpen}><MoreVertIcon /></IconButton><Menuid="long-menu"anchorEl={anchorEl}keepMountedopen={open}onClose={handleClose}classes={{paper: classes.menu,}}>{TopBarComponent && <TopBarComponent />}{!hideColumns && toggleableColumns ? (<div><Typography className={classes.title}>{translate('ra.toggleFieldsMenu.columnsToDisplay')}</Typography><div className={classes.columns}>{Object.entries(toggleableColumns).map(([key, val]) =>!omittedColumns.includes(key) ? (<MenuItem key={key} onClick={() => handleClick(key)}><Checkbox checked={val} />{translate(`resources.${resource}.fields.${key}`)}</MenuItem>) : null,)}</div></div>) : null}</Menu></div>)}ToggleFieldsMenu.propTypes = {resource: PropTypes.string.isRequired,topbarComponent: PropTypes.elementType,hideColumns: PropTypes.bool,}