@plone/volto
Version:
Volto
87 lines (83 loc) • 2.7 kB
JSX
import PropTypes from 'prop-types';
import { FormattedMessage } from 'react-intl';
import { Dropdown, Table, Checkbox } from 'semantic-ui-react';
import trashSVG from '@plone/volto/icons/delete.svg';
import ploneSVG from '@plone/volto/icons/plone.svg';
import Icon from '@plone/volto/components/theme/Icon/Icon';
import { canAssignRole } from '@plone/volto/helpers/User/User';
const RenderGroups = (props) => {
const onChange = (event, { value }) => {
const [group, role] = value.split('.');
props.updateGroups(group, role);
};
const isAuthGroup = (roleId) => {
return props.inheritedRole.includes(roleId);
};
const canDeleteGroup = () => {
if (props.isUserManager) return true;
return !props.group.roles.includes('Manager');
};
return (
<Table.Row key={props.group.title}>
<Table.Cell>{props.group.groupname}</Table.Cell>
{props.roles.map((role) => (
<Table.Cell key={role.id}>
{props.inheritedRole &&
props.inheritedRole.includes(role.id) &&
props.group.roles.includes('Authenticated') ? (
<Icon
name={ploneSVG}
size="20px"
color="#007EB1"
title={'plone-svg'}
/>
) : (
<Checkbox
checked={
props.group.id === 'AuthenticatedUsers'
? isAuthGroup(role.id)
: props.group.roles.includes(role.id)
}
onChange={onChange}
value={`${props.group.id}.${role.id}`}
disabled={!canAssignRole(props.isUserManager, role)}
/>
)}
</Table.Cell>
))}
<Table.Cell textAlign="right">
{canDeleteGroup() && (
<Dropdown icon="ellipsis horizontal">
<Dropdown.Menu className="left">
<Dropdown.Item
onClick={props.onDelete}
value={props.group['@id']}
>
<Icon name={trashSVG} size="15px" />
<FormattedMessage id="Delete" defaultMessage="Delete" />
</Dropdown.Item>
</Dropdown.Menu>
</Dropdown>
)}
</Table.Cell>
</Table.Row>
);
};
RenderGroups.propTypes = {
//single group
group: PropTypes.shape({
title: PropTypes.string,
description: PropTypes.string,
email: PropTypes.string,
groupname: PropTypes.string,
roles: PropTypes.arrayOf(PropTypes.string),
}).isRequired,
roles: PropTypes.arrayOf(
PropTypes.shape({
id: PropTypes.string,
}),
).isRequired,
inheritedRole: PropTypes.array,
onDelete: PropTypes.func.isRequired,
};
export default RenderGroups;