import React from 'react' import { Card, CardContent, Typography, Box, FormControlLabel, Switch, List, ListItem, ListItemIcon, ListItemText, Checkbox, } from '@material-ui/core' import CheckBoxIcon from '@material-ui/icons/CheckBox' import CheckBoxOutlineBlankIcon from '@material-ui/icons/CheckBoxOutlineBlank' import Alert from '@material-ui/lab/Alert' import { useGetList, useTranslate } from 'react-admin' import PropTypes from 'prop-types' export const UsersPermissionCard = ({ manifest, classes, selectedUsers, allUsers, onSelectedUsersChange, onAllUsersChange, }) => { const translate = useTranslate() // Fetch all users const { data: usersData, loading: usersLoading } = useGetList('user', { pagination: { page: 1, perPage: 1000 }, sort: { field: 'userName', order: 'ASC' }, }) const users = React.useMemo(() => { return usersData ? Object.values(usersData) : [] }, [usersData]) const handleToggleUser = React.useCallback( (userId) => { const newSelected = selectedUsers.includes(userId) ? selectedUsers.filter((id) => id !== userId) : [...selectedUsers, userId] onSelectedUsersChange(newSelected) }, [selectedUsers, onSelectedUsersChange], ) const handleAllUsersToggle = React.useCallback( (event) => { onAllUsersChange(event.target.checked) }, [onAllUsersChange], ) // Get permission reason from manifest const usersPermission = manifest?.permissions?.users const reason = usersPermission?.reason // Check if permission is required but not configured const isConfigurationRequired = usersPermission && !allUsers && selectedUsers.length === 0 if (!usersPermission) { return null } return ( {translate('resources.plugin.sections.usersPermission')} {reason && ( {translate('resources.plugin.messages.permissionReason')}: {reason} )} {isConfigurationRequired && ( {translate('resources.plugin.messages.usersRequired')} )} } label={translate('resources.plugin.fields.allUsers')} /> {translate('resources.plugin.messages.allUsersHelp')} {!allUsers && ( {translate('resources.plugin.fields.selectedUsers')} {usersLoading ? ( {translate('ra.message.loading')} ) : users.length === 0 ? ( {translate('resources.plugin.messages.noUsers')} ) : ( {users.map((user) => ( handleToggleUser(user.id)} dense > } checkedIcon={} checked={selectedUsers.includes(user.id)} tabIndex={-1} disableRipple /> ))} )} )} ) } UsersPermissionCard.propTypes = { manifest: PropTypes.object, classes: PropTypes.object.isRequired, selectedUsers: PropTypes.array.isRequired, allUsers: PropTypes.bool.isRequired, onSelectedUsersChange: PropTypes.func.isRequired, onAllUsersChange: PropTypes.func.isRequired, }