diff --git a/packages/component-user/resolvers.js b/packages/component-user/resolvers.js index 71f393a2b17322e97a3b1691861680d646209e03..429336658f7c3ca2f646f66a83d12c35f6ec3d3e 100644 --- a/packages/component-user/resolvers.js +++ b/packages/component-user/resolvers.js @@ -31,6 +31,15 @@ const resolvers = { ctx, ) + return user + } catch (e) { + return e + } + }, + async activateUserAsAdmin(_, { id, input }, ctx) { + try { + const user = await ctx.connectors.User.update(id, input, ctx) + return user } catch (e) { return e diff --git a/packages/component-user/typeDefs.js b/packages/component-user/typeDefs.js index b20d4d078c841c25a5e653d78de62ab1d9278ff5..805d717734f16f8157086cf7f620792a938dc66d 100644 --- a/packages/component-user/typeDefs.js +++ b/packages/component-user/typeDefs.js @@ -18,12 +18,18 @@ module.exports = ` country: String affiliation: String role: AllowedRole + } + + input ActivateUserInput { + email: String! + username: String! isActive: Boolean } extend type Mutation { addUserAsAdmin(id:ID!, input: UserInput!): User editUserAsAdmin(id: ID!, input: UserInput!): User + activateUserAsAdmin(id: ID!, input: ActivateUserInput): User } enum AllowedRole { diff --git a/packages/component-user/user.js b/packages/component-user/user.js index 07a5b06574b8087c9cddba1232bd328b94a52406..39eea7df484118cb31e9f308be00cef2d8be4b63 100644 --- a/packages/component-user/user.js +++ b/packages/component-user/user.js @@ -10,14 +10,13 @@ module.exports = { editorInChief: false, handlingEditor: false, } - if (input.role !== 'author') { + if (input.role && input.role !== 'author') { roles[input.role] = true } return { ...omit(input, ['role']), ...roles, - isActive: true, isConfirmed: false, notifications: { email: { diff --git a/packages/components-faraday/src/components/Admin/AdminUsers.js b/packages/components-faraday/src/components/Admin/AdminUsers.js index f9a9252926148fce8cb3672d38dfcf69b24574a3..1dfe97fac2b10463d037ef5b742f0edbdf279721 100644 --- a/packages/components-faraday/src/components/Admin/AdminUsers.js +++ b/packages/components-faraday/src/components/Admin/AdminUsers.js @@ -39,6 +39,7 @@ const Users = ({ // addUser, updateUser, + toggleUserActiveStatus, ...rest }) => ( <Fragment> @@ -109,7 +110,7 @@ const Users = ({ <OpenModal isFetching={isFetching} modalKey={`deactivate-${user.id}`} - onConfirm={deactivateUser(user)} + onConfirm={toggleUserActiveStatus(user)} subtitle={`${user.firstName} ${user.lastName}`} title={`Are you sure to ${ !user.isActive ? 'activate' : 'deactivate' diff --git a/packages/components-faraday/src/components/Admin/withUsersGQL.js b/packages/components-faraday/src/components/Admin/withUsersGQL.js index d15b4ad5c72c9166e30d8816d433c0a0043e7de7..4ca7aeaf895e63cb3d9840751992106df899d8c1 100644 --- a/packages/components-faraday/src/components/Admin/withUsersGQL.js +++ b/packages/components-faraday/src/components/Admin/withUsersGQL.js @@ -5,16 +5,17 @@ import { compose, withHandlers, withProps } from 'recompose' const userFragment = gql` fragment userDetails on User { id - handlingEditor - editorInChief admin email title country username lastName + isActive firstName affiliation + editorInChief + handlingEditor } ` @@ -45,6 +46,15 @@ const editUserAsAdmin = gql` ${userFragment} ` +const activateUserAsAdmin = gql` + mutation activateUserAsAdmin($id: ID!, $input: ActivateUserInput) { + activateUserAsAdmin(id: $id, input: $input) { + ...userDetails + } + } + ${userFragment} +` + export default compose( graphql(getUsersQuery), graphql(addUserAsAdmin, { @@ -56,6 +66,9 @@ export default compose( graphql(editUserAsAdmin, { name: 'updateUser', }), + graphql(activateUserAsAdmin, { + name: 'activateUser', + }), withHandlers({ addUser: ({ addUser }) => ( { __typename, id, admin, ...input }, @@ -95,6 +108,27 @@ export default compose( setError(e.message) }) }, + toggleUserActiveStatus: ({ activateUser }) => ({ + __typename, + admin, + handlingEditor, + editorInChief, + id, + email, + username, + isActive, + }) => ({ hideModal }) => { + activateUser({ + variables: { + id, + input: { + email, + username, + isActive, + }, + }, + }).then(hideModal) + }, }), withProps(({ data }) => ({ users: data.users, diff --git a/packages/xpub-faraday/config/validations.js b/packages/xpub-faraday/config/validations.js index 562ea5242cef0bcd0c3268496b72e70be656cf4a..d8e9c5bbdea33f58fb9c6d845740170a45cad97e 100644 --- a/packages/xpub-faraday/config/validations.js +++ b/packages/xpub-faraday/config/validations.js @@ -146,17 +146,17 @@ module.exports = { orcid: Joi.object(), name: Joi.string(), username: Joi.string(), - isConfirmed: Joi.boolean(), + title: Joi.string().allow(''), + agreeTC: Joi.boolean(), + isActive: Joi.boolean(), firstName: Joi.string().allow(''), lastName: Joi.string().allow(''), affiliation: Joi.string().allow(''), + isConfirmed: Joi.boolean(), + editorInChief: Joi.boolean(), country: Joi.string().allow(''), - title: Joi.string().allow(''), teams: Joi.array(), - editorInChief: Joi.boolean(), handlingEditor: Joi.boolean(), - agreeTC: Joi.boolean(), - isActive: Joi.boolean(), passwordHash: Joi.string(), notifications: Joi.object({ email: Joi.object({