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 (
{TopBarComponent && } {!hideColumns && toggleableColumns ? (
{translate('ra.toggleFieldsMenu.columnsToDisplay')}
{Object.entries(toggleableColumns).map(([key, val]) => !omittedColumns.includes(key) ? ( handleClick(key)}> {translate(`resources.${resource}.fields.${key}`)} ) : null, )}
) : null}
) } ToggleFieldsMenu.propTypes = { resource: PropTypes.string.isRequired, topbarComponent: PropTypes.elementType, hideColumns: PropTypes.bool, }