Skip to content
Snippets Groups Projects
Commit a8e28726 authored by Alexandru Munteanu's avatar Alexandru Munteanu
Browse files

feat(adminUsers): create gql hoc

parent 85c38682
No related branches found
No related tags found
3 merge requests!222Sprint #26,!217Sprint #26,!192Hin 1085 user component graphql
...@@ -8,7 +8,6 @@ import { H2, Button, TextField, ValidatedFieldFormik } from '@pubsweet/ui' ...@@ -8,7 +8,6 @@ import { H2, Button, TextField, ValidatedFieldFormik } from '@pubsweet/ui'
import { compose, setDisplayName, withHandlers, withProps } from 'recompose' import { compose, setDisplayName, withHandlers, withProps } from 'recompose'
import { import {
Row, Row,
Text,
Item, Item,
Label, Label,
IconButton, IconButton,
...@@ -19,163 +18,7 @@ import { ...@@ -19,163 +18,7 @@ import {
} from 'pubsweet-component-faraday-ui' } from 'pubsweet-component-faraday-ui'
import ValidatedMenuField from './ValidatedMenuField' import ValidatedMenuField from './ValidatedMenuField'
import ValidatedCheckboxField from './ValidatedCheckboxField'
// #region Unused stuff
// const AddUserForm = ({ roles, countries, titles }) => (
// <Fragment>
// <Row alignItems="baseline" mb={1} mt={1}>
// <Item mr={1} vertical>
// <Label required>Email</Label>
// <ValidatedField
// component={TextField}
// name="email"
// validate={[required]}
// />
// </Item>
// <ItemOverrideAlert ml={1} vertical>
// <Label required>Role</Label>
// <ValidatedField
// component={input => (
// <Menu options={roles} {...input} placeholder="Please select" />
// )}
// name="role"
// validate={[required]}
// />
// </ItemOverrideAlert>
// </Row>
// <Row mb={2}>
// <Item mr={1} vertical>
// <Label>First Name</Label>
// <ValidatedField component={TextField} name="firstName" />
// </Item>
// <Item ml={1} vertical>
// <Label>Last Name</Label>
// <ValidatedField component={TextField} name="lastName" />
// </Item>
// </Row>
// <RowOverrideAlert alignItems="center" mb={2}>
// <ItemOverrideAlert mr={1} vertical>
// <Label>Title</Label>
// <ValidatedField
// component={input => (
// <Menu options={titles} {...input} placeholder="Please select" />
// )}
// name="title"
// />
// </ItemOverrideAlert>
// <ItemOverrideAlert ml={1} vertical>
// <Label>Country</Label>
// <ValidatedField
// component={input => (
// <Menu options={countries} {...input} placeholder="Please select" />
// )}
// name="country"
// />
// </ItemOverrideAlert>
// </RowOverrideAlert>
// <Row mb={3}>
// <Item vertical>
// <Label>Affiliation</Label>
// <ValidatedField component={TextField} name="affiliation" />
// </Item>
// </Row>
// </Fragment>
// )
// const EditForm = ({ titles, countries }) => (
// <Fragment>
// <Row alignItems="center" mb={2} mt={1}>
// <Item mr={1} vertical>
// <Label>First Name</Label>
// <ValidatedField component={TextField} name="firstName" />
// </Item>
// <Item ml={1} vertical>
// <Label>Last Name</Label>
// <ValidatedField component={TextField} name="lastName" />
// </Item>
// </Row>
// <RowOverrideAlert alignItems="center" mb={2}>
// <ItemOverrideAlert mr={1} vertical>
// <Label>Title</Label>
// <ValidatedField
// component={input => (
// <Menu options={titles} {...input} placeholder="Please select" />
// )}
// name="title"
// />
// </ItemOverrideAlert>
// <ItemOverrideAlert ml={1} vertical>
// <Label>Country</Label>
// <ValidatedField
// component={input => (
// <Menu options={countries} {...input} placeholder="Please select" />
// )}
// name="country"
// />
// </ItemOverrideAlert>
// </RowOverrideAlert>
// <Row mb={2}>
// <Item vertical>
// <Label>Affiliation</Label>
// <ValidatedField component={TextField} name="affiliation" />
// </Item>
// </Row>
// <Row>
// <Item>
// <Label>Roles</Label>
// </Item>
// </Row>
// <RowOverrideAlert mb={3} mt={1}>
// <Item>
// <ValidatedField
// component={({ value, onChange }) => (
// <Checkbox
// checked={value}
// label="Editor in Chief"
// onChange={onChange}
// value={value}
// />
// )}
// name="editorInChief"
// />
// </Item>
// <Item>
// <ValidatedField
// component={({ value, onChange }) => (
// <Checkbox
// checked={value}
// label="Admin"
// onChange={onChange}
// value={value}
// />
// )}
// name="admin"
// />
// </Item>
// <Item>
// <ValidatedField
// component={({ value, onChange }) => (
// <Checkbox
// checked={value}
// label="Handling Editor"
// onChange={onChange}
// value={value}
// />
// )}
// name="handlingEditor"
// />
// </Item>
// </RowOverrideAlert>
// </Fragment>
// )
// #endregion
const FormModal = ({ const FormModal = ({
edit, edit,
...@@ -196,13 +39,7 @@ const FormModal = ({ ...@@ -196,13 +39,7 @@ const FormModal = ({
<Root> <Root>
<IconButton icon="x" onClick={onClose} right={5} secondary top={5} /> <IconButton icon="x" onClick={onClose} right={5} secondary top={5} />
<H2>{title}</H2> <H2>{title}</H2>
<Formik <Formik initialValues={initialValues} onSubmit={onSubmit}>
// onSubmit={values => {
// addUser({ variables: { user: parseUser(values) } })
// }}
initialValues={initialValues}
onSubmit={onSubmit}
>
{({ handleSubmit }) => ( {({ handleSubmit }) => (
<Fragment> <Fragment>
<Row alignItems="baseline" mb={1} mt={1}> <Row alignItems="baseline" mb={1} mt={1}>
...@@ -242,13 +79,33 @@ const FormModal = ({ ...@@ -242,13 +79,33 @@ const FormModal = ({
</ItemOverrideAlert> </ItemOverrideAlert>
</RowOverrideAlert> </RowOverrideAlert>
<Row mb={3}> <Row mb={!edit && 3}>
<Item vertical> <Item vertical>
<Label>Affiliation</Label> <Label>Affiliation</Label>
<ValidatedFieldFormik component={TextField} name="affiliation" /> <ValidatedFieldFormik component={TextField} name="affiliation" />
</Item> </Item>
</Row> </Row>
{edit && (
<RowOverrideAlert mb={3}>
<Item>
<ValidatedCheckboxField
label="Editor in Chief"
name="editorInChief"
/>
</Item>
<Item>
<ValidatedCheckboxField label="Admin" name="admin" />
</Item>
<Item>
<ValidatedCheckboxField
label="Handling Editor"
name="handlingEditor"
/>
</Item>
</RowOverrideAlert>
)}
<Row> <Row>
<Button onClick={onClose}>Cancel</Button> <Button onClick={onClose}>Cancel</Button>
<Button onClick={handleSubmit} primary> <Button onClick={handleSubmit} primary>
...@@ -296,7 +153,7 @@ export default compose( ...@@ -296,7 +153,7 @@ export default compose(
withHandlers({ withHandlers({
onSubmit: ({ onSubmit, ...props }) => (values, formProps) => { onSubmit: ({ onSubmit, ...props }) => (values, formProps) => {
if (typeof onSubmit === 'function') { if (typeof onSubmit === 'function') {
onSubmit({ values: parseValues(values), formProps, props }) onSubmit(parseValues(values), { formProps, props })
} }
}, },
onClose: ({ onCancel, ...props }) => () => { onClose: ({ onCancel, ...props }) => () => {
......
import React from 'react'
import { Field } from 'formik'
import { Checkbox } from '@pubsweet/ui'
const ValidatedCheckboxField = ({ name, label }) => (
<Field name={name}>
{({ field, form }) => (
<Checkbox
checked={field.value}
label={label}
onChange={() => {
form.setFieldValue(field.name, !field.value)
}}
/>
)}
</Field>
)
export default ValidatedCheckboxField
...@@ -7,8 +7,8 @@ const ValidatedMenuField = ({ options, name }) => ( ...@@ -7,8 +7,8 @@ const ValidatedMenuField = ({ options, name }) => (
{({ field, form }) => ( {({ field, form }) => (
<Menu <Menu
onChange={v => { onChange={v => {
field.onChange(v) // field.onChange(v)
form.setFieldValue(name, v) form.setFieldValue(field.name, v)
}} }}
options={options} options={options}
value={field.value} value={field.value}
......
...@@ -17,6 +17,8 @@ module.exports = ` ...@@ -17,6 +17,8 @@ module.exports = `
} }
extend input UserInput { extend input UserInput {
isActive: Boolean
isConfirmed: Boolean
firstName: String firstName: String
lastName: String lastName: String
title: String title: String
......
...@@ -39,6 +39,7 @@ const Users = ({ ...@@ -39,6 +39,7 @@ const Users = ({
toggleUserStatus, toggleUserStatus,
// //
addUser, addUser,
updateUser,
...rest ...rest
}) => ( }) => (
<Fragment> <Fragment>
...@@ -52,10 +53,7 @@ const Users = ({ ...@@ -52,10 +53,7 @@ const Users = ({
> >
Admin Dashboard Admin Dashboard
</ActionLink> </ActionLink>
<OpenUserForm <OpenUserForm modalKey="addUser" onSubmit={addUser} />
modalKey="addUser"
onSubmit={v => console.log('GQL add mutation here:', v)} // eslint-disable-line
/>
</Item> </Item>
<Pagination {...rest} itemsPerPage={itemsPerPage} page={page} /> <Pagination {...rest} itemsPerPage={itemsPerPage} page={page} />
...@@ -106,7 +104,7 @@ const Users = ({ ...@@ -106,7 +104,7 @@ const Users = ({
<OpenUserForm <OpenUserForm
edit edit
modalKey={`edit-${user.id}`} modalKey={`edit-${user.id}`}
onSubmit={v => console.log('GQL edit mutation here:', v)} // eslint-disable-line onSubmit={updateUser}
user={user} user={user}
/> />
<OpenModal <OpenModal
...@@ -142,7 +140,7 @@ export default compose( ...@@ -142,7 +140,7 @@ export default compose(
withJournal, withJournal,
withFetching, withFetching,
withUsersGQL, withUsersGQL,
withProps(({ journal: { roles = {} }, data: { users } }) => ({ withProps(({ journal: { roles = {} }, users }) => ({
roles: Object.keys(roles), roles: Object.keys(roles),
items: users, items: users,
})), })),
......
import gql from 'graphql-tag' import gql from 'graphql-tag'
import { compose } from 'recompose'
import { graphql } from 'react-apollo' import { graphql } from 'react-apollo'
import { compose, withHandlers, withProps } from 'recompose'
const userFragment = gql` const userFragment = gql`
fragment userDetails on User { fragment userDetails on User {
...@@ -49,6 +49,27 @@ const updateUserMutation = gql` ...@@ -49,6 +49,27 @@ const updateUserMutation = gql`
export default compose( export default compose(
graphql(getUsersQuery), graphql(getUsersQuery),
graphql(addUserMutation, { name: 'addUser' }), graphql(addUserMutation, {
graphql(updateUserMutation, { name: 'updateUser' }), name: 'addUser',
}),
graphql(updateUserMutation, {
name: 'updateUser',
}),
withHandlers({
addUser: ({ addUser }) => (values, props) => {},
updateUser: ({ updateUser }) => (
{ __typename, id, ...input },
{ props: { hideModal } },
) => {
updateUser({
variables: {
id,
input,
},
}).then(hideModal)
},
}),
withProps(({ data }) => ({
users: data.users,
})),
) )
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment