import React, { useEffect, useState } from 'react'; import PropTypes from 'prop-types'; import { Avatar, Button, Card, CardHeader, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, Icon, IconButton, List, ListItem, ListItemAvatar, ListItemSecondaryAction, ListItemText, MenuItem, Select, } from '@material-ui/core'; import AddUserComponent from './access-add-user'; import projectApi from '../../store/project/api'; function AccessComponent({ projectId, project }) { const [roles, setRoles] = useState([]); const [users, setUsers] = useState([]); const [error, setError] = useState(); 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 ( {'Error'} {error} {users.map(user => { const labelId = `checkbox-list-secondary-label-${user.id}`; return ( delete ); })} ); } AccessComponent.propTypes = { projectId: PropTypes.string.isRequired, project: PropTypes.object, }; export default AccessComponent;