Skip to content
Snippets Groups Projects
Commit 82c13959 authored by Jure's avatar Jure
Browse files

feat(manuscript): use submission field as a pure JSON blob to simplify changing forms

parent 80bd4ccf
No related branches found
No related tags found
No related merge requests found
...@@ -90,6 +90,7 @@ const fragmentFields = ` ...@@ -90,6 +90,7 @@ const fragmentFields = `
email email
affiliation affiliation
} }
submission
` `
const query = gql` const query = gql`
...@@ -237,7 +238,10 @@ export default compose( ...@@ -237,7 +238,10 @@ export default compose(
})), })),
withFormik({ withFormik({
initialValues: {}, initialValues: {},
mapPropsToValues: ({ manuscript }) => manuscript, mapPropsToValues: ({ manuscript }) =>
Object.assign({}, manuscript, {
submission: JSON.parse(manuscript.submission),
}),
displayName: 'submit', displayName: 'submit',
handleSubmit: ( handleSubmit: (
props, props,
......
...@@ -248,10 +248,12 @@ class Manuscript extends BaseModel { ...@@ -248,10 +248,12 @@ class Manuscript extends BaseModel {
keywords: { type: ['string', 'null'] }, keywords: { type: ['string', 'null'] },
}, },
}, },
submission: {},
}, },
} }
} }
// TODO: Do this on the DB level with cascading deletes
async $beforeDelete() { async $beforeDelete() {
// const Review = require('../../review/src/review') // const Review = require('../../review/src/review')
const { Review, Team, File } = require('@pubsweet/models') const { Review, Team, File } = require('@pubsweet/models')
......
...@@ -8,5 +8,6 @@ CREATE TABLE manuscripts ( ...@@ -8,5 +8,6 @@ CREATE TABLE manuscripts (
authors JSONB, authors JSONB,
suggestions JSONB, suggestions JSONB,
meta JSONB, meta JSONB,
submission JSONB,
type TEXT NOT NULL type TEXT NOT NULL
); );
\ No newline at end of file
...@@ -7,6 +7,13 @@ const resolvers = { ...@@ -7,6 +7,13 @@ const resolvers = {
const { Team } = require('@pubsweet/models') const { Team } = require('@pubsweet/models')
const { meta, files } = vars.input const { meta, files } = vars.input
// We want the submission information to be stored as JSONB
// but we want the input to come in as a JSON string
const submission = vars.input.submission
? JSON.parse(vars.input.submission)
: {}
const emptyManuscript = { const emptyManuscript = {
meta: Object.assign(meta, { meta: Object.assign(meta, {
notes: [ notes: [
...@@ -21,7 +28,9 @@ const resolvers = { ...@@ -21,7 +28,9 @@ const resolvers = {
], ],
}), }),
status: 'new', status: 'new',
submission,
} }
// eslint-disable-next-line // eslint-disable-next-line
const manuscript = await new ctx.connectors.Manuscript.model( const manuscript = await new ctx.connectors.Manuscript.model(
emptyManuscript, emptyManuscript,
...@@ -173,6 +182,14 @@ const resolvers = { ...@@ -173,6 +182,14 @@ const resolvers = {
return form return form
}, },
}, },
// We want submission into to come out as a stringified JSON, so that we don't have to
// change our queries if the submission form changes. We still want to store it as JSONB
// so that we can easily search through the information within.
Manuscript: {
submission(parent, args, ctx) {
return JSON.stringify(parent.submission)
},
},
} }
module.exports = resolvers module.exports = resolvers
...@@ -27,6 +27,7 @@ const typeDefs = ` ...@@ -27,6 +27,7 @@ const typeDefs = `
suggestions: Suggestions suggestions: Suggestions
authors: [Author] authors: [Author]
meta: ManuscriptMeta meta: ManuscriptMeta
submission: String
} }
type ManuscriptVersion implements Object { type ManuscriptVersion implements Object {
...@@ -42,11 +43,13 @@ const typeDefs = ` ...@@ -42,11 +43,13 @@ const typeDefs = `
suggestions: Suggestions suggestions: Suggestions
authors: [Author] authors: [Author]
meta: ManuscriptMeta meta: ManuscriptMeta
submission: String
} }
input ManuscriptInput { input ManuscriptInput {
files: [FileInput] files: [FileInput]
meta: ManuscriptMetaInput meta: ManuscriptMetaInput
submission: String
} }
input ManuscriptMetaInput { input ManuscriptMetaInput {
......
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