import React from 'react'; import { Query, Mutation } from 'react-apollo'; import PropTypes from 'prop-types'; import gql from 'graphql-tag'; import Error from './ErrorMessage'; import SickButton from './styles/SickButton'; import Table from './styles/Table'; const ALL_USERS_QUERY = gql` query { users { id name email permissions } } `; const UPDATE_PERMISSIONS_MUTATION = gql` mutation updatePermissions($permissions: [Permission], $userId: ID!) { updatePermissions(permissions: $permissions, userId: $userId) { id permissions name email } } `; const possiblePermissions = [ 'ADMIN', 'USER', 'ITEMCREATE', 'ITEMUPDATE', 'ITEMDELETE', 'PERMISSIONUPDATE', ]; class User extends React.Component { static propTypes = { user: PropTypes.shape({ permissions: PropTypes.array.isRequired, id: PropTypes.string.isRequired, }).isRequired, }; state = { permissions: this.props.user.permissions, }; handlePermissionsChange = e => { const checkbox = e.target; let updatedPermissions = [...this.state.permissions]; if (checkbox.checked) { // add it in updatedPermissions.push(checkbox.value); } else { updatedPermissions = updatedPermissions.filter(permission => permission !== checkbox.value); } this.setState({ permissions: updatedPermissions }); }; render() { const { user } = this.props; return ( {(updatePermissions, { loading, error }) => ( {user.name} {user.email} {possiblePermissions.map(permission => ( ))} { await updatePermissions({ variables: { permissions: this.state.permissions, userId: this.props.user.id, }, }); }} > Updat{loading ? 'ing' : 'e'} )} ); } } const Permissions = () => ( {({ data, error, loading }) => { if (loading) return Loading; if (error) return ; return ( Manage User Permissions Name Email {possiblePermissions.map(p => {p})} 👇🏻 {data.users.map(user => )} ); }} ); export default Permissions; export { ALL_USERS_QUERY, UPDATE_PERMISSIONS_MUTATION };