Skip to content
Snippets Groups Projects
Commit c42a611c authored by ahamelers's avatar ahamelers
Browse files

#239 complete, duplicate check can also be done from activity page

parent 07e51245
No related branches found
No related tags found
2 merge requests!90Dev,!87Shared data model
......@@ -180,7 +180,7 @@ class ResolveDuplicates extends React.Component {
))}
</p>
<Button
onClick={() => replace(current.id, duplicates[0].id)}
onClick={() => replace(duplicates[0].id, current.id)}
primary
>
Remove this &amp; transfer grants
......
......@@ -4,7 +4,8 @@ import styled, { withTheme } from 'styled-components'
import { Button, Icon, TextField } from '@pubsweet/ui'
import { states } from 'config'
import { Portal, Buttons, Close, CloseButton } from '../ui'
import { ManuscriptMutations } from '../SubmissionMutations'
import { ManuscriptMutations, NoteMutations } from '../SubmissionMutations'
import ResolveDuplicates from '../ResolveDuplicates'
import GrantSearch from '../GrantSearch'
import CitationEdit, { Exit } from './CitationEdit'
......@@ -40,110 +41,124 @@ class EmbargoEdit extends React.Component {
}
}
const MetaEdit = withTheme(({ theme, close, manuscript, toEdit, ...props }) => {
const { meta } = manuscript
const { fundingGroup: grants, releaseDelay } = meta
const fundingGroup = grants
? grants.map(g => {
const n = omit(g, '__typename')
n.pi = omit(g.pi, '__typename')
return n
})
: []
const qa = states.indexOf('submitted')
const xml = states.indexOf('xml-triage')
const done = states.indexOf('ncbi-ready')
const curr = states.indexOf(manuscript.status)
return (
<Portal style={{ backgroundColor: theme.colorBackground }} transparent>
<Close>
<CloseButton onClick={close} />
</Close>
<React.Fragment>
{(() => {
switch (toEdit) {
case 'grants':
return (
<React.Fragment>
<GrantSearch
changedGrants={props.updateGrants}
hideEmbargo
selectedGrants={fundingGroup}
const DuplicatesWithMutations = NoteMutations(ResolveDuplicates)
const MetaEdit = withTheme(
({ theme, close, manuscript, duplicates, toEdit, ...props }) => {
const { meta } = manuscript
const { fundingGroup: grants, releaseDelay, notes } = meta
const fundingGroup = grants
? grants.map(g => {
const n = omit(g, '__typename')
n.pi = omit(g.pi, '__typename')
return n
})
: []
const qa = states.indexOf('submitted')
const xml = states.indexOf('xml-triage')
const done = states.indexOf('ncbi-ready')
const curr = states.indexOf(manuscript.status)
if (toEdit === 'dupes' && duplicates) {
return (
<DuplicatesWithMutations
close={close}
duplicates={duplicates}
manuscript={manuscript}
note={notes ? notes.find(n => n.notesType === 'notDuplicates') : null}
/>
)
}
return (
<Portal style={{ backgroundColor: theme.colorBackground }} transparent>
<Close>
<CloseButton onClick={close} />
</Close>
<React.Fragment>
{(() => {
switch (toEdit) {
case 'grants':
return (
<React.Fragment>
<GrantSearch
changedGrants={props.updateGrants}
hideEmbargo
selectedGrants={fundingGroup}
/>
<Exit close={close} />
</React.Fragment>
)
case 'embargo':
return (
<EmbargoEdit
change={props.updateEmbargo}
close={close}
embargo={releaseDelay}
/>
<Exit close={close} />
</React.Fragment>
)
case 'embargo':
return (
<EmbargoEdit
change={props.updateEmbargo}
close={close}
embargo={releaseDelay}
/>
)
case 'citation':
return (
<CitationEdit
change={props.changeCitation}
close={close}
manuscript={manuscript}
/>
)
case 'status':
return (
<React.Fragment>
{curr > qa && curr !== xml ? (
<p>
<RouteButton
onClick={() =>
props.setStatus(
curr > xml ? ' xml-triage' : ' submitted',
close,
)
}
>
<Icon color="currentColor" size={2.5}>
send
</Icon>
Send back
</RouteButton>
{` to most recent editing status:`}
{curr > xml ? ' xml-triage' : ' submitted'}
</p>
) : (
<p>
{`The submission is currently in an editing state (`}
{manuscript.status}
{`). You may route it elsewhere as usual from the manuscript view.`}
</p>
)}
<p>
{curr >= done ? (
<RouteButton>
<Icon color="currentColor" size={2.5}>
delete
</Icon>
Withdraw manuscript
</RouteButton>
)
case 'citation':
return (
<CitationEdit
change={props.changeCitation}
close={close}
manuscript={manuscript}
/>
)
case 'status':
return (
<React.Fragment>
{curr > qa && curr !== xml ? (
<p>
<RouteButton
onClick={() =>
props.setStatus(
curr > xml ? ' xml-triage' : ' submitted',
close,
)
}
>
<Icon color="currentColor" size={2.5}>
send
</Icon>
Send back
</RouteButton>
{` to most recent editing status:`}
{curr > xml ? ' xml-triage' : ' submitted'}
</p>
) : (
<RouteButton>
<Icon color="currentColor" size={2.5}>
trash-2
</Icon>
Remove manuscript
</RouteButton>
<p>
{`The submission is currently in an editing state (`}
{manuscript.status}
{`). You may route it elsewhere as usual from the manuscript view.`}
</p>
)}
</p>
<Exit close={close} />
</React.Fragment>
)
default:
return null
}
})()}
</React.Fragment>
</Portal>
)
})
<p>
{curr >= done ? (
<RouteButton>
<Icon color="currentColor" size={2.5}>
delete
</Icon>
Withdraw manuscript
</RouteButton>
) : (
<RouteButton>
<Icon color="currentColor" size={2.5}>
trash-2
</Icon>
Remove manuscript
</RouteButton>
)}
</p>
<Exit close={close} />
</React.Fragment>
)
default:
return null
}
})()}
</React.Fragment>
</Portal>
)
},
)
export default ManuscriptMutations(MetaEdit)
import React from 'react'
import { Icon, Action, H2 } from '@pubsweet/ui'
import { Query } from 'react-apollo'
import { Icon, Action, Button, H2 } from '@pubsweet/ui'
import { th } from '@pubsweet/ui-toolkit'
import styled from 'styled-components'
import moment from 'moment'
import { CHECK_DUPES } from '../operations'
import MetaEdit from './MetaEdit'
import { QUERY_ACTIVITY_INFO } from './operations'
const Heading = styled(H2)`
......@@ -32,6 +35,10 @@ const DL = styled.dl`
display: inline;
}
`
const DupeButton = styled(Button)`
padding: calc(${th('gridUnit')} / 2) ${th('gridUnit')};
font-size: ${th('fontSizeBaseSmall')};
`
const EditIcon = () => (
<Icon color="currentColor" size={1.75}>
edit-2
......@@ -51,7 +58,10 @@ class MetaSec extends React.Component {
issue,
location,
publicationDates,
title,
notes,
} = meta
let duplicates = []
const pmid = articleIds && articleIds.find(aid => aid.pubIdType === 'pmid')
const submitter = teams.find(team => team.role === 'submitter')
const { title: st, givenNames: sg, surname: ss } = submitter
......@@ -93,19 +103,6 @@ class MetaSec extends React.Component {
</DL>
<Heading>Quick view</Heading>
<Container>
{edit && (
<MetaEdit
close={() => this.setState({ edit: null })}
manuscript={manuscript}
refetch={[
{
query: QUERY_ACTIVITY_INFO,
variables: { id: manuscript.id },
},
]}
toEdit={edit}
/>
)}
{reviewer &&
reviewer.teamMembers[0].user.id ===
submitter.teamMembers[0].user.id ? (
......@@ -187,6 +184,53 @@ class MetaSec extends React.Component {
</Action>
</dd>
</DL>
<Query
fetchPolicy="cache-and-network"
query={CHECK_DUPES}
variables={{
id: manuscript.id,
articleIds: articleIds ? articleIds.map(aid => aid.id) : null,
title,
}}
>
{({ data, loading }) => {
if (loading || !data || !data.checkDuplicates) {
return '...'
}
const { manuscripts } = data.checkDuplicates
const dupeNote = notes
? notes.find(n => n.notesType === 'notDuplicates')
: null
const notDupes = dupeNote ? JSON.parse(dupeNote.content) : []
duplicates = manuscripts.filter(m => !notDupes.includes(m.id))
return (
<React.Fragment>
{duplicates && duplicates.length > 0 && (
<DupeButton
onClick={() => this.setState({ edit: 'dupes' })}
primary
>
Resolve duplicates
</DupeButton>
)}
{edit && (
<MetaEdit
close={() => this.setState({ edit: null })}
duplicates={duplicates}
manuscript={manuscript}
refetch={[
{
query: QUERY_ACTIVITY_INFO,
variables: { id: manuscript.id },
},
]}
toEdit={edit}
/>
)}
</React.Fragment>
)
}}
</Query>
</Container>
</React.Fragment>
)
......
......@@ -133,13 +133,10 @@ class Submit extends React.Component {
teams && teams.find(team => team.role === 'submitter')
? teams.find(team => team.role === 'submitter').teamMembers[0]
: null
let notDupes = []
const dupeNote = notes
? notes.find(n => n.notesType === 'notDuplicates')
: null
if (dupeNote) {
notDupes = JSON.parse(dupeNote.content)
}
const notDupes = dupeNote ? JSON.parse(dupeNote.content) : []
const duplicates = checkDupes.filter(d => !notDupes.includes(d.id))
const citationInformation = {
title: 'Citation',
......
......@@ -354,7 +354,7 @@ class Manuscript extends EpmcBaseModel {
static async selectActivityById(id) {
const manuscripts = await Manuscript.query()
.where('manuscript.id', id)
.eager('[journal, audits.user.identities, claiming, teams.users]')
.eager('[journal, notes, teams.users, audits.user.identities]')
.modifyEager('audits', q => {
q.where(q => {
q.whereNot('audit_log.object_type', 'note').orWhere(q => {
......
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