import { useEffect, useState } from 'react'; import PropTypes from 'prop-types'; import { Avatar, Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, InputLabel, Icon, IconButton, List, ListItem, ListItemAvatar, ListItemSecondaryAction, ListItemText, MenuItem, Select, FormControl, } from '@material-ui/core'; import AddUserComponent from './access-add-user'; import projectApi from '../../store/project/api'; import PageContent from '../common/PageContent'; import HeaderTitle from '../common/HeaderTitle'; import { useHistory } from 'react-router-dom'; function AccessComponent({ projectId, project }) { const [roles, setRoles] = useState([]); const [users, setUsers] = useState([]); const [error, setError] = useState(); const history = useHistory(); const fetchAccess = async () => { const access = await projectApi.fetchAccess(projectId); setRoles(access.roles); setUsers( access.users.map(u => ({ ...u, name: u.name || '(No name)' })) ); }; useEffect(() => { fetchAccess(); // eslint-disable-next-line react-hooks/exhaustive-deps }, [projectId]); if (!project) { return

....

; } const handleRoleChange = (userId, currRoleId) => async evt => { const roleId = evt.target.value; try { await projectApi.removeUserFromRole(projectId, currRoleId, userId); await projectApi.addUserToRole(projectId, roleId, userId); const newUsers = users.map(u => { if (u.id === userId) { return { ...u, roleId }; } else return u; }); setUsers(newUsers); } catch (err) { setError(err.message || 'Server problems when adding users.'); } }; const addUser = async (userId, roleId) => { try { await projectApi.addUserToRole(projectId, roleId, userId); await fetchAccess(); } catch (err) { setError(err.message || 'Server problems when adding users.'); } }; const removeAccess = (userId, roleId) => async () => { try { await projectApi.removeUserFromRole(projectId, roleId, userId); const newUsers = users.filter(u => u.id !== userId); setUsers(newUsers); } catch (err) { setError(err.message || 'Server problems when adding users.'); } }; const handleCloseError = () => { setError(undefined); }; return ( history.goBack()} > Back } /> } > {'Error'} {error}
{users.map(user => { const labelId = `checkbox-list-secondary-label-${user.id}`; return ( Role delete ); })}
); } AccessComponent.propTypes = { projectId: PropTypes.string.isRequired, project: PropTypes.object, }; export default AccessComponent;