From 36d5719ab3dee7f388b255a0cb7dcadaa81d3451 Mon Sep 17 00:00:00 2001
From: Alf Eaton <eaton.alf@gmail.com>
Date: Thu, 7 Sep 2017 08:57:38 +0100
Subject: [PATCH] Refactor: xpub-upload and xpub-journal

---
 README.md                                     |  4 +-
 packages/component-app/package.json           |  7 +-
 packages/component-app/src/components/App.js  |  2 +-
 .../component-app/src/components/index.js     |  2 -
 packages/component-dashboard/package.json     |  3 +-
 .../src/components/AssignEditor.js            |  2 +-
 .../src/components/DashboardPage.js           |  2 +-
 .../components/metadata/MetadataSections.js   |  2 +-
 .../src/components/withVersion.js             |  2 +-
 packages/component-manuscript/package.json    |  2 +-
 .../src/components/ManuscriptPage.js          |  2 +-
 packages/component-review/package.json        |  6 +-
 .../src/components/Decision.js                |  2 +-
 .../src/components/DecisionPage.js            |  4 +-
 .../component-review/src/components/Review.js |  2 +-
 .../src/components/ReviewPage.js              |  4 +-
 packages/component-submit/package.json        |  6 +-
 .../src/components/Declarations.js            |  2 +-
 .../src/components/Metadata.js                |  2 +-
 .../src/components/SubmitPage.js              |  4 +-
 packages/xpub-collabra/app/Root.js            |  2 +-
 packages/xpub-connect/package.json            | 28 +++++++
 .../src/components/ConnectPage.js             |  0
 .../src/components/ConnectPage.local.scss     |  0
 packages/xpub-connect/src/components/index.js |  1 +
 packages/xpub-connect/src/index.js            |  1 +
 packages/xpub-journal/package.json            | 22 +++++
 .../src/components/JournalProvider.js         |  0
 packages/xpub-journal/src/components/index.js |  1 +
 packages/xpub-journal/src/index.js            |  1 +
 packages/xpub-styleguide/package.json         |  1 -
 .../xpub-styleguide/src/components/Wrapper.js |  2 +-
 packages/xpub-upload/package.json             | 29 +++++++
 .../xpub-upload/src/components/ConnectPage.js | 80 +++++++++++++++++++
 .../src/components/ConnectPage.local.scss     |  8 ++
 packages/xpub-upload/src/components/index.js  |  1 +
 .../upload.js => xpub-upload/src/index.js}    |  0
 37 files changed, 205 insertions(+), 34 deletions(-)
 create mode 100644 packages/xpub-connect/package.json
 rename packages/{component-app => xpub-connect}/src/components/ConnectPage.js (100%)
 rename packages/{component-app => xpub-connect}/src/components/ConnectPage.local.scss (100%)
 create mode 100644 packages/xpub-connect/src/components/index.js
 create mode 100644 packages/xpub-connect/src/index.js
 create mode 100644 packages/xpub-journal/package.json
 rename packages/{component-app => xpub-journal}/src/components/JournalProvider.js (100%)
 create mode 100644 packages/xpub-journal/src/components/index.js
 create mode 100644 packages/xpub-journal/src/index.js
 create mode 100644 packages/xpub-upload/package.json
 create mode 100644 packages/xpub-upload/src/components/ConnectPage.js
 create mode 100644 packages/xpub-upload/src/components/ConnectPage.local.scss
 create mode 100644 packages/xpub-upload/src/components/index.js
 rename packages/{component-app/src/lib/upload.js => xpub-upload/src/index.js} (100%)

diff --git a/README.md b/README.md
index d259ae6b7..16f33c35f 100644
--- a/README.md
+++ b/README.md
@@ -19,9 +19,11 @@ Note: xpub is still _very_ new. This repository contains an initial set of compo
 
 * `xpub-edit`: WYSIWYG editors for use in xpub forms
 * `xpub-fonts`: fonts for use in xpub applications
+* `xpub-journal`: a helper that provides journal config to components
 * `xpub-selectors`: some useful redux selectors
 * `xpub-styleguide`: components for use in react-styleguidist
-* `xpub-ui`: a library of user interface elements for use in PubSweet components.
+* `xpub-ui`: a library of user interface elements for use in PubSweet components
+* `xpub-upload`: a helper function for file uploading
 
 ## Installing
 
diff --git a/packages/component-app/package.json b/packages/component-app/package.json
index 045134755..ffbb61a2e 100644
--- a/packages/component-app/package.json
+++ b/packages/component-app/package.json
@@ -10,23 +10,18 @@
   ],
   "dependencies": {
     "prop-types": "^15.5.10",
-    "pubsweet-client": "git+https://gitlab.coko.foundation/pubsweet/pubsweet-client.git",
     "react": "^15.6.1",
     "react-dom": "^15.6.1",
-    "react-loadable": "^4.0.3",
     "react-redux": "^5.0.2",
     "react-router": "^3.0.5",
     "react-router-redux": "^4.0.7",
     "recompose": "^0.25.0",
     "redux": "^3.6.0",
-    "redux-form": "^7.0.3",
-    "redux-logger": "^3.0.1",
-    "xpub-selectors": "^0.0.2",
+    "xpub-journal": "^0.0.2",
     "xpub-ui": "^0.0.2"
   },
   "peerDependencies": {
     "prop-types": "^15.5.10",
-    "pubsweet-client": "git+https://gitlab.coko.foundation/pubsweet/pubsweet-client.git",
     "react": "^15.6.1",
     "react-dom": "^15.6.1",
     "react-redux": "^5.0.2",
diff --git a/packages/component-app/src/components/App.js b/packages/component-app/src/components/App.js
index 2b7eeac88..44b8591ad 100644
--- a/packages/component-app/src/components/App.js
+++ b/packages/component-app/src/components/App.js
@@ -2,7 +2,7 @@ import React from 'react'
 import { compose } from 'recompose'
 import { connect } from 'react-redux'
 import { AppBar } from 'xpub-ui'
-import { withJournal } from './JournalProvider'
+import { withJournal } from 'xpub-journal'
 import classes from './App.local.scss'
 
 const App = ({ children, currentUser, journal }) => (
diff --git a/packages/component-app/src/components/index.js b/packages/component-app/src/components/index.js
index 95fbdb949..f52c042e6 100644
--- a/packages/component-app/src/components/index.js
+++ b/packages/component-app/src/components/index.js
@@ -1,3 +1 @@
 export { default as App } from './App'
-export { JournalProvider, withJournal } from './JournalProvider'
-export { default as ConnectPage } from './ConnectPage'
diff --git a/packages/component-dashboard/package.json b/packages/component-dashboard/package.json
index 6a5fe3e5b..138f1d281 100644
--- a/packages/component-dashboard/package.json
+++ b/packages/component-dashboard/package.json
@@ -14,7 +14,6 @@
     "prop-types": "^15.5.10",
     "pubsweet-client": "git+https://gitlab.coko.foundation/pubsweet/pubsweet-client.git",
     "pubsweet-component-ink-frontend": "^0.1.0",
-    "pubsweet-component-xpub-app": "^0.0.2",
     "react": "^15.6.1",
     "react-dom": "^15.6.1",
     "react-redux": "^5.0.2",
@@ -22,6 +21,8 @@
     "react-dropzone": "^3.13.3",
     "react-moment": "^0.6.1",
     "recompose": "^0.25.0",
+    "xpub-connect": "^0.0.2",
+    "xpub-journal": "^0.0.2",
     "xpub-selectors": "^0.0.2",
     "xpub-ui": "^0.0.2"
   },
diff --git a/packages/component-dashboard/src/components/AssignEditor.js b/packages/component-dashboard/src/components/AssignEditor.js
index ce2d884b3..7012e9460 100644
--- a/packages/component-dashboard/src/components/AssignEditor.js
+++ b/packages/component-dashboard/src/components/AssignEditor.js
@@ -2,7 +2,7 @@ import React from 'react'
 import { connect } from 'react-redux'
 import { compose } from 'recompose'
 import { Menu } from 'xpub-ui'
-import { withJournal } from 'pubsweet-component-xpub-app/src/components'
+import { withJournal } from 'xpub-journal'
 
 const editorOption = editor => ({
   value: editor.user,
diff --git a/packages/component-dashboard/src/components/DashboardPage.js b/packages/component-dashboard/src/components/DashboardPage.js
index c7f4db500..f1d7a605b 100644
--- a/packages/component-dashboard/src/components/DashboardPage.js
+++ b/packages/component-dashboard/src/components/DashboardPage.js
@@ -3,7 +3,7 @@ import { connect } from 'react-redux'
 import { orderBy } from 'lodash'
 import actions from 'pubsweet-client/src/actions'
 import { selectCurrentUser } from 'xpub-selectors'
-import { ConnectPage } from 'pubsweet-component-xpub-app/src/components'
+import { ConnectPage } from 'xpub-connect'
 import { uploadManuscript } from '../redux/manuscriptConversion'
 import { addUserToTeam } from '../redux/teams'
 import Dashboard from './Dashboard'
diff --git a/packages/component-dashboard/src/components/metadata/MetadataSections.js b/packages/component-dashboard/src/components/metadata/MetadataSections.js
index 3442c2ace..a5a7b3245 100644
--- a/packages/component-dashboard/src/components/metadata/MetadataSections.js
+++ b/packages/component-dashboard/src/components/metadata/MetadataSections.js
@@ -1,5 +1,5 @@
 import React from 'react'
-import { withJournal } from 'pubsweet-component-xpub-app/src/components'
+import { withJournal } from 'xpub-journal'
 
 const MetadataSections = ({ journal, sections }) => (
   <span>
diff --git a/packages/component-dashboard/src/components/withVersion.js b/packages/component-dashboard/src/components/withVersion.js
index 2fc404645..bb5d8ba35 100644
--- a/packages/component-dashboard/src/components/withVersion.js
+++ b/packages/component-dashboard/src/components/withVersion.js
@@ -1,7 +1,7 @@
 import { compose } from 'recompose'
 import { connect } from 'react-redux'
 import actions from 'pubsweet-client/src/actions'
-import { ConnectPage } from 'pubsweet-component-xpub-app/src/components'
+import { ConnectPage } from 'xpub-connect'
 import { selectFragment } from 'xpub-selectors'
 
 export default Component => (
diff --git a/packages/component-manuscript/package.json b/packages/component-manuscript/package.json
index ce9fc2c8d..e08ff83c3 100644
--- a/packages/component-manuscript/package.json
+++ b/packages/component-manuscript/package.json
@@ -8,6 +8,7 @@
   "main": "src",
   "dependencies": {
     "pubsweet-component-wax": "^0.1.0",
+    "xpub-connect": "^0.0.2",
     "xpub-selectors": "^0.0.2"
   },
   "peerDependencies": {
@@ -30,7 +31,6 @@
     "faker": "^4.1.0",
     "file-loader": "^0.11.2",
     "node-sass": "^4.5.3",
-    "pubsweet-component-xpub-app": "^0.0.2",
     "recompose": "^0.25.0",
     "rimraf": "^2.6.1",
     "react-styleguidist": "^6.0.8",
diff --git a/packages/component-manuscript/src/components/ManuscriptPage.js b/packages/component-manuscript/src/components/ManuscriptPage.js
index d5fcddc23..3b02e2edd 100644
--- a/packages/component-manuscript/src/components/ManuscriptPage.js
+++ b/packages/component-manuscript/src/components/ManuscriptPage.js
@@ -1,7 +1,7 @@
 import { compose } from 'recompose'
 import { connect } from 'react-redux'
 import actions from 'pubsweet-client/src/actions'
-import { ConnectPage } from 'pubsweet-component-xpub-app/src/components'
+import { ConnectPage } from 'xpub-connect'
 import { selectCurrentUser, selectCollection, selectFragment } from 'xpub-selectors'
 import Manuscript from './Manuscript'
 
diff --git a/packages/component-review/package.json b/packages/component-review/package.json
index 0062460cd..dee4f66fd 100644
--- a/packages/component-review/package.json
+++ b/packages/component-review/package.json
@@ -14,7 +14,6 @@
     "prop-types": "^15.5.10",
     "pubsweet-client": "git+https://gitlab.coko.foundation/pubsweet/pubsweet-client.git",
     "pubsweet-component-wax": "^0.1.0",
-    "pubsweet-component-xpub-app": "^0.0.2",
     "react": "^15.6.1",
     "react-dom": "^15.6.1",
     "react-redux": "^5.0.2",
@@ -24,9 +23,12 @@
     "redux": "^3.6.0",
     "redux-form": "^7.0.3",
     "striptags": "^3.1.0",
+    "xpub-connect": "^0.0.2",
     "xpub-edit": "^0.0.2",
+    "xpub-journal": "^0.0.2",
     "xpub-selectors": "^0.0.2",
-    "xpub-ui": "^0.0.2"
+    "xpub-ui": "^0.0.2",
+    "xpub-upload": "^0.0.2"
   },
   "devDependencies": {
     "babel-core": "^6.26.0",
diff --git a/packages/component-review/src/components/Decision.js b/packages/component-review/src/components/Decision.js
index 3a3458b3b..f9bd6dc45 100644
--- a/packages/component-review/src/components/Decision.js
+++ b/packages/component-review/src/components/Decision.js
@@ -2,7 +2,7 @@ import React from 'react'
 import { Button } from 'xpub-ui'
 import { NoteEditor } from 'xpub-edit'
 import { RadioGroup, ValidatedField } from 'xpub-ui'
-import { withJournal } from 'pubsweet-component-xpub-app/src/components'
+import { withJournal } from 'xpub-journal'
 import { required } from '../lib/validators'
 import classes from './Decision.local.scss'
 
diff --git a/packages/component-review/src/components/DecisionPage.js b/packages/component-review/src/components/DecisionPage.js
index 5274023cf..c9be99523 100644
--- a/packages/component-review/src/components/DecisionPage.js
+++ b/packages/component-review/src/components/DecisionPage.js
@@ -4,8 +4,8 @@ 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 { ConnectPage } from 'pubsweet-component-xpub-app/src/components'
-import uploadFile from 'pubsweet-component-xpub-app/src/lib/upload'
+import { ConnectPage } from 'xpub-connect'
+import uploadFile from 'xpub-uplod'
 import { selectCollection, selectFragment } from 'xpub-selectors'
 import DecisionLayout from './DecisionLayout'
 
diff --git a/packages/component-review/src/components/Review.js b/packages/component-review/src/components/Review.js
index 07aea88e0..fa802d4e2 100644
--- a/packages/component-review/src/components/Review.js
+++ b/packages/component-review/src/components/Review.js
@@ -2,7 +2,7 @@ import React from 'react'
 import { Button } from 'xpub-ui'
 import { NoteEditor } from 'xpub-edit'
 import { RadioGroup, ValidatedField } from 'xpub-ui'
-import { withJournal } from 'pubsweet-component-xpub-app/src/components'
+import { withJournal } from 'xpub-journal'
 import { required } from '../lib/validators'
 import classes from './Review.local.scss'
 
diff --git a/packages/component-review/src/components/ReviewPage.js b/packages/component-review/src/components/ReviewPage.js
index f6ed4ddc0..df548073c 100644
--- a/packages/component-review/src/components/ReviewPage.js
+++ b/packages/component-review/src/components/ReviewPage.js
@@ -4,8 +4,8 @@ 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 { ConnectPage } from 'pubsweet-component-xpub-app/src/components'
-import uploadFile from 'pubsweet-component-xpub-app/src/lib/upload'
+import { ConnectPage } from 'xpub-connect'
+import uploadFile from 'xpub-upload'
 import { selectCollection, selectFragment } from 'xpub-selectors'
 import ReviewLayout from './ReviewLayout'
 
diff --git a/packages/component-submit/package.json b/packages/component-submit/package.json
index 3584898d8..cd070469e 100644
--- a/packages/component-submit/package.json
+++ b/packages/component-submit/package.json
@@ -13,7 +13,6 @@
     "lodash": "^4.17.4",
     "prop-types": "^15.5.10",
     "pubsweet-client": "git+https://gitlab.coko.foundation/pubsweet/pubsweet-client.git",
-    "pubsweet-component-xpub-app": "^0.0.2",
     "react": "^15.6.1",
     "react-dom": "^15.6.1",
     "react-redux": "^5.0.2",
@@ -23,9 +22,12 @@
     "redux": "^3.6.0",
     "redux-form": "^7.0.3",
     "striptags": "^3.1.0",
+    "xpub-connect": "^0.0.2",
     "xpub-edit": "^0.0.2",
+    "xpub-journal": "^0.0.2",
     "xpub-selectors": "^0.0.2",
-    "xpub-ui": "^0.0.2"
+    "xpub-ui": "^0.0.2",
+    "xpub-upload": "^0.0.2"
   },
   "devDependencies": {
     "babel-core": "^6.26.0",
diff --git a/packages/component-submit/src/components/Declarations.js b/packages/component-submit/src/components/Declarations.js
index d88b863c8..3f9ae7c48 100644
--- a/packages/component-submit/src/components/Declarations.js
+++ b/packages/component-submit/src/components/Declarations.js
@@ -2,7 +2,7 @@ import React from 'react'
 import classnames from 'classnames'
 import { FormSection } from 'redux-form'
 import { ValidatedField, YesOrNo } from 'xpub-ui'
-import { withJournal } from 'pubsweet-component-xpub-app/src/components'
+import { withJournal } from 'xpub-journal'
 import { required } from '../lib/validators'
 import classes from './Declarations.local.scss'
 
diff --git a/packages/component-submit/src/components/Metadata.js b/packages/component-submit/src/components/Metadata.js
index 593ac829c..5221fc166 100644
--- a/packages/component-submit/src/components/Metadata.js
+++ b/packages/component-submit/src/components/Metadata.js
@@ -2,7 +2,7 @@ import React from 'react'
 import { FormSection } from 'redux-form'
 import { AbstractEditor, TitleEditor } from 'xpub-edit'
 import { CheckboxGroup, Menu, TextField, ValidatedField } from 'xpub-ui'
-import { withJournal } from 'pubsweet-component-xpub-app/src/components'
+import { withJournal } from 'xpub-journal'
 import classes from './Metadata.local.scss'
 import { join, required, minChars, maxChars, minSize, split } from '../lib/validators'
 
diff --git a/packages/component-submit/src/components/SubmitPage.js b/packages/component-submit/src/components/SubmitPage.js
index c580e6e1e..c10380a8c 100644
--- a/packages/component-submit/src/components/SubmitPage.js
+++ b/packages/component-submit/src/components/SubmitPage.js
@@ -4,8 +4,8 @@ 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 uploadFile from 'pubsweet-component-xpub-app/src/lib/upload'
-import { ConnectPage } from 'pubsweet-component-xpub-app/src/components'
+import uploadFile from 'xpub-upload'
+import { ConnectPage } from 'xpub-connect'
 import { selectCollection, selectFragment } from 'xpub-selectors'
 import Submit from './Submit'
 
diff --git a/packages/xpub-collabra/app/Root.js b/packages/xpub-collabra/app/Root.js
index 7743eb724..cb05fdaa2 100644
--- a/packages/xpub-collabra/app/Root.js
+++ b/packages/xpub-collabra/app/Root.js
@@ -3,7 +3,7 @@ import { Provider as StoreProvider } from 'react-redux'
 import { Router, browserHistory } from 'react-router'
 import { syncHistoryWithStore } from 'react-router-redux'
 import { configureStore } from 'pubsweet-client'
-import { JournalProvider } from 'pubsweet-component-xpub-app/src/components'
+import { JournalProvider } from 'xpub-journal'
 
 const store = configureStore(browserHistory, {})
 const history = syncHistoryWithStore(browserHistory, store)
diff --git a/packages/xpub-connect/package.json b/packages/xpub-connect/package.json
new file mode 100644
index 000000000..f106ae5ff
--- /dev/null
+++ b/packages/xpub-connect/package.json
@@ -0,0 +1,28 @@
+{
+  "name": "xpub-connect",
+  "version": "0.0.2",
+  "main": "src",
+  "author": "Collaborative Knowledge Foundation",
+  "license": "MIT",
+  "files": [
+    "src",
+    "dist"
+  ],
+  "dependencies": {
+    "react": "^15.6.1",
+    "react-dom": "^15.6.1",
+    "react-redux": "^5.0.2",
+    "react-router": "^3.0.5",
+    "react-router-redux": "^4.0.7",
+    "recompose": "^0.25.0",
+    "redux": "^3.6.0"
+  },
+  "peerDependencies": {
+    "react": "^15.6.1",
+    "react-dom": "^15.6.1",
+    "react-redux": "^5.0.2",
+    "react-router": "^3.0.5",
+    "react-router-redux": "^4.0.7",
+    "redux": "^3.6.0"
+  }
+}
diff --git a/packages/component-app/src/components/ConnectPage.js b/packages/xpub-connect/src/components/ConnectPage.js
similarity index 100%
rename from packages/component-app/src/components/ConnectPage.js
rename to packages/xpub-connect/src/components/ConnectPage.js
diff --git a/packages/component-app/src/components/ConnectPage.local.scss b/packages/xpub-connect/src/components/ConnectPage.local.scss
similarity index 100%
rename from packages/component-app/src/components/ConnectPage.local.scss
rename to packages/xpub-connect/src/components/ConnectPage.local.scss
diff --git a/packages/xpub-connect/src/components/index.js b/packages/xpub-connect/src/components/index.js
new file mode 100644
index 000000000..bbadf19f6
--- /dev/null
+++ b/packages/xpub-connect/src/components/index.js
@@ -0,0 +1 @@
+export { default as ConnectPage } from './ConnectPage'
diff --git a/packages/xpub-connect/src/index.js b/packages/xpub-connect/src/index.js
new file mode 100644
index 000000000..cb64ac1b5
--- /dev/null
+++ b/packages/xpub-connect/src/index.js
@@ -0,0 +1 @@
+export * from './components'
diff --git a/packages/xpub-journal/package.json b/packages/xpub-journal/package.json
new file mode 100644
index 000000000..57075f32a
--- /dev/null
+++ b/packages/xpub-journal/package.json
@@ -0,0 +1,22 @@
+{
+  "name": "xpub-journal",
+  "version": "0.0.2",
+  "main": "src",
+  "author": "Collaborative Knowledge Foundation",
+  "license": "MIT",
+  "files": [
+    "src",
+    "dist"
+  ],
+  "dependencies": {
+    "prop-types": "^15.5.10",
+    "react": "^15.6.1",
+    "react-dom": "^15.6.1",
+    "recompose": "^0.25.0"
+  },
+  "peerDependencies": {
+    "prop-types": "^15.5.10",
+    "react": "^15.6.1",
+    "react-dom": "^15.6.1"
+  }
+}
diff --git a/packages/component-app/src/components/JournalProvider.js b/packages/xpub-journal/src/components/JournalProvider.js
similarity index 100%
rename from packages/component-app/src/components/JournalProvider.js
rename to packages/xpub-journal/src/components/JournalProvider.js
diff --git a/packages/xpub-journal/src/components/index.js b/packages/xpub-journal/src/components/index.js
new file mode 100644
index 000000000..2a193d6a1
--- /dev/null
+++ b/packages/xpub-journal/src/components/index.js
@@ -0,0 +1 @@
+export { JournalProvider, withJournal } from './JournalProvider'
diff --git a/packages/xpub-journal/src/index.js b/packages/xpub-journal/src/index.js
new file mode 100644
index 000000000..cb64ac1b5
--- /dev/null
+++ b/packages/xpub-journal/src/index.js
@@ -0,0 +1 @@
+export * from './components'
diff --git a/packages/xpub-styleguide/package.json b/packages/xpub-styleguide/package.json
index cb8c33d2b..9901e4cbc 100644
--- a/packages/xpub-styleguide/package.json
+++ b/packages/xpub-styleguide/package.json
@@ -13,7 +13,6 @@
     "react-redux": "^5.0.2",
     "redux": "^3.6.0",
     "redux-form": "^7.0.3",
-    "pubsweet-component-xpub-app": "^0.0.2"
   },
   "devDependencies": {
     "babel-core": "^6.26.0",
diff --git a/packages/xpub-styleguide/src/components/Wrapper.js b/packages/xpub-styleguide/src/components/Wrapper.js
index ce6c4554c..0df3c25ed 100644
--- a/packages/xpub-styleguide/src/components/Wrapper.js
+++ b/packages/xpub-styleguide/src/components/Wrapper.js
@@ -2,7 +2,7 @@ import React from 'react'
 import { Provider } from 'react-redux'
 import { reducer as formReducer } from 'redux-form'
 import { createStore, combineReducers } from 'redux'
-import { JournalProvider } from 'pubsweet-component-xpub-app/src/components'
+import { JournalProvider } from 'xpub-journal'
 import * as journal from '../config/journal'
 
 import 'xpub-fonts'
diff --git a/packages/xpub-upload/package.json b/packages/xpub-upload/package.json
new file mode 100644
index 000000000..39d8b218f
--- /dev/null
+++ b/packages/xpub-upload/package.json
@@ -0,0 +1,29 @@
+{
+  "name": "xpub-upload",
+  "version": "0.0.2",
+  "main": "src",
+  "author": "Collaborative Knowledge Foundation",
+  "license": "MIT",
+  "files": [
+    "src",
+    "dist"
+  ],
+  "dependencies": {
+    "pubsweet-client": "git+https://gitlab.coko.foundation/pubsweet/pubsweet-client.git",
+    "react": "^15.6.1",
+    "react-dom": "^15.6.1",
+    "react-redux": "^5.0.2",
+    "react-router": "^3.0.5",
+    "react-router-redux": "^4.0.7",
+    "recompose": "^0.25.0",
+    "redux": "^3.6.0"
+  },
+  "peerDependencies": {
+    "react": "^15.6.1",
+    "react-dom": "^15.6.1",
+    "react-redux": "^5.0.2",
+    "react-router": "^3.0.5",
+    "react-router-redux": "^4.0.7",
+    "redux": "^3.6.0"
+  }
+}
diff --git a/packages/xpub-upload/src/components/ConnectPage.js b/packages/xpub-upload/src/components/ConnectPage.js
new file mode 100644
index 000000000..fbfb91e63
--- /dev/null
+++ b/packages/xpub-upload/src/components/ConnectPage.js
@@ -0,0 +1,80 @@
+import React from 'react'
+import { compose } from 'recompose'
+import { connect } from 'react-redux'
+import { withRouter } from 'react-router'
+import classes from './ConnectPage.local.scss'
+
+const ConnectPage = requirements => WrappedComponent => {
+  class ConnectedComponent extends React.Component {
+    state = {
+      fetching: false,
+      complete: false,
+      error: null
+    }
+
+    componentDidMount () {
+      this.fetch(this.props)
+    }
+
+    componentWillReceiveProps (nextProps) {
+      this.fetch(nextProps)
+    }
+
+    fetch ({ isAuthenticated }) {
+      if (!isAuthenticated) {
+        return
+      }
+
+      if (this.state.fetching) {
+        return
+      }
+
+      this.setState({
+        fetching: true,
+        complete: false
+      })
+
+      const requests = requirements(this.props).map(this.props.dispatch)
+
+      Promise.all(requests).then(() => {
+        this.setState({
+          fetching: false,
+          complete: true,
+        })
+      }).catch(error => {
+        console.error(error)
+
+        this.setState({
+          error: error.message
+        })
+
+        throw error // rethrow
+      })
+    }
+
+    render () {
+      const { complete, error } = this.state
+
+      if (error) return (
+        <div className={classes.error}>{error}</div>
+      )
+
+      if (!complete) return (
+        <div className={classes.bar}>loading…</div>
+      )
+
+      return <WrappedComponent {...this.props}/>
+    }
+  }
+
+  return compose(
+    connect(
+      state => ({
+        isAuthenticated: state.currentUser.isAuthenticated
+      })
+    ),
+    withRouter
+  )(ConnectedComponent)
+}
+
+export default ConnectPage
diff --git a/packages/xpub-upload/src/components/ConnectPage.local.scss b/packages/xpub-upload/src/components/ConnectPage.local.scss
new file mode 100644
index 000000000..0b857f692
--- /dev/null
+++ b/packages/xpub-upload/src/components/ConnectPage.local.scss
@@ -0,0 +1,8 @@
+.bar {
+  display: flex;
+  justify-content: center;
+}
+
+.error {
+  color: red;
+}
diff --git a/packages/xpub-upload/src/components/index.js b/packages/xpub-upload/src/components/index.js
new file mode 100644
index 000000000..bbadf19f6
--- /dev/null
+++ b/packages/xpub-upload/src/components/index.js
@@ -0,0 +1 @@
+export { default as ConnectPage } from './ConnectPage'
diff --git a/packages/component-app/src/lib/upload.js b/packages/xpub-upload/src/index.js
similarity index 100%
rename from packages/component-app/src/lib/upload.js
rename to packages/xpub-upload/src/index.js
-- 
GitLab