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