Commit eb88c546 authored by Ana Ellis's avatar Ana Ellis
Browse files

feat: latest changes from master and fix lint errors

parents 5824930e 735a2ae3
Pipeline #7655 failed with stages
in 7 minutes and 49 seconds
......@@ -9,8 +9,8 @@ This is the current set of features and their status on our roadmap.
|Module |Description |In progress |Done |Issue
|:--- |--- |:---: |:---: |:---:
|**Current**|
|Summary Info |Update text for metadata questions |✔ | |#165
|Summary Info |Add instructions for uploading files |✔ | |#168
|Summary Info |Update text for metadata questions | |✔ |#165
|Summary Info |Add instructions for uploading files | |✔ |#168
|System |Apply Coko theme |✔ | |pubsweet/pubsweet#372
|System |Implement roles & permissions |✔ | |#58
|System |Write integration tests |✔ | |
......
......@@ -13,6 +13,8 @@ export default {
value: 'no',
},
],
description:
'The journal requires data be openly available, and our full policy is <a href="https://www.collabra.org/about/editorialpolicies/#open-data-open-analytic-methods-code-and-research-materials-transparency" target="_blank">here</a>. If you have exceptions that need to be considered, please click "No" and explain in your cover letter below. Please click N/A if your submission does not feature data.',
},
{
id: 'previouslySubmitted',
......@@ -27,6 +29,8 @@ export default {
value: 'no',
},
],
description:
'Provide further details in your cover letter below, if necessary.',
},
{
id: 'openPeerReview',
......@@ -41,6 +45,8 @@ export default {
value: 'no',
},
],
description:
'Please read a description of our <a href="https://www.collabra.org/about/editorialpolicies/#open-peer-review" target="_blank">“Open Review”</a> option and select “Yes” if you choose this process.',
},
{
id: 'streamlinedReview',
......@@ -55,10 +61,13 @@ export default {
value: 'no',
},
],
description:
'Please read a description of our <a href="https://www.collabra.org/about/editorialpolicies/#streamlined-review" target="_blank">“Streamlined Review”</a> option and select “Yes” if you choose this process. If “Yes”, please upload your ported decision letter and reviews as “Supplementary Files” below, clearly labeled.',
},
{
id: 'researchNexus',
legend: 'Submitted as part of the research nexus ?',
legend:
'Submitted as part of the <a href="https://www.collabra.org/collections/special/" target="_blank">research nexus</a> ?',
options: [
{
label: 'Yes',
......@@ -69,6 +78,8 @@ export default {
value: 'no',
},
],
description:
'If yes, mention the name of the Research Nexus in your cover letter below.',
},
{
id: 'preregistered',
......@@ -83,6 +94,8 @@ export default {
value: 'no',
},
],
description:
'If any or all elements of your study have been pre-registered, click yes and ensure details are in the Acknowledgements section of your manuscript, following these <a href="https://www.collabra.org/about/editorialpolicies/#preregistration-of-studies-and-analysis-plans" target="_blank">guidelines</a>.',
},
],
}
......@@ -8,3 +8,5 @@ export { default as articleTypes } from './article-types'
export { default as editors } from './editors'
export { default as roles } from './roles'
export { default as reviewStatus } from './review-status'
export { default as notes } from './submit-notes'
export { default as supplementary } from './supplementary'
export default {
fundingAcknowledgement: {
placeholder: 'Enter an acknowledgment…',
title: 'Funding body acknowledgement (required)',
description:
'Please also specifically state if your work was <u>not</u> supported by funding.',
},
specialInstructions: {
placeholder: 'Enter instructions for the editor…',
title: 'Special instructions (confidential, to Editors only)',
description:
'Please write or paste what you would normally write into a cover letter here, focusing on information that has not been covered by this form, or any further information prompted by your answers to the questions above.',
},
}
export default {
description:
'<pre>There are 3 types of item which should be uploaded here:<br />' +
'<ul>' +
'<li>Regular figures which should also be be embedded in the manuscript.(These are helpful for the production<br />process,if your article is accepted, in case there are any issues with the embedded versions.)</li>' +
'<li>Supplemental items that provide a relevant and useful expansion of the article (Examples include appendices,<br/>very large tables, audios, videos, three-dimensional visualizations, interactive graphics, and so on.)</li>' +
'<li>Items that support the peer review process. (Examples are ported reviews and decision letters for use during<br />the Streamlined Review workflow. Also, if you have a long cover letter you would rather upload than paste<br/>into the text box, please also upload it here.)</li>' +
'</ul>' +
'Supplemental materials can be named in almost any way, provided that the files are clearly and consistently named,<br />are uploaded in chronological order, and grouped as they are described above. For example, a typical article<br/>might include:' +
'<br />' +
'<ul>' +
'<li>Figure 1.jpg</li>' +
'<li>Figure 2.jpg</li>' +
'<li>Figure 3.jpg</li>' +
'<li>Supplemental Table 1.docx</li>' +
'<li>Ported Decision Letter and Reviews from Journal X.docx</li>' +
'</ul>' +
'</pre>',
}
......@@ -13,7 +13,7 @@ class XpubCollabraMode {
constructor(userId, operation, object, context) {
this.userId = userId
this.operation = XpubCollabraMode.mapOperation(operation)
this.object = object
this.object = object.current ? object.current : object
this.context = context
}
......@@ -62,7 +62,7 @@ class XpubCollabraMode {
const memberships = await Promise.all(
this.user.teams.map(async teamId => {
const team = await this.context.models.Team.find(teamId)
if (!team) return [false]
return membershipCondition(team)
}),
)
......@@ -254,12 +254,17 @@ class XpubCollabraMode {
if (!this.isAuthenticated()) {
return false
}
const fragment = this.object
let permission = this.isAuthor(fragment)
permission = permission ? true : this.isAssignedReviewerEditor(fragment)
permission = permission ? true : this.isAssignedManagingEditor(fragment)
// Caveat: this means every logged-in user can read every fragment (but needs its UUID)
// Ideally we'd check if the fragment (version) belongs to a collection (project)
// where the user is a member of a team with the appropriate rights. However there is no
// link from a fragment back to a collection at this point. Something to keep in mind!
return true
return permission
}
/**
......@@ -444,6 +449,7 @@ class XpubCollabraMode {
(await this.isAssignedHandlingEditor(this.object)) ||
(await this.isAssignedSeniorEditor(this.object)) ||
(await this.isAssignedReviewerEditor(this.object))
return permission
}
......@@ -524,6 +530,14 @@ class XpubCollabraMode {
return this.checkPageSubmit(params)
}
if (path === '/projects/:project/versions/:version/review') {
return this.checkPageReview(params)
}
if (path === '/projects/:project/versions/:version/decision/:project') {
return this.checkPageDecision(params)
}
return true
}
......@@ -547,6 +561,25 @@ class XpubCollabraMode {
return permission
}
async checkPageReview(params) {
const collection = this.context.models.Collection.find(params.project)
const version = this.context.models.Fragment.find(params.version)
if (this.isAuthor(collection)) return false
let permission = await this.checkTeamMembers(
['isAssignedSeniorEditor', 'isAssignedHandlingEditor'],
collection,
)
// set object to Fragment so can validate on canReadFragment
this.object = version
permission = permission ? true : await this.canReadFragment()
return permission
}
async checkTeamMembers(team, object) {
const permission = await Promise.all(team.map(t => this[t](object)))
return permission.includes(true)
......@@ -574,32 +607,32 @@ module.exports = {
GET: (userId, operation, object, context) => {
const mode = new XpubCollabraMode(userId, operation, object, context)
// GET /api/collections
if (object && object.path === '/collections') {
if (mode.object && mode.object.path === '/collections') {
return mode.canListCollections()
}
// GET /api/users
if (object && object.path === '/users') {
if (mode.object && mode.object.path === '/users') {
return mode.canListUsers()
}
// GET /api/fragments
if (object && object.path === '/fragments') {
if (mode.object && mode.object.path === '/fragments') {
return mode.canListFragments()
}
// GET /api/teams
if (object && object.path === '/teams') {
if (mode.object && mode.object.path === '/teams') {
return mode.canListTeams()
}
// GET /api/collection
if (object && object.type === 'collection') {
if (mode.object && mode.object.type === 'collection') {
return mode.canReadCollection()
}
// GET /api/fragment
if (object && object.type === 'fragment') {
if (mode.object && mode.object.type === 'fragment') {
return mode.canReadFragment()
}
......@@ -609,7 +642,7 @@ module.exports = {
}
// GET /api/user
if (object && object.type === 'user') {
if (mode.object && mode.object.type === 'user') {
return mode.canReadUser()
}
......@@ -619,27 +652,30 @@ module.exports = {
const mode = new XpubCollabraMode(userId, operation, object, context)
// POST /api/collections
if (object && object.path === '/collections') {
if (mode.object && mode.object.path === '/collections') {
return mode.canCreateCollection()
}
// POST /api/users
if (object && object.path === '/users') {
if (mode.object && mode.object.path === '/users') {
return mode.canCreateUser()
}
// POST /api/fragments
if (object && object.path === '/fragments') {
if (mode.object && mode.object.path === '/fragments') {
return mode.canCreateFragment()
}
// POST /api/collections/:collectionId/fragments
if (object && object.path === '/collections/:collectionId/fragments') {
if (
mode.object &&
mode.object.path === '/collections/:collectionId/fragments'
) {
return mode.canCreateFragmentInACollection()
}
// POST /api/teams
if (object && object.path === '/teams') {
if (mode.object && mode.object.path === '/teams') {
return mode.canCreateTeam()
}
......@@ -649,27 +685,27 @@ module.exports = {
const mode = new XpubCollabraMode(userId, operation, object, context)
// PATCH /api/make-invitation
if (object && object.path === '/make-invitation') {
if (mode.object && mode.object.path === '/make-invitation') {
return mode.canMakeInvitation()
}
// PATCH /api/collections/:id
if (object && object.type === 'collection') {
if (mode.object && mode.object.type === 'collection') {
return mode.canUpdateCollection()
}
// PATCH /api/users/:id
if (object && object.type === 'user') {
if (mode.object && mode.object.type === 'user') {
return mode.canUpdateUser()
}
// PATCH /api/fragments/:id
if (object && object.type === 'fragment') {
if (mode.object && mode.object.type === 'fragment') {
return mode.canUpdateFragment()
}
// PATCH /api/teams/:id
if (object && object.type === 'team') {
if (mode.object && mode.object.type === 'team') {
return mode.canUpdateTeam()
}
......
import config from 'config'
import { Selector } from 'testcafe'
import { createSubmission } from './helpers/submission'
import { startServer, setup, teardown, setupManuscript } from './helpers/setup'
import { startServer, setup, teardown } from './helpers/setup'
import { setupWithTwoUnsubmittedManuscripts } from './fixtures/manuscript-setup/setup-two-unsubmitted'
import { login, dashboard, submission, confirmation } from './pageObjects'
......@@ -70,7 +70,7 @@ test
test
.before(async t => {
const result = await setupWithTwoUnsubmittedManuscripts()
await setupWithTwoUnsubmittedManuscripts()
await login.doLogin('john', 'johnjohn')
})('Author submits manuscript', async t => {
await t
......
......@@ -99,19 +99,19 @@
lodash "^4.2.0"
to-fast-properties "^2.0.0"
"@pubsweet/coko-theme@2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@pubsweet/coko-theme/-/coko-theme-2.0.0.tgz#f23ae8b5fed12f3bce83767190144d76180fc1b7"
"@pubsweet/coko-theme@2.1.0":
version "2.1.0"
resolved "https://registry.yarnpkg.com/@pubsweet/coko-theme/-/coko-theme-2.1.0.tgz#2a6746c718c3ff032246e8b68b5eaf47e264e793"
dependencies:
"@pubsweet/ui-toolkit" "^1.0.0"
"@pubsweet/ui-toolkit" "^1.1.0"
cokourier-prime-sans "git+https://gitlab.coko.foundation/julientaq/cokourier-sans-prime.git"
styled-components "^3.2.5"
typeface-fira-sans-condensed "^0.0.54"
typeface-vollkorn "^0.0.54"
"@pubsweet/component-send-email@^0.2.3":
version "0.2.3"
resolved "https://registry.yarnpkg.com/@pubsweet/component-send-email/-/component-send-email-0.2.3.tgz#73e2cef352c967fdb8e68fc3066bfe6fd3535596"
"@pubsweet/component-send-email@^0.2.4":
version "0.2.4"
resolved "https://registry.yarnpkg.com/@pubsweet/component-send-email/-/component-send-email-0.2.4.tgz#e0d73769b804656d7ed5cebf1d2b50afaa378a02"
dependencies:
aws-sdk "^2.185.0"
nodemailer "^4.4.2"
......@@ -154,17 +154,17 @@
typeface-fira-sans-condensed "^0.0.43"
typeface-vollkorn "^0.0.43"
"@pubsweet/ui-toolkit@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@pubsweet/ui-toolkit/-/ui-toolkit-1.0.0.tgz#df05b54e7bbfabcb10c7afc2991752e1087d2298"
"@pubsweet/ui-toolkit@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@pubsweet/ui-toolkit/-/ui-toolkit-1.1.0.tgz#1c115ca0e3c54e07d2b22db3aa117df216b8a903"
dependencies:
color "^3.0.0"
lodash "^4.17.4"
styled-components "^3.2.5"
"@pubsweet/ui@5.0.0":
version "5.0.0"
resolved "https://registry.yarnpkg.com/@pubsweet/ui/-/ui-5.0.0.tgz#3e8765fafa1d73fb9081074f4ed58d4e559f2437"
"@pubsweet/ui@5.0.1", "@pubsweet/ui@^5.0.1":
version "5.0.1"
resolved "https://registry.yarnpkg.com/@pubsweet/ui/-/ui-5.0.1.tgz#72a9c1862b407dd30951ec7842aed9105e068668"
dependencies:
babel-jest "^21.2.0"
classnames "^2.2.5"
......@@ -233,6 +233,14 @@
version "2.0.47"
resolved "https://registry.yarnpkg.com/@types/async/-/async-2.0.47.tgz#f49ba1dd1f189486beb6e1d070a850f6ab4bd521"
"@types/async@2.0.49":
version "2.0.49"
resolved "https://registry.yarnpkg.com/@types/async/-/async-2.0.49.tgz#92e33d13f74c895cb9a7f38ba97db8431ed14bc0"
"@types/chalk@^0.4.31":
version "0.4.31"
resolved "https://registry.yarnpkg.com/@types/chalk/-/chalk-0.4.31.tgz#a31d74241a6b1edbb973cf36d97a2896834a51f9"
"@types/error-stack-parser@^1.3.18":
version "1.3.18"
resolved "https://registry.yarnpkg.com/@types/error-stack-parser/-/error-stack-parser-1.3.18.tgz#e01c9f8c85ca83b610320c62258b0c9026ade0f7"
......@@ -406,6 +414,20 @@ apollo-cache-inmemory@^1.1.7:
apollo-utilities "^1.0.11"
graphql-anywhere "^4.1.8"
apollo-cache-inmemory@^1.2.4:
version "1.2.5"
resolved "https://registry.yarnpkg.com/apollo-cache-inmemory/-/apollo-cache-inmemory-1.2.5.tgz#b57951947b1db486a60db11c7dcfc6b112e5abe9"
dependencies:
apollo-cache "^1.1.12"
apollo-utilities "^1.0.16"
graphql-anywhere "^4.1.14"
apollo-cache@^1.1.12:
version "1.1.12"
resolved "https://registry.yarnpkg.com/apollo-cache/-/apollo-cache-1.1.12.tgz#070015c9051b2ebb69676beb10466a9c0b259f91"
dependencies:
apollo-utilities "^1.0.16"
apollo-cache@^1.1.7:
version "1.1.7"
resolved "https://registry.yarnpkg.com/apollo-cache/-/apollo-cache-1.1.7.tgz#5817018a2fbfc05a21ba319bd17a3e7538110cc5"
......@@ -436,6 +458,20 @@ apollo-client@^2.2.2:
optionalDependencies:
"@types/async" "2.0.47"
apollo-client@^2.3.4:
version "2.3.5"
resolved "https://registry.yarnpkg.com/apollo-client/-/apollo-client-2.3.5.tgz#74b62bd7e7bd7030d01c35e2e221ed65a807af23"
dependencies:
"@types/zen-observable" "^0.5.3"
apollo-cache "^1.1.12"
apollo-link "^1.0.0"
apollo-link-dedup "^1.0.0"
apollo-utilities "^1.0.16"
symbol-observable "^1.0.2"
zen-observable "^0.8.0"
optionalDependencies:
"@types/async" "2.0.49"
apollo-link-context@^1.0.5:
version "1.0.8"
resolved "https://registry.yarnpkg.com/apollo-link-context/-/apollo-link-context-1.0.8.tgz#c967a56ac6ed32add748937735bcb57c5cc64c95"
......@@ -454,7 +490,7 @@ apollo-link-http-common@^0.2.3, apollo-link-http-common@^0.2.4:
dependencies:
apollo-link "^1.2.2"
apollo-link-http@^1.3.1:
apollo-link-http@^1.3.1, apollo-link-http@^1.5.4:
version "1.5.4"
resolved "https://registry.yarnpkg.com/apollo-link-http/-/apollo-link-http-1.5.4.tgz#b80b7b4b342c655b6a5614624b076a36be368f43"
dependencies:
......@@ -514,6 +550,12 @@ apollo-utilities@^1.0.0, apollo-utilities@^1.0.1, apollo-utilities@^1.0.11:
version "1.0.11"
resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.0.11.tgz#cd36bfa6e5c04eea2caf0c204a0f38a0ad550802"
apollo-utilities@^1.0.16:
version "1.0.16"
resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.0.16.tgz#787310df4c3900a68c0beb3d351c59725a588cdb"
dependencies:
fast-json-stable-stringify "^2.0.0"
app-root-path@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46"
......@@ -4255,6 +4297,12 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
version "4.1.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
graphql-anywhere@^4.1.14:
version "4.1.14"
resolved "https://registry.yarnpkg.com/graphql-anywhere/-/graphql-anywhere-4.1.14.tgz#89664cb885faaec1cbc66905351fadae8cc85a04"
dependencies:
apollo-utilities "^1.0.16"
graphql-anywhere@^4.1.8:
version "4.1.8"
resolved "https://registry.yarnpkg.com/graphql-anywhere/-/graphql-anywhere-4.1.8.tgz#23882e6a16ec824febbe5bca40937cdd76c5acdc"
......@@ -7865,14 +7913,17 @@ public-encrypt@^4.0.0:
parse-asn1 "^5.0.0"
randombytes "^2.0.1"
pubsweet-client@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pubsweet-client/-/pubsweet-client-3.0.0.tgz#f67d26485138863c3a841960a4cd7ba955cb6db2"
pubsweet-client@3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/pubsweet-client/-/pubsweet-client-3.0.1.tgz#4559eef92bd0659270ceefe5b4ad13eb13da2b22"
dependencies:
"@pubsweet/ui-toolkit" "^1.0.0"
apollo-client-preset "^1.0.8"
"@pubsweet/ui" "^5.0.1"
"@pubsweet/ui-toolkit" "^1.1.0"
apollo-cache-inmemory "^1.2.4"
apollo-client "^2.3.4"
apollo-link "^1.2.1"
apollo-link-context "^1.0.5"
apollo-link-http "^1.5.4"
apollo-upload-client "^8.0.0"
authsome "^0.1.0"
config "^1.21.0"
......@@ -7959,12 +8010,12 @@ pubsweet-component-users-manager@^2.0.1:
react-redux "^5.0.6"
redux "^3.7.2"
pubsweet-component-xpub-dashboard@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/pubsweet-component-xpub-dashboard/-/pubsweet-component-xpub-dashboard-1.0.0.tgz#38f0b271b486fd6949d8b12f28b36365da385aba"
pubsweet-component-xpub-dashboard@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/pubsweet-component-xpub-dashboard/-/pubsweet-component-xpub-dashboard-1.0.1.tgz#1f48c42d897a625baf803f70ab22b19ff53a1258"
dependencies:
"@pubsweet/ui" "^4.1.3"
"@pubsweet/ui-toolkit" "^1.0.0"
"@pubsweet/ui" "^5.0.1"
"@pubsweet/ui-toolkit" "^1.1.0"
classnames "^2.2.5"
lodash "^4.17.4"
prop-types "^15.5.10"
......@@ -7975,7 +8026,7 @@ pubsweet-component-xpub-dashboard@^1.0.0:
react-router-dom "^4.2.2"
recompose "^0.26.0"
styled-components "^3.2.5"
xpub-connect "^1.0.0"
xpub-connect "^1.0.1"
xpub-journal "^0.0.6"
xpub-selectors "^0.1.0"
xpub-upload "^0.0.7"
......@@ -7988,31 +8039,31 @@ pubsweet-component-xpub-find-reviewers@^0.0.6:
react-router-dom "^4.2.2"
recompose "^0.26.0"
pubsweet-component-xpub-manuscript@^0.0.19:
version "0.0.19"
resolved "https://registry.yarnpkg.com/pubsweet-component-xpub-manuscript/-/pubsweet-component-xpub-manuscript-0.0.19.tgz#94649fd780262d7624f039089cd0da1ec2f4516b"
pubsweet-component-xpub-manuscript@^0.0.20:
version "0.0.20"
resolved "https://registry.yarnpkg.com/pubsweet-component-xpub-manuscript/-/pubsweet-component-xpub-manuscript-0.0.20.tgz#1c8a0b2a672d774faa5542517ebf8f430e6bd8b0"
dependencies:
prop-types "^15.5.10"
recompose "^0.26.0"
wax-editor-react "^0.1.10"
xpub-connect "^1.0.0"
xpub-connect "^1.0.1"
xpub-selectors "^0.1.0"
pubsweet-component-xpub-review-backend@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/pubsweet-component-xpub-review-backend/-/pubsweet-component-xpub-review-backend-0.2.1.tgz#37702ac42afef87040092797a706782e031d7287"
pubsweet-component-xpub-review-backend@^0.2.2:
version "0.2.2"
resolved "https://registry.yarnpkg.com/pubsweet-component-xpub-review-backend/-/pubsweet-component-xpub-review-backend-0.2.2.tgz#8c5e7610cb2ef28eb7db07b04e15d9ca2728b712"
dependencies:
"@pubsweet/component-send-email" "^0.2.3"
"@pubsweet/component-send-email" "^0.2.4"
config "^1.26.1"
lodash "^4.17.5"
moment "^2.18.1"
pubsweet-component-xpub-review@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/pubsweet-component-xpub-review/-/pubsweet-component-xpub-review-1.0.0.tgz#9985c3572bbb4b846521297ee3cd4a9158aaa5a7"
pubsweet-component-xpub-review@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/pubsweet-component-xpub-review/-/pubsweet-component-xpub-review-1.0.1.tgz#82b3fd9275fa20ba0de12644cee64b658becd79b"
dependencies:
"@pubsweet/ui" "^4.1.3"
"@pubsweet/ui-toolkit" "^1.0.0"
"@pubsweet/ui-toolkit" "^1.1.0"
classnames "^2.2.5"
lodash "^4.17.4"
moment "^2.18.1"
......@@ -8025,19 +8076,19 @@ pubsweet-component-xpub-review@^1.0.0:
styled-components "^3.2.5"
uuid "^3.1.0"
wax-editor-react "^0.1.8"
xpub-connect "^1.0.0"
xpub-edit "^1.0.0"
xpub-connect "^1.0.1"
xpub-edit "^1.0.1"
xpub-journal "^0.0.6"
xpub-selectors "^0.1.0"
xpub-upload "^0.0.7"
xpub-validators "^0.0.5"
pubsweet-component-xpub-submit@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/pubsweet-component-xpub-submit/-/pubsweet-component-xpub-submit-2.0.0.tgz#a893167ac1626eed609883e63aec70db0b43625e"
pubsweet-component-xpub-submit@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/pubsweet-component-xpub-submit/-/pubsweet-component-xpub-submit-2.0.1.tgz#ffb820bd41e64cc76570d50537994ca4ea775141"
dependencies:
"@pubsweet/ui" "^4.1.3"
"@pubsweet/ui-toolkit" "^1.0.0"
"@pubsweet/ui" "^5.0.1"
"@pubsweet/ui-toolkit" "^1.1.0"
apollo-client-preset "^1.0.8"
lodash "^4.17.4"
prop-types "^15.5.10"
......@@ -8048,8 +8099,8 @@ pubsweet-component-xpub-submit@^2.0.0:
redux-form "^7.0.3"
striptags "^3.1.0"
styled-components "^3.2.5"
xpub-connect "^1.0.0"