diff options
| author | Wes Bos <wesbos@gmail.com> | 2018-08-15 14:47:25 -0400 |
|---|---|---|
| committer | Wes Bos <wesbos@gmail.com> | 2018-08-15 14:47:25 -0400 |
| commit | 124f227a8235e08bddf8376e0b3d01d33c4414f3 (patch) | |
| tree | 1ea23e539e42c35ca0b609e2615c043aa6fc4219 /stepped-solutions/36/frontend/components/Permissions.js | |
| parent | ee09df7dee16a7b44711159c60c54cc9365be35e (diff) | |
Permissions is doneeee
Diffstat (limited to 'stepped-solutions/36/frontend/components/Permissions.js')
| -rwxr-xr-x | stepped-solutions/36/frontend/components/Permissions.js | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/stepped-solutions/36/frontend/components/Permissions.js b/stepped-solutions/36/frontend/components/Permissions.js new file mode 100755 index 0000000..10b59ab --- /dev/null +++ b/stepped-solutions/36/frontend/components/Permissions.js @@ -0,0 +1,104 @@ +import { Query } from 'react-apollo'; +import Error from './ErrorMessage'; +import gql from 'graphql-tag'; +import Table from './styles/Table'; +import SickButton from './styles/SickButton'; +import PropTypes from 'prop-types'; + +const possiblePermissions = [ + 'ADMIN', + 'USER', + 'ITEMCREATE', + 'ITEMUPDATE', + 'ITEMDELETE', + 'PERMISSIONUPDATE', +]; + +const ALL_USERS_QUERY = gql` + query { + users { + id + name + email + permissions + } + } +`; + +const Permissions = props => ( + <Query query={ALL_USERS_QUERY}> + {({ data, loading, error }) => ( + <div> + <Error error={error} /> + <div> + <h2>Manage Permissions</h2> + <Table> + <thead> + <tr> + <th>Name</th> + <th>Email</th> + {possiblePermissions.map(permission => <th key={permission}>{permission}</th>)} + <th>👇🏻</th> + </tr> + </thead> + <tbody>{data.users.map(user => <UserPermissions user={user} key={user.id} />)}</tbody> + </Table> + </div> + </div> + )} + </Query> +); + +class UserPermissions extends React.Component { + static propTypes = { + user: PropTypes.shape({ + name: PropTypes.string, + email: PropTypes.string, + id: PropTypes.string, + permissions: PropTypes.array, + }).isRequired, + }; + state = { + permissions: this.props.user.permissions, + }; + handlePermissionChange = e => { + const checkbox = e.target; + // take a copy of the current permissions + let updatedPermissions = [...this.state.permissions]; + // figure out if we need to remove or add this permission + if (checkbox.checked) { + // add it in! + updatedPermissions.push(checkbox.value); + } else { + updatedPermissions = updatedPermissions.filter(permission => permission !== checkbox.value); + } + this.setState({ permissions: updatedPermissions }); + console.log(updatedPermissions); + }; + render() { + const user = this.props.user; + return ( + <tr> + <td>{user.name}</td> + <td>{user.email}</td> + {possiblePermissions.map(permission => ( + <td key={permission}> + <label htmlFor={`${user.id}-permission-${permission}`}> + <input + type="checkbox" + checked={this.state.permissions.includes(permission)} + value={permission} + onChange={this.handlePermissionChange} + /> + </label> + </td> + ))} + <td> + <SickButton>Update</SickButton> + </td> + </tr> + ); + } +} + +export default Permissions; |
