From b1600adec47a04f60e1da07d94a3ed3906ff5aee Mon Sep 17 00:00:00 2001 From: Wes Bos Date: Thu, 14 Jun 2018 16:44:21 -0400 Subject: starter files --- .../frontend/components/Permissions.js | 133 +++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 finished-application/frontend/components/Permissions.js (limited to 'finished-application/frontend/components/Permissions.js') diff --git a/finished-application/frontend/components/Permissions.js b/finished-application/frontend/components/Permissions.js new file mode 100644 index 0000000..52a6acf --- /dev/null +++ b/finished-application/frontend/components/Permissions.js @@ -0,0 +1,133 @@ +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

+ + + + + + {possiblePermissions.map(p => )} + + + + {data.users.map(user => )} +
NameEmail{p}👇🏻
+
+ ); + }} +
+); + +export default Permissions; +export { ALL_USERS_QUERY, UPDATE_PERMISSIONS_MUTATION }; -- cgit v1.3