Skip to content
Snippets Groups Projects
Commit 11891701 authored by Audrey Hamelers's avatar Audrey Hamelers
Browse files

Merge branch 'shared-data-model' into 'dev'

Shared data model

See merge request xpub/xpub-epmc!40
parents 6fbef110 59d82012
No related branches found
No related tags found
2 merge requests!60Dev,!40Shared data model
Showing
with 178 additions and 17 deletions
/* import React from 'react'
import { Query } from 'react-apollo'
import { H1, H2, Button, Icon } from '@pubsweet/ui'
// import { th } from '@pubsweet/ui-toolkit'
// import styled from 'styled-components'
import { B, Page, Table, Loading, LoadingIcon } from '../ui'
import { QUERY_ACTIVITY_INFO } from './operations'
import SubmissionHeader from '../SubmissionHeader'
class ActivityPage extends React.Component {
constructor(props) {
super(props)
}
render() {
return (
<Page>
<H1>Manuscript activity</H1>
<H2>Quick view</H2>
<hr/>
<div>
<ul>
<li>Submitter:</li>
<li>Reviewer:</li>
<li>Claimed by:</li>
<li>Time in process:</li>
<li>Last activity:</li>
<li>Journal:</li>
</ul>
</div>
<Table>
<tbody>
<tr>
<th>Submitted</th>
<th>Initial author review</th>
<th>Submission QA</th>
<th>XML tagging</th>
<th>XML QA</th>
<th>Final author review</th>
<th>Citation</th>
<th>Published</th>
</tr>
<tr key="manuscript">
<td><Icon color="currentColor" size={3}>check</Icon></td>
<td><Icon color="currentColor" size={3}>check</Icon></td>
<td><Icon color="currentColor" size={3}>check</Icon></td>
<td><Icon color="currentColor" size={3}>check</Icon></td>
<td><Icon color="currentColor" size={3}>check</Icon></td>
<td><Icon color="currentColor" size={3}>check</Icon></td>
<td><Icon color="currentColor" size={3}>check</Icon></td>
<td><Icon color="currentColor" size={3}>check</Icon></td>
</tr>
</tbody>
</Table>
<H2>Details</H2>
<Button primary>New message</Button>
<Table>
<tbody>
<tr>
<th>Date</th>
<th>Person</th>
<th>Event</th>
</tr>
<tr key="manuscript">
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</Table>
</Page>
)
}
}
const ActivityPageWithHeader = SubmissionHeader(ActivityPage)
const ActivityPageContainer = ({ match, ...props }) => {
console.log(match, props, QUERY_ACTIVITY_INFO)
return
<Query query={QUERY_ACTIVITY_INFO} variables={{ id: match.params.id }}>
{({ data, loading }) => {
if (loading || !data || !data.activities) {
return (
<Loading>
<LoadingIcon />
</Loading>
)
}
return (
<ActivityPageWithHeader
activities={data.activities}
match={match}
{...props}
/>
)
}}
</Query>
}
export default ActivityPageContainer */
export { default as ActivityPage } from './ActivityPage'
import gql from 'graphql-tag'
export const QUERY_ACTIVITY_INFO = gql`
query QueryActivitiesByManuscriptId($id: ID!) {
activities: epmc_queryActivitiesByManuscriptId(id: $id) {
id
audits {
id
created
updated
user {
id
title
givenNames
surname
identities {
email
}
}
action
originalData
changes
objectType
objectId
manuscriptId
}
journal {
id
journalTitle
}
}
}
`
......@@ -67,7 +67,10 @@ class PubMedSearch extends React.Component {
}
handleUnmatched(unm) {
if (unm.journal && unm.journal.meta.pmcStatus) {
this.setState({ pubProvided: unm.journal.journalTitle })
this.setState({
pubProvided: unm.journal.journalTitle,
unmatched: false,
})
} else {
const citationData = unm
if (unm.journal) {
......
......@@ -263,7 +263,7 @@ const adminState = {
const claimStates = ['submitted', 'xml-qa', 'xml-triage']
const States = {
export const States = {
submitter: submitterState,
reviewer: reviewerState,
admin: adminState,
......
......@@ -4,7 +4,7 @@ import styled from 'styled-components'
import { th } from '@pubsweet/ui-toolkit'
import { Notification, SearchForm } from '../ui'
import { GET_MANUSCRIPT } from './operations'
import { ManuscriptURL } from './DashboardList'
import { States } from './DashboardList'
const SearchArea = styled.div`
display: flex;
......@@ -72,7 +72,7 @@ class SearchBoxes extends React.Component {
} else if (manuscript) {
this.props.history.push(
`submission/${manuscript.id}/${
ManuscriptURL[manuscript.status]
States.admin[manuscript.status].url
}`,
)
}
......
......@@ -21,14 +21,14 @@ const QueryLabel = styled(H2)`
const Dashboard = ({ currentUser, history }) => {
const { search } = history.location
const key = search ? search.split('?')[1].split('=')[0] : ''
const param = search ? search.split('?')[1].split('=')[0] : ''
const query = search ? search.split('=')[1] : ''
return (
<Query
fetchPolicy="cache-and-network"
query={
key === 'status'
param === 'status'
? MANUSCRIPTS_BY_STATUS
: MANUSCRIPTS_BY_EMAIL_OR_LASTNAME
}
......@@ -44,7 +44,7 @@ const Dashboard = ({ currentUser, history }) => {
}
const manuscripts =
key === 'status'
param === 'status'
? data.findByStatus
: data.searchManuscripts.manuscripts
......
......@@ -178,7 +178,7 @@ class Created extends React.Component {
const currentUser = this.context
const { currentStep, status, error, checked } = this.state
const { manuscript } = this.props
const { id: mId, meta, journal, files: allfiles } = manuscript
const { id: mId, meta, journal, files: allfiles, teams } = manuscript
const { notes, fundingGroup: grants } = meta
const files = allfiles
? allfiles.filter(
......@@ -195,6 +195,8 @@ class Created extends React.Component {
return n
})
: []
const submitter =
teams && teams.find(team => team.role === 'submitter').teamMembers[0]
return (
<SplitPage>
<StepPanel>
......@@ -266,6 +268,7 @@ class Created extends React.Component {
? notes.find(n => n.notesType === 'selectedReviewer')
: null
}
submitter={submitter}
/>
)}
<Buttons>
......
......@@ -48,14 +48,21 @@ class SelectReviewer extends React.Component {
emailErr: '',
}
componentDidMount() {
const { funding, currentUser, selectedReviewer: note } = this.props
const {
funding,
submitter,
currentUser,
selectedReviewer: note,
} = this.props
const selectedReviewer = note ? JSON.parse(note.content) : null
const { name: username } = currentUser.identities[0]
const { name: username } = submitter.alias
if (funding && funding.length > 0) {
let options = [
{
value: 'self',
label: `Me (${username.title ? `${username.title} ` : ''}${
label: `${
submitter.user.id === currentUser.id ? 'Me' : 'Manuscript Submitter'
} (${username.title ? `${username.title} ` : ''}${
username.givenNames
} ${username.surname})`,
},
......
......@@ -6,6 +6,7 @@ import { th } from '@pubsweet/ui-toolkit'
import { Button, CheckboxGroup, H2, H3, Icon } from '@pubsweet/ui'
import {
A,
B,
Buttons,
Cover,
Right,
......@@ -320,9 +321,13 @@ class SubmitForm extends React.Component {
} else if (currentUser.admin) {
return (
<Section>
<H3>Attention Helpdesk</H3>
<Header>
<H3>Attention Helpdesk</H3>
</Header>
<Content>
<b>This manuscript has not yet been submitted</b>
<p>
<B>This manuscript has not yet been submitted!</B>
</p>
</Content>
</Section>
)
......
......@@ -288,6 +288,7 @@ class Submit extends React.Component {
selectedReviewer={
notes ? notes.find(n => n.notesType === 'selectedReviewer') : null
}
submitter={submitter}
/>
),
error: !reviewer && (
......
......@@ -17,6 +17,7 @@ import CreateSetupPage from './components/submission-wizard/CreateSetupPage'
import SubmitPage from './components/submission-wizard/SubmitPage'
import XMLReviewPage from './components/XMLReviewPage'
import UserGuidePage from './components/user-guide/UserGuidePage'
import { ActivityPage } from './components/activity'
import App from './components/App'
const LoginPage = withProps({ passwordReset: true })(Login)
......@@ -64,6 +65,11 @@ const Routes = () => (
exact
path="/submission/:id/review"
/>
<PrivateRoute
component={ActivityPage}
exact
path="/submission/:id/activity"
/>
<Route component={Signup} exact path="/signup" />
<Route component={LoginPage} exact path="/login" />
<Route component={UserGuidePage} path="/user-guide" />
......
......@@ -125,11 +125,11 @@ class Manuscript extends EpmcBaseModel {
static get relationMappings() {
const File = require('../file/data-access')
const Note = require('../note/data-access')
const Audit = require('../audit/data-access')
const Journal = require('../journal/data-access')
const Review = require('../review/data-access')
const Team = require('../team/data-access')
const User = require('../user/data-access')
const Audit = require('../audit/data-access')
return {
reviews: {
relation: Model.HasManyRelation,
......@@ -253,13 +253,13 @@ class Manuscript extends EpmcBaseModel {
return manuscripts[0]
} */
static async selectByStatus(status, eager = false) {
static async selectByStatus(statuses, eager = false) {
if (eager) {
const manuscripts = await Manuscript.query()
.distinct('manuscript.id')
.select('manuscript.*')
.eager('[teams.users, claiming, journal]')
.whereIn('status', status)
.whereIn('status', statuses)
.whereNull('manuscript.deleted')
.orderBy('manuscript.updated', 'desc')
logger.debug('manuscripts: ', manuscripts)
......@@ -267,7 +267,7 @@ class Manuscript extends EpmcBaseModel {
}
const count = await knex('manuscript')
.count('*')
.where('status', '=', status)
.where('status', '=', statuses)
.whereNull('deleted')
return parseInt(count[0].count, 10)
}
......
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