Skip to content
Snippets Groups Projects
Commit 1655f6d5 authored by Alf Eaton's avatar Alf Eaton
Browse files

import { actions } from 'pubsweet-client'

parent b317ddfb
No related branches found
No related tags found
No related merge requests found
import { compose } from 'recompose'
import { connect } from 'react-redux'
import actions from 'pubsweet-client/src/actions'
import { actions } from 'pubsweet-client'
import { ConnectPage } from 'xpub-connect'
import { selectFragment } from 'xpub-selectors'
......
import { push } from 'react-router-redux'
import actions from 'pubsweet-client/src/actions'
import { actions } from 'pubsweet-client'
import { ink as convertToHTML } from 'pubsweet-component-ink-frontend/actions'
import uploadFile from 'xpub-upload'
import { generateTitle, extractTitle } from '../lib/title'
......@@ -54,10 +54,7 @@ export const uploadManuscript = acceptedFiles => dispatch => {
const source = response.converted
const title = extractTitle(source) || generateTitle(inputFile.name)
return dispatch(actions.createCollection({
collectionType: 'project',
title
})).then(({collection}) => {
return dispatch(actions.createCollection({ title })).then(({collection}) => {
if (!collection.id) {
throw new Error('Failed to create a project')
}
......
import actions from 'pubsweet-client/src/actions'
import { actions } from 'pubsweet-client'
export const addUserToTeam = ({ team, teamTypeName, name, group, project, user }) => dispatch => {
if (team) {
......
import { compose } from 'recompose'
import { find } from 'lodash'
import { compose, withHandlers } from 'recompose'
import { connect } from 'react-redux'
import actions from 'pubsweet-client/src/actions'
import { actions } from 'pubsweet-client'
import { ConnectPage } from 'xpub-connect'
import { selectCurrentUser, selectCollection, selectFragment } from 'xpub-selectors'
import { selectCurrentUser, selectCollection, selectFragment, selectVersion } from 'xpub-selectors'
import Manuscript from './Manuscript'
export default compose(
ConnectPage(({ params }) => [
actions.getCollection({ id: params.project }),
actions.getFragment({ id: params.project }, { id: params.version })
actions.getCollection({ id: params.journal }),
actions.getFragment({ id: params.project }),
]),
connect(
(state, ownProps) => ({
currentUser: selectCurrentUser(state),
project: selectCollection(state, ownProps.params.project),
version: selectFragment(state, ownProps.params.version)
}),
(state, { params }) => {
const currentUser = selectCurrentUser(state)
const journal = selectCollection(state, params.journal)
const project = selectFragment(state, params.project)
const version = selectVersion(project, params.version)
const content = version.manuscript.source // TODO: load from a file
return { currentUser, journal, project, version, content }
},
{
fileUpload: actions.fileUpload,
updateVersion: actions.updateFragment
}
)
),
withHandlers({
updateManuscript: ({ project, version, journal }) => data => {
version.manuscript = {
...version.manuscript,
...data
}
return actions.updateFragment(journal, {
id: project.id,
versions: project.versions
})
}
})
)(Manuscript)
......@@ -3,7 +3,7 @@ import { compose, withProps } from 'recompose'
import { connect } from 'react-redux'
import { push } from 'react-router-redux'
import { reduxForm, SubmissionError } from 'redux-form'
import actions from 'pubsweet-client/src/actions'
import { actions } from 'pubsweet-client'
import { ConnectPage } from 'xpub-connect'
import { selectCollection, selectFragment } from 'xpub-selectors'
import uploadFile from 'xpub-upload'
......
......@@ -3,11 +3,12 @@ import { compose, withProps } from 'recompose'
import { connect } from 'react-redux'
import { push } from 'react-router-redux'
import { reduxForm, SubmissionError } from 'redux-form'
import actions from 'pubsweet-client/src/actions'
import { actions } from 'pubsweet-client'
import { ConnectPage } from 'xpub-connect'
import { selectCollection } from 'xpub-selectors'
import uploadFile from 'xpub-upload'
import ReviewLayout from './review/ReviewLayout'
import { selectFragment } from '../../../xpub-selectors/src'
const onSubmit = (values, dispatch, props) => {
console.log('submit', values)
......@@ -48,15 +49,12 @@ export default compose(
connect(
(state, ownProps) => {
const project = selectCollection(state, ownProps.params.project)
const fragments = project.fragments.map(id => state.fragments[id])
const versions = project.fragments.map(id => state.fragments[id])
return {
project,
versions: filter(fragments, { fragmentType: 'version' }),
reviews: filter(fragments, { fragmentType: 'review' }),
versions,
// version: selectFragment(state, ownProps.params.version),
// review: selectFragment(state, ownProps.params.review)
}
},
{
......
import { filter, find } from 'lodash'
import { find } from 'lodash'
import { compose, withProps } from 'recompose'
import { connect } from 'react-redux'
import actions from 'pubsweet-client/src/actions'
import { actions } from 'pubsweet-client'
import { ConnectPage } from 'xpub-connect'
import { selectCollection, selectFragment } from 'xpub-selectors'
import Reviewers from './reviewers/Reviewers'
import ReviewerFormContainer from './reviewers/ReviewerFormContainer'
import ReviewerContainer from './reviewers/ReviewerContainer'
import ReviewContainer from './reviewers/ReviewContainer'
export default compose(
ConnectPage(({ params }) => [
......@@ -21,30 +21,32 @@ export default compose(
const project = selectCollection(state, ownProps.params.project)
const version = selectFragment(state, ownProps.params.version)
const fragments = project.fragments.map(id => state.fragments[id])
const versions = filter(fragments, { fragmentType: 'version' })
const projectReviewers = filter(fragments, { fragmentType: 'projectReviewer' })
const reviewers = filter(fragments, { fragmentType: 'reviewer' })
const versions = project.fragments.map(id => state.fragments[id])
const reviewerUsers = state.users.users
// const reviewerUsers = filter(state.users.users, { reviewer: true })
// populate the reviewer user
reviewers.forEach(reviewer => {
const projectReviewer = find(projectReviewers, { id: reviewer.projectReviewer })
versions.forEach(version => {
version.reviews.forEach(review => {
const reviewer = find(project.reviewers, {
id: review.reviewer
})
if (reviewer) {
reviewer._user = find(reviewerUsers, {
id: reviewer.user
})
if (projectReviewer) {
reviewer._user = find(reviewerUsers, { id: projectReviewer.user })
}
review._reviewer = reviewer
}
})
})
return {
project,
version,
versions,
projectReviewers,
reviewers,
reviewerUsers,
// teams: state.teams,
}
......@@ -52,6 +54,6 @@ export default compose(
),
withProps({
ReviewerForm: ReviewerFormContainer,
Reviewer: ReviewerContainer
Review: ReviewContainer
})
)(Reviewers)
......@@ -2,50 +2,56 @@ import { find, some } from 'lodash'
import { compose, withHandlers } from 'recompose'
import { reduxForm, SubmissionError } from 'redux-form'
import { connect } from 'react-redux'
import actions from 'pubsweet-client/src/actions'
import { actions } from 'pubsweet-client'
import ReviewerForm from './ReviewerForm'
const getProjectReviewer = (props, user) => {
const projectReviewer = find(props.projectReviewers, { user: user.id })
const getReviewer = (props, user) => {
const reviewer = find(props.project.reviewers, { user: user.id })
return projectReviewer ? Promise.resolve(projectReviewer) : addProjectReviewer(props, user)
return reviewer ? Promise.resolve(reviewer) : addReviewer(props, user)
}
const addProjectReviewer = (props, user) => {
return props.createFragment(props.project, {
fragmentType: 'projectReviewer',
user: user.id,
}).then(result => result.fragment)
const addReviewer = (props, user) => {
const reviewer = {
user: user.id
}
return props.updateProject(props.project, {
reviewers: [].concat(props.project.reviewers, reviewer)
}).then(() => reviewer)
}
const addReviewer = (props, projectReviewer) => {
return props.createFragment(props.project, {
fragmentType: 'reviewer',
parentVersion: props.version.id,
projectReviewer: projectReviewer.id,
const addInvitation = (props, reviewer) => {
const invitation = {
reviewer: reviewer.id,
status: 'invited',
events: {
invited: new Date()
}
})
}
return props.updateVersion(props.project, {
id: props.version.id,
invitations: [].concat(props.version.invitations, invitation)
}).then(() => invitation)
}
const handleSubmit = props => reset => values => {
// TODO: create a user account if values.user.id is null
return getProjectReviewer(props, values.user).then(projectReviewer => {
if (some(props.reviewers, { projectReviewer: projectReviewer.id })) {
return getReviewer(props, values.user).then(reviewer => {
if (some(props.version.invitations, { reviewer: reviewer.id })) {
throw new SubmissionError('This reviewer has already been added')
}
return addReviewer(props, projectReviewer)
return addInvitation(props, reviewer)
}).then(() => reset())
}
const loadOptions = props => input => {
const options = props.reviewerUsers
// TODO: put existing, uninvited projectReviewers at the top
// TODO: put existing, uninvited project reviewers at the top
// TODO: filter users based on input
......@@ -54,7 +60,8 @@ const loadOptions = props => input => {
export default compose(
connect(null, {
createFragment: actions.createFragment,
updateProject: actions.updateCollection,
updateVersion: actions.updateFragment,
}),
withHandlers({
loadOptions: props => loadOptions(props),
......
import { pick } from 'lodash'
import { find, pick } from 'lodash'
import { compose, withProps, withState, withHandlers } from 'recompose'
import { connect } from 'react-redux'
import { push } from 'react-router-redux'
import { reduxForm, SubmissionError } from 'redux-form'
import actions from 'pubsweet-client/src/actions'
import { actions } from 'pubsweet-client'
import uploadFile from 'xpub-upload'
import { ConnectPage } from 'xpub-connect'
import { selectCollection, selectFragment } from 'xpub-selectors'
import { selectCollection, selectFragment, selectVersion } from 'xpub-selectors'
import Submit from './Submit'
const onSubmit = (values, dispatch, props) => {
const onSubmit = (values, dispatch, { journal, project, version }) => {
console.log('submit', values)
return dispatch(actions.updateFragment(props.project, {
id: props.version.id,
submitted: new Date(),
...values
Object.assign(version, values, {
submitted: new Date()
})
return dispatch(actions.updateFragment(journal, {
id: project.id,
versions: project.versions
})).then(() => {
return dispatch(actions.updateCollection({
id: props.project.id,
status: 'submitted'
}))
}).then(() => {
dispatch(push(`/`))
dispatch(push('/'))
}).catch(error => {
if (error.validationErrors) {
throw new SubmissionError()
......@@ -31,13 +29,16 @@ const onSubmit = (values, dispatch, props) => {
}
// TODO: redux-form doesn't have an onBlur handler(?)
const onBlur = (values, dispatch, props) => {
console.log('change', values)
const onBlur = (values, dispatch, { journal, project, version }) => {
console.log('blur', values)
return dispatch(actions.updateFragment(props.project, {
id: props.version.id,
// submitted: false,
...values
Object.assign(version, values, {
submitted: new Date()
})
return dispatch(actions.updateFragment(journal, {
id: project.id,
versions: project.versions
}))
// TODO: display a notification when saving/saving completes/saving fails
......@@ -45,14 +46,17 @@ const onBlur = (values, dispatch, props) => {
export default compose(
ConnectPage(({ params }) => [
actions.getCollection({ id: params.project }),
actions.getFragment({ id: params.project }, { id: params.version })
actions.getCollection({ id: params.journal }),
actions.getFragment({ id: params.project })
]),
connect(
(state, ownProps) => ({
project: selectCollection(state, ownProps.params.project),
version: selectFragment(state, ownProps.params.version)
}),
(state, { params }) => {
const journal = selectCollection(state, params.journal)
const project = selectFragment(state, params.project)
const version = selectVersion(project, params.version)
return { journal, project, version }
},
{
uploadFile
}
......
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