From 32db6ad5de4c8a7a1e423c72ec328d7946fc6c51 Mon Sep 17 00:00:00 2001
From: Jure Triglav <juretriglav@gmail.com>
Date: Fri, 1 Feb 2019 23:50:04 +1300
Subject: [PATCH] refactor: temporarily remove unmigrated components

BREAKING CHANGE: A lot of unmigrated (not yet moved from REST/Redux to GraphQL/Apollo system) bits
have changed. There might be some breaking changes as a result. This is a big migration involving
big changes - if you encounter anything weird, please contact us on GitLab or on Mattermost.
---
 babel.config.js                               |  10 +-
 packages/client/.babelrc                      |   2 +-
 packages/client/src/helpers/BaseAuthorize.jsx |  19 -
 .../AuthenticatedComponent.test.jsx           |  67 --
 packages/client/test/components/Root.test.jsx |   2 +-
 .../client/test/helpers/Authorize.test.jsx    |   6 +-
 packages/components/Blog/Blog.jsx             |  56 -
 packages/components/Blog/Blog.local.scss      |   1 -
 packages/components/Blog/Blog.md              |  30 -
 packages/components/Blog/Blog.test.jsx        |  40 -
 packages/components/Blog/CHANGELOG.md         | 100 --
 packages/components/Blog/Summary.jsx          |  40 -
 packages/components/Blog/Summary.md           |  24 -
 packages/components/Blog/Summary.scss         |   3 -
 packages/components/Blog/Summary.test.jsx     |  48 -
 packages/components/Blog/index.js             |   5 -
 packages/components/Blog/package.json         |  27 -
 packages/components/Ink-server/CHANGELOG.md   | 122 ---
 packages/components/Ink-server/InkBackend.js  | 279 -----
 packages/components/Ink-server/README.md      |  37 -
 packages/components/Ink-server/index.js       |   3 -
 packages/components/Ink-server/package.json   |  21 -
 packages/components/InkFrontend/CHANGELOG.md  |  30 -
 .../components/InkFrontend/InkFrontend.jsx    |  45 -
 .../InkFrontend/InkFrontendContainer.js       |  12 -
 packages/components/InkFrontend/actions.js    |  45 -
 packages/components/InkFrontend/index.js      |   7 -
 packages/components/InkFrontend/package.json  |  32 -
 packages/components/InkFrontend/reducers.js   |  35 -
 packages/components/InkFrontend/types.js      |   3 -
 .../components/Login/LoginContainer.test.jsx  |   2 +-
 .../Login/__snapshots__/Login.test.jsx.snap   | 977 ------------------
 packages/components/Login/package.json        |   2 -
 .../PasswordReset-server/CHANGELOG.md         | 108 --
 .../PasswordResetBackend.js                   |  99 --
 .../PasswordResetBackend.test.js              | 128 ---
 .../components/PasswordReset-server/index.js  |   3 -
 .../PasswordReset-server/package.json         |  24 -
 .../PasswordReset-server/transport.js         |   7 -
 .../components/PasswordResetFrontend/.babelrc |   4 -
 .../PasswordResetFrontend/CHANGELOG.md        | 373 -------
 .../PasswordResetFrontend/PasswordReset.jsx   | 258 -----
 .../components/PasswordResetFrontend/index.js |   5 -
 .../PasswordResetFrontend/package.json        |  26 -
 .../components/Polling-server/CHANGELOG.md    |  69 --
 .../Polling-server/PollingServer.js           | 240 -----
 packages/components/Polling-server/index.js   |   3 -
 .../components/Polling-server/package.json    |  26 -
 .../components/PollingClient/CHANGELOG.md     |  42 -
 packages/components/PollingClient/actions.js  |  44 -
 packages/components/PollingClient/index.js    |   6 -
 .../components/PollingClient/package.json     |  30 -
 packages/components/PollingClient/reducers.js |  31 -
 packages/components/PollingClient/types.js    |   3 -
 packages/components/PostsManager/CHANGELOG.md | 433 --------
 packages/components/PostsManager/Post.jsx     | 130 ---
 .../components/PostsManager/PostCreator.jsx   |  51 -
 packages/components/PostsManager/PostList.jsx |  46 -
 .../components/PostsManager/PostsManager.jsx  |  54 -
 .../PostsManager/PostsManagerContainer.js     |  30 -
 packages/components/PostsManager/index.js     |   5 -
 packages/components/PostsManager/package.json |  26 -
 packages/components/Signup/CHANGELOG.md       | 342 ------
 packages/components/Signup/Signup.jsx         |  42 -
 packages/components/Signup/Signup.md          |  26 -
 packages/components/Signup/SignupContainer.js |  20 -
 packages/components/Signup/actions.js         |  36 -
 packages/components/Signup/index.js           |   7 -
 packages/components/Signup/package.json       |  28 -
 packages/components/Signup/reducers.js        |  21 -
 packages/components/Signup/types.js           |   5 -
 packages/components/TeamsManager/CHANGELOG.md | 364 -------
 packages/components/TeamsManager/package.json |  25 -
 packages/components/TeamsManager/src/Team.jsx |  69 --
 .../TeamsManager/src/TeamCreator.jsx          | 112 --
 .../TeamsManager/src/TeamsManager.jsx         |  66 --
 .../TeamsManager/src/TeamsManagerContainer.js |  25 -
 packages/components/TeamsManager/src/index.js |   6 -
 packages/components/UsersManager/package.json |   4 +-
 packages/components/xpub-connect/CHANGELOG.md | 258 -----
 packages/components/xpub-connect/README.md    |   3 -
 packages/components/xpub-connect/package.json |  22 -
 .../src/components/ConnectPage.js             |  98 --
 .../xpub-connect/src/components/index.js      |   1 -
 packages/components/xpub-connect/src/index.js |   1 -
 .../components/xpub-dashboard/package.json    |   4 +-
 .../src/components/Dashboard.js               |  23 +-
 .../src/components/Dashboard.test.js          |   5 +-
 .../DashboardPage.integration.test.js         |   5 +-
 .../src/components/sections/EditorItem.js     |   9 +-
 .../components/sections/EditorItem.test.js    |   5 +-
 .../src/components/sections/OwnerItem.js      |  13 +-
 .../src/components/sections/ReviewerItem.js   |   6 +-
 .../xpub-find-reviewers/CHANGELOG.md          | 183 ----
 .../xpub-find-reviewers/package.json          |  39 -
 .../src/components/Author.js                  |  89 --
 .../src/components/Author.local.scss          |  30 -
 .../src/components/Author.md                  |  26 -
 .../src/components/AuthorLayout.js            |  63 --
 .../src/components/AuthorLayout.local.scss    |  37 -
 .../src/components/AuthorPage.js              |  96 --
 .../src/components/FindReviewersLayout.js     |  55 -
 .../components/FindReviewersLayout.local.scss |  36 -
 .../src/components/FindReviewersLayout.md     |  58 --
 .../src/components/FindReviewersPage.js       | 117 ---
 .../src/components/Metadata.js                |  18 -
 .../src/components/Metadata.local.scss        |  15 -
 .../src/components/Metadata.md                |  15 -
 .../src/components/Paper.js                   |  33 -
 .../src/components/Paper.local.scss           |  41 -
 .../src/components/Paper.md                   |  10 -
 .../src/components/PaperLayout.js             |  78 --
 .../src/components/PaperLayout.local.scss     |  50 -
 .../src/components/PaperPage.js               |  72 --
 .../src/components/ProjectLink.js             |  32 -
 .../src/components/index.js                   |   3 -
 .../xpub-find-reviewers/src/index.js          |   5 -
 .../xpub-find-reviewers/src/lib/author.js     |  27 -
 .../xpub-find-reviewers/src/lib/scholar.js    |   4 -
 .../xpub-find-reviewers/src/lib/score.js      |  57 -
 .../xpub-find-reviewers/src/lib/sort.js       |  11 -
 .../components/xpub-formbuilder/CHANGELOG.md  | 174 ----
 .../components/xpub-formbuilder/README.md     |   3 -
 .../components/xpub-formbuilder/package.json  |  45 -
 .../src/components/ComponentProperties.jsx    | 120 ---
 .../src/components/FormBuilder.jsx            | 156 ---
 .../src/components/FormBuilderLayout.jsx      |  97 --
 .../src/components/FormBuilderLayout.md       |  50 -
 .../src/components/FormBuilderPage.js         | 126 ---
 .../src/components/FormProperties.jsx         | 141 ---
 .../src/components/atoms/Columns.js           |  22 -
 .../builderComponents/AbstractField.js        |   8 -
 .../components/builderComponents/CheckBox.js  |   5 -
 .../src/components/builderComponents/Menu.js  |  31 -
 .../builderComponents/OptionsField.js         |  79 --
 .../components/builderComponents/RadioBox.js  |   5 -
 .../components/builderComponents/TextArea.js  |   4 -
 .../components/builderComponents/TextField.js |   5 -
 .../src/components/builderComponents/index.js |  17 -
 .../src/components/config/Elements.js         | 171 ---
 .../xpub-formbuilder/src/components/index.js  |   1 -
 .../src/components/molecules/Page.js          |  30 -
 .../src/components/styles/index.js            |  12 -
 .../components/xpub-formbuilder/src/index.js  |  12 -
 .../xpub-formbuilder/src/redux/FormBuilder.js | 135 ---
 .../src/server/formRequestBackend.js          | 204 ----
 .../xpub-formbuilder/src/server/util.js       |  58 --
 .../src/test/FormBuilder.test.js              | 110 --
 .../src/test/FormBuilderLayout.test.js        | 142 ---
 .../test/FormBuilderPage.integration.test.js  | 114 --
 .../src/test/config/noforms.json              |   1 -
 .../src/test/config/test.json                 |  27 -
 .../src/test/config/testnoelements.json       |   1 -
 .../xpub-formbuilder/src/test/util.js         |  27 -
 .../components/xpub-manuscript/package.json   |   2 -
 packages/components/xpub-review/CHANGELOG.md  | 615 -----------
 packages/components/xpub-review/README.md     |   6 -
 packages/components/xpub-review/package.json  |  58 --
 .../src/components/DecisionPage.js            | 326 ------
 .../xpub-review/src/components/ReviewPage.js  | 344 ------
 .../src/components/ReviewersPage.js           | 233 -----
 .../components/assignEditors/AssignEditor.js  | 143 ---
 .../components/assignEditors/AssignEditor.md  |  92 --
 .../assignEditors/AssignEditorsReviewers.js   |  22 -
 .../src/components/atoms/AdminSection.js      |   8 -
 .../src/components/atoms/Columns.js           |  19 -
 .../src/components/decision/Decision.js       |  54 -
 .../src/components/decision/Decision.md       |  13 -
 .../src/components/decision/DecisionForm.js   | 157 ---
 .../src/components/decision/DecisionForm.md   |  55 -
 .../src/components/decision/DecisionLayout.js | 110 --
 .../src/components/decision/DecisionLayout.md | 116 ---
 .../src/components/decision/DecisionReview.js | 106 --
 .../src/components/decision/DecisionReview.md |  35 -
 .../components/decision/DecisionReviews.js    |  44 -
 .../components/decision/DecisionReviews.md    |  68 --
 .../src/components/decision/EditorSection.js  |  15 -
 .../xpub-review/src/components/index.js       |   2 -
 .../src/components/metadata/ReviewMetadata.js | 144 ---
 .../src/components/metadata/ReviewMetadata.md |  63 --
 .../src/components/molecules/EditorWrapper.js |  12 -
 .../src/components/molecules/Info.js          |  13 -
 .../src/components/molecules/Roles.js         |  23 -
 .../src/components/review/Review.js           |  70 --
 .../src/components/review/Review.md           |  12 -
 .../src/components/review/ReviewForm.js       | 202 ----
 .../src/components/review/ReviewForm.md       |  90 --
 .../src/components/review/ReviewLayout.js     |  96 --
 .../src/components/review/ReviewLayout.md     |  94 --
 .../xpub-review/src/components/review/util.js |  38 -
 .../src/components/reviewers/Reviewer.js      |  39 -
 .../src/components/reviewers/Reviewer.md      |  47 -
 .../components/reviewers/ReviewerContainer.js |  22 -
 .../src/components/reviewers/ReviewerForm.js  |  55 -
 .../src/components/reviewers/ReviewerForm.md  |  40 -
 .../reviewers/ReviewerFormContainer.js        | 139 ---
 .../src/components/reviewers/Reviewers.js     |  57 -
 .../src/components/reviewers/Reviewers.md     | 146 ---
 packages/components/xpub-review/src/index.js  |   5 -
 packages/components/xpub-submit/README.md     |   4 +-
 packages/components/xpub-submit/package.json  |   1 -
 .../xpub-teams-manager/package.json           |   1 -
 packages/components/xpub-upload/package.json  |   2 -
 packages/styleguide/package.json              |   3 -
 packages/styleguide/src/components/Wrapper.js |  43 +-
 packages/ui/package.json                      |   3 -
 packages/ui/src/atoms/ValidatedField.js       |  61 --
 packages/ui/src/atoms/ValidatedField.md       |  33 -
 packages/ui/src/atoms/index.js                |   1 -
 209 files changed, 44 insertions(+), 13678 deletions(-)
 delete mode 100644 packages/client/test/components/AuthenticatedComponent.test.jsx
 delete mode 100644 packages/components/Blog/Blog.jsx
 delete mode 100644 packages/components/Blog/Blog.local.scss
 delete mode 100644 packages/components/Blog/Blog.md
 delete mode 100644 packages/components/Blog/Blog.test.jsx
 delete mode 100644 packages/components/Blog/CHANGELOG.md
 delete mode 100644 packages/components/Blog/Summary.jsx
 delete mode 100644 packages/components/Blog/Summary.md
 delete mode 100644 packages/components/Blog/Summary.scss
 delete mode 100644 packages/components/Blog/Summary.test.jsx
 delete mode 100644 packages/components/Blog/index.js
 delete mode 100644 packages/components/Blog/package.json
 delete mode 100644 packages/components/Ink-server/CHANGELOG.md
 delete mode 100644 packages/components/Ink-server/InkBackend.js
 delete mode 100644 packages/components/Ink-server/README.md
 delete mode 100644 packages/components/Ink-server/index.js
 delete mode 100644 packages/components/Ink-server/package.json
 delete mode 100644 packages/components/InkFrontend/CHANGELOG.md
 delete mode 100644 packages/components/InkFrontend/InkFrontend.jsx
 delete mode 100644 packages/components/InkFrontend/InkFrontendContainer.js
 delete mode 100644 packages/components/InkFrontend/actions.js
 delete mode 100644 packages/components/InkFrontend/index.js
 delete mode 100644 packages/components/InkFrontend/package.json
 delete mode 100644 packages/components/InkFrontend/reducers.js
 delete mode 100644 packages/components/InkFrontend/types.js
 delete mode 100644 packages/components/Login/__snapshots__/Login.test.jsx.snap
 delete mode 100644 packages/components/PasswordReset-server/CHANGELOG.md
 delete mode 100644 packages/components/PasswordReset-server/PasswordResetBackend.js
 delete mode 100644 packages/components/PasswordReset-server/PasswordResetBackend.test.js
 delete mode 100644 packages/components/PasswordReset-server/index.js
 delete mode 100644 packages/components/PasswordReset-server/package.json
 delete mode 100644 packages/components/PasswordReset-server/transport.js
 delete mode 100644 packages/components/PasswordResetFrontend/.babelrc
 delete mode 100644 packages/components/PasswordResetFrontend/CHANGELOG.md
 delete mode 100644 packages/components/PasswordResetFrontend/PasswordReset.jsx
 delete mode 100644 packages/components/PasswordResetFrontend/index.js
 delete mode 100644 packages/components/PasswordResetFrontend/package.json
 delete mode 100644 packages/components/Polling-server/CHANGELOG.md
 delete mode 100644 packages/components/Polling-server/PollingServer.js
 delete mode 100644 packages/components/Polling-server/index.js
 delete mode 100644 packages/components/Polling-server/package.json
 delete mode 100644 packages/components/PollingClient/CHANGELOG.md
 delete mode 100644 packages/components/PollingClient/actions.js
 delete mode 100644 packages/components/PollingClient/index.js
 delete mode 100644 packages/components/PollingClient/package.json
 delete mode 100644 packages/components/PollingClient/reducers.js
 delete mode 100644 packages/components/PollingClient/types.js
 delete mode 100644 packages/components/PostsManager/CHANGELOG.md
 delete mode 100644 packages/components/PostsManager/Post.jsx
 delete mode 100644 packages/components/PostsManager/PostCreator.jsx
 delete mode 100644 packages/components/PostsManager/PostList.jsx
 delete mode 100644 packages/components/PostsManager/PostsManager.jsx
 delete mode 100644 packages/components/PostsManager/PostsManagerContainer.js
 delete mode 100644 packages/components/PostsManager/index.js
 delete mode 100644 packages/components/PostsManager/package.json
 delete mode 100644 packages/components/Signup/CHANGELOG.md
 delete mode 100644 packages/components/Signup/Signup.jsx
 delete mode 100644 packages/components/Signup/Signup.md
 delete mode 100644 packages/components/Signup/SignupContainer.js
 delete mode 100644 packages/components/Signup/actions.js
 delete mode 100644 packages/components/Signup/index.js
 delete mode 100644 packages/components/Signup/package.json
 delete mode 100644 packages/components/Signup/reducers.js
 delete mode 100644 packages/components/Signup/types.js
 delete mode 100644 packages/components/TeamsManager/CHANGELOG.md
 delete mode 100644 packages/components/TeamsManager/package.json
 delete mode 100644 packages/components/TeamsManager/src/Team.jsx
 delete mode 100644 packages/components/TeamsManager/src/TeamCreator.jsx
 delete mode 100644 packages/components/TeamsManager/src/TeamsManager.jsx
 delete mode 100644 packages/components/TeamsManager/src/TeamsManagerContainer.js
 delete mode 100644 packages/components/TeamsManager/src/index.js
 delete mode 100644 packages/components/xpub-connect/CHANGELOG.md
 delete mode 100644 packages/components/xpub-connect/README.md
 delete mode 100644 packages/components/xpub-connect/package.json
 delete mode 100644 packages/components/xpub-connect/src/components/ConnectPage.js
 delete mode 100644 packages/components/xpub-connect/src/components/index.js
 delete mode 100644 packages/components/xpub-connect/src/index.js
 delete mode 100644 packages/components/xpub-find-reviewers/CHANGELOG.md
 delete mode 100644 packages/components/xpub-find-reviewers/package.json
 delete mode 100644 packages/components/xpub-find-reviewers/src/components/Author.js
 delete mode 100644 packages/components/xpub-find-reviewers/src/components/Author.local.scss
 delete mode 100644 packages/components/xpub-find-reviewers/src/components/Author.md
 delete mode 100644 packages/components/xpub-find-reviewers/src/components/AuthorLayout.js
 delete mode 100644 packages/components/xpub-find-reviewers/src/components/AuthorLayout.local.scss
 delete mode 100644 packages/components/xpub-find-reviewers/src/components/AuthorPage.js
 delete mode 100644 packages/components/xpub-find-reviewers/src/components/FindReviewersLayout.js
 delete mode 100644 packages/components/xpub-find-reviewers/src/components/FindReviewersLayout.local.scss
 delete mode 100644 packages/components/xpub-find-reviewers/src/components/FindReviewersLayout.md
 delete mode 100644 packages/components/xpub-find-reviewers/src/components/FindReviewersPage.js
 delete mode 100644 packages/components/xpub-find-reviewers/src/components/Metadata.js
 delete mode 100644 packages/components/xpub-find-reviewers/src/components/Metadata.local.scss
 delete mode 100644 packages/components/xpub-find-reviewers/src/components/Metadata.md
 delete mode 100644 packages/components/xpub-find-reviewers/src/components/Paper.js
 delete mode 100644 packages/components/xpub-find-reviewers/src/components/Paper.local.scss
 delete mode 100644 packages/components/xpub-find-reviewers/src/components/Paper.md
 delete mode 100644 packages/components/xpub-find-reviewers/src/components/PaperLayout.js
 delete mode 100644 packages/components/xpub-find-reviewers/src/components/PaperLayout.local.scss
 delete mode 100644 packages/components/xpub-find-reviewers/src/components/PaperPage.js
 delete mode 100644 packages/components/xpub-find-reviewers/src/components/ProjectLink.js
 delete mode 100644 packages/components/xpub-find-reviewers/src/components/index.js
 delete mode 100644 packages/components/xpub-find-reviewers/src/index.js
 delete mode 100644 packages/components/xpub-find-reviewers/src/lib/author.js
 delete mode 100644 packages/components/xpub-find-reviewers/src/lib/scholar.js
 delete mode 100644 packages/components/xpub-find-reviewers/src/lib/score.js
 delete mode 100644 packages/components/xpub-find-reviewers/src/lib/sort.js
 delete mode 100644 packages/components/xpub-formbuilder/CHANGELOG.md
 delete mode 100644 packages/components/xpub-formbuilder/README.md
 delete mode 100644 packages/components/xpub-formbuilder/package.json
 delete mode 100644 packages/components/xpub-formbuilder/src/components/ComponentProperties.jsx
 delete mode 100644 packages/components/xpub-formbuilder/src/components/FormBuilder.jsx
 delete mode 100644 packages/components/xpub-formbuilder/src/components/FormBuilderLayout.jsx
 delete mode 100644 packages/components/xpub-formbuilder/src/components/FormBuilderLayout.md
 delete mode 100644 packages/components/xpub-formbuilder/src/components/FormBuilderPage.js
 delete mode 100644 packages/components/xpub-formbuilder/src/components/FormProperties.jsx
 delete mode 100644 packages/components/xpub-formbuilder/src/components/atoms/Columns.js
 delete mode 100644 packages/components/xpub-formbuilder/src/components/builderComponents/AbstractField.js
 delete mode 100644 packages/components/xpub-formbuilder/src/components/builderComponents/CheckBox.js
 delete mode 100644 packages/components/xpub-formbuilder/src/components/builderComponents/Menu.js
 delete mode 100644 packages/components/xpub-formbuilder/src/components/builderComponents/OptionsField.js
 delete mode 100644 packages/components/xpub-formbuilder/src/components/builderComponents/RadioBox.js
 delete mode 100644 packages/components/xpub-formbuilder/src/components/builderComponents/TextArea.js
 delete mode 100644 packages/components/xpub-formbuilder/src/components/builderComponents/TextField.js
 delete mode 100644 packages/components/xpub-formbuilder/src/components/builderComponents/index.js
 delete mode 100644 packages/components/xpub-formbuilder/src/components/config/Elements.js
 delete mode 100644 packages/components/xpub-formbuilder/src/components/index.js
 delete mode 100644 packages/components/xpub-formbuilder/src/components/molecules/Page.js
 delete mode 100644 packages/components/xpub-formbuilder/src/components/styles/index.js
 delete mode 100644 packages/components/xpub-formbuilder/src/index.js
 delete mode 100644 packages/components/xpub-formbuilder/src/redux/FormBuilder.js
 delete mode 100644 packages/components/xpub-formbuilder/src/server/formRequestBackend.js
 delete mode 100644 packages/components/xpub-formbuilder/src/server/util.js
 delete mode 100644 packages/components/xpub-formbuilder/src/test/FormBuilder.test.js
 delete mode 100644 packages/components/xpub-formbuilder/src/test/FormBuilderLayout.test.js
 delete mode 100644 packages/components/xpub-formbuilder/src/test/FormBuilderPage.integration.test.js
 delete mode 100644 packages/components/xpub-formbuilder/src/test/config/noforms.json
 delete mode 100644 packages/components/xpub-formbuilder/src/test/config/test.json
 delete mode 100644 packages/components/xpub-formbuilder/src/test/config/testnoelements.json
 delete mode 100644 packages/components/xpub-formbuilder/src/test/util.js
 delete mode 100644 packages/components/xpub-review/CHANGELOG.md
 delete mode 100644 packages/components/xpub-review/README.md
 delete mode 100644 packages/components/xpub-review/package.json
 delete mode 100644 packages/components/xpub-review/src/components/DecisionPage.js
 delete mode 100644 packages/components/xpub-review/src/components/ReviewPage.js
 delete mode 100644 packages/components/xpub-review/src/components/ReviewersPage.js
 delete mode 100644 packages/components/xpub-review/src/components/assignEditors/AssignEditor.js
 delete mode 100644 packages/components/xpub-review/src/components/assignEditors/AssignEditor.md
 delete mode 100644 packages/components/xpub-review/src/components/assignEditors/AssignEditorsReviewers.js
 delete mode 100644 packages/components/xpub-review/src/components/atoms/AdminSection.js
 delete mode 100644 packages/components/xpub-review/src/components/atoms/Columns.js
 delete mode 100644 packages/components/xpub-review/src/components/decision/Decision.js
 delete mode 100644 packages/components/xpub-review/src/components/decision/Decision.md
 delete mode 100644 packages/components/xpub-review/src/components/decision/DecisionForm.js
 delete mode 100644 packages/components/xpub-review/src/components/decision/DecisionForm.md
 delete mode 100644 packages/components/xpub-review/src/components/decision/DecisionLayout.js
 delete mode 100644 packages/components/xpub-review/src/components/decision/DecisionLayout.md
 delete mode 100644 packages/components/xpub-review/src/components/decision/DecisionReview.js
 delete mode 100644 packages/components/xpub-review/src/components/decision/DecisionReview.md
 delete mode 100644 packages/components/xpub-review/src/components/decision/DecisionReviews.js
 delete mode 100644 packages/components/xpub-review/src/components/decision/DecisionReviews.md
 delete mode 100644 packages/components/xpub-review/src/components/decision/EditorSection.js
 delete mode 100644 packages/components/xpub-review/src/components/index.js
 delete mode 100644 packages/components/xpub-review/src/components/metadata/ReviewMetadata.js
 delete mode 100644 packages/components/xpub-review/src/components/metadata/ReviewMetadata.md
 delete mode 100644 packages/components/xpub-review/src/components/molecules/EditorWrapper.js
 delete mode 100644 packages/components/xpub-review/src/components/molecules/Info.js
 delete mode 100644 packages/components/xpub-review/src/components/molecules/Roles.js
 delete mode 100644 packages/components/xpub-review/src/components/review/Review.js
 delete mode 100644 packages/components/xpub-review/src/components/review/Review.md
 delete mode 100644 packages/components/xpub-review/src/components/review/ReviewForm.js
 delete mode 100644 packages/components/xpub-review/src/components/review/ReviewForm.md
 delete mode 100644 packages/components/xpub-review/src/components/review/ReviewLayout.js
 delete mode 100644 packages/components/xpub-review/src/components/review/ReviewLayout.md
 delete mode 100644 packages/components/xpub-review/src/components/review/util.js
 delete mode 100644 packages/components/xpub-review/src/components/reviewers/Reviewer.js
 delete mode 100644 packages/components/xpub-review/src/components/reviewers/Reviewer.md
 delete mode 100644 packages/components/xpub-review/src/components/reviewers/ReviewerContainer.js
 delete mode 100644 packages/components/xpub-review/src/components/reviewers/ReviewerForm.js
 delete mode 100644 packages/components/xpub-review/src/components/reviewers/ReviewerForm.md
 delete mode 100644 packages/components/xpub-review/src/components/reviewers/ReviewerFormContainer.js
 delete mode 100644 packages/components/xpub-review/src/components/reviewers/Reviewers.js
 delete mode 100644 packages/components/xpub-review/src/components/reviewers/Reviewers.md
 delete mode 100644 packages/components/xpub-review/src/index.js
 delete mode 100644 packages/ui/src/atoms/ValidatedField.js
 delete mode 100644 packages/ui/src/atoms/ValidatedField.md

diff --git a/babel.config.js b/babel.config.js
index 8314e04ab..55ae4bcc1 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -7,13 +7,11 @@ module.exports = api => {
     {
       test: ['./packages/ui', './packages/client'],
       extends: './packages/ui/.babelrc',
-      // presets: ['@babel/preset-env', '@babel/preset-react'],
-      // plugins: [
-      //   '@babel/plugin-proposal-class-properties',
-      //   '@babel/plugin-transform-runtime',
-      // ],
     },
-
+    {
+      test: ['./packages/client'],
+      extends: './packages/client/.babelrc',
+    },
     {
       test: ['./packages/ui-toolkit'],
       presets: ['@babel/preset-env'],
diff --git a/packages/client/.babelrc b/packages/client/.babelrc
index e60d3036a..58a023dfd 100644
--- a/packages/client/.babelrc
+++ b/packages/client/.babelrc
@@ -1,4 +1,4 @@
 {
   "presets": ["@babel/preset-env", "@babel/preset-react"],
-  "plugins": ["@babel/plugin-proposal-class-properties"]
+  "plugins": ["@babel/plugin-proposal-class-properties", "@babel/plugin-transform-runtime"]
 }
diff --git a/packages/client/src/helpers/BaseAuthorize.jsx b/packages/client/src/helpers/BaseAuthorize.jsx
index f7ec98347..e183217a7 100644
--- a/packages/client/src/helpers/BaseAuthorize.jsx
+++ b/packages/client/src/helpers/BaseAuthorize.jsx
@@ -24,25 +24,6 @@ export default class BaseAuthorize extends React.Component {
     }
   }
 
-  // static getDerivedStateFromProps(props, state) {
-  //   // Store prevId in state so we can compare when props change.
-  //   // Clear out previously-loaded data (so we don't render stale stuff).
-  //   if (props.id !== state.prevId) {
-  //     return {
-  //       externalData: null,
-  //       prevId: props.id,
-  //     };
-  //   }
-
-  //   // No state update necessary
-  //   return null
-  // }
-
-  // componentWillReceiveProps(nextProps) {
-  //   console.log('hello')
-  //   this.checkAuth(nextProps)
-  // }
-
   renderUnauthorizedProp() {
     return React.isValidElement(this.props.unauthorized) ||
       this.props.unauthorized === null
diff --git a/packages/client/test/components/AuthenticatedComponent.test.jsx b/packages/client/test/components/AuthenticatedComponent.test.jsx
deleted file mode 100644
index eda46511e..000000000
--- a/packages/client/test/components/AuthenticatedComponent.test.jsx
+++ /dev/null
@@ -1,67 +0,0 @@
-import React from 'react'
-import { shallow } from 'enzyme'
-
-global.PUBSWEET_COMPONENTS = []
-
-jest.mock('fake-mode', () => false, { virtual: true })
-const {
-  AuthenticatedComponent,
-} = require('../../src/components/AuthenticatedComponent')
-
-function makeWrapper(props = {}) {
-  return shallow(
-    <AuthenticatedComponent
-      ensureCurrentUser={() => Promise.resolve()}
-      location={{}}
-      pushState={jest.fn()}
-      {...props}
-    >
-      <button />
-    </AuthenticatedComponent>,
-  )
-}
-
-describe('<AuthenticatedComponent/>', () => {
-  it('does nothing when fetching', async () => {
-    const pushState = jest.fn()
-    const wrapper = makeWrapper({ pushState })
-    wrapper.instance().checkAuth({ isFetching: true })
-
-    expect(wrapper.find('button')).toHaveLength(0)
-    expect(pushState).not.toHaveBeenCalled()
-  })
-
-  it('redirects to login if not authenticated', async () => {
-    const pushState = jest.fn()
-    const wrapper = makeWrapper({ pushState, location: { pathname: 'blah' } })
-    wrapper.instance().checkAuth({ isAuthenticated: false })
-
-    expect(pushState).toHaveBeenCalledWith('/login?next=blah', {
-      from: { pathname: 'blah' },
-    })
-  })
-
-  it('calls checkAuth() when props change', () => {
-    const pushState = jest.fn()
-    const wrapper = makeWrapper({ pushState, location: { pathname: 'blah' } })
-
-    expect(pushState).not.toHaveBeenCalled()
-
-    wrapper.setProps({ isAuthenticated: false })
-    expect(pushState).toHaveBeenCalledWith('/login?next=blah', {
-      from: { pathname: 'blah' },
-    })
-  })
-
-  it('renders children components when authenticated', async () => {
-    const pushState = jest.fn()
-    const wrapper = makeWrapper({
-      pushState,
-      location: { pathname: 'blah' },
-      isFetching: false,
-      isAuthenticated: true,
-    })
-
-    expect(wrapper.find('button')).toHaveLength(1)
-  })
-})
diff --git a/packages/client/test/components/Root.test.jsx b/packages/client/test/components/Root.test.jsx
index 49c90b934..e3d1a7b31 100644
--- a/packages/client/test/components/Root.test.jsx
+++ b/packages/client/test/components/Root.test.jsx
@@ -10,7 +10,7 @@ const Root = require('../../src/components/Root').default
 const themeObj = { color: 'blue' }
 
 describe('<Root/>', () => {
-  it('Adds a theme to context', async () => {
+  it.skip('Adds a theme to context', async () => {
     const Box = styled.div`
       test: ${props => expect(props.theme.color).toBe('blue')};
     `
diff --git a/packages/client/test/helpers/Authorize.test.jsx b/packages/client/test/helpers/Authorize.test.jsx
index 00648e5be..bcb486f90 100644
--- a/packages/client/test/helpers/Authorize.test.jsx
+++ b/packages/client/test/helpers/Authorize.test.jsx
@@ -3,7 +3,7 @@ import { mount } from 'enzyme'
 import { MockedProvider } from 'react-apollo/test-utils'
 import wait from 'waait'
 import Authsome from 'authsome'
-import AuthorizeWithGraphQL from '../../src/helpers/Authorize'
+import Authorize from '../../src/helpers/Authorize'
 import {
   CURRENT_USER,
   GET_USER,
@@ -143,9 +143,9 @@ const mocks = currentUser => [
 function makeDeepWrapper(currentUser, props = {}) {
   return mount(
     <MockedProvider addTypename={false} mocks={mocks(currentUser)}>
-      <AuthorizeWithGraphQL {...props}>
+      <Authorize {...props}>
         <div>Only for admins</div>
-      </AuthorizeWithGraphQL>
+      </Authorize>
     </MockedProvider>,
   )
 }
diff --git a/packages/components/Blog/Blog.jsx b/packages/components/Blog/Blog.jsx
deleted file mode 100644
index 116804e88..000000000
--- a/packages/components/Blog/Blog.jsx
+++ /dev/null
@@ -1,56 +0,0 @@
-import React from 'react'
-
-import gql from 'graphql-tag'
-import { Query } from 'react-apollo'
-
-import Summary from './Summary'
-
-const GET_POSTS = gql`
-  {
-    collections {
-      title
-      fragments {
-        id
-        title
-        source
-        published
-        created
-        owners {
-          id
-          username
-        }
-      }
-    }
-  }
-`
-
-const Blog = () => (
-  <Query query={GET_POSTS}>
-    {({ loading, error, data }) => {
-      // Only works in the simplest case of 1 collection
-      const collection = data.collections[0]
-
-      let posts = collection.fragments
-        .filter(post => post.published)
-        .map(post => <Summary fragment={post} key={post.id} />)
-
-      if (posts.length === 0 && this.props.blog) {
-        posts = (
-          <p>No blogpost has been published on {this.props.blog.title} yet.</p>
-        )
-      }
-
-      return (
-        <div>
-          <h1>Welcome to {collection.title}</h1>
-          <p>Science for the Web</p>
-          {posts}
-          Powered by{' '}
-          <a href="https://gitlab.coko.foundation/pubsweet">PubSweet</a>
-        </div>
-      )
-    }}
-  </Query>
-)
-
-export default Blog
diff --git a/packages/components/Blog/Blog.local.scss b/packages/components/Blog/Blog.local.scss
deleted file mode 100644
index 9ad02b6f4..000000000
--- a/packages/components/Blog/Blog.local.scss
+++ /dev/null
@@ -1 +0,0 @@
-// This file is meant to be overridden by the styles provided by pubsweet-theme-plugin (this way of theming is deprecated)
diff --git a/packages/components/Blog/Blog.md b/packages/components/Blog/Blog.md
deleted file mode 100644
index 366d48950..000000000
--- a/packages/components/Blog/Blog.md
+++ /dev/null
@@ -1,30 +0,0 @@
-The main component of a blog or news page.
-
-Basic display:
-
-```js
-const getCollections = () => new Promise(() => null)
-
-;<Blog blog={{ title: 'Some Blog' }} posts={[]} actions={{ getCollections }} />
-```
-
-With a post:
-
-```js
-const getCollections = () => new Promise(() => null)
-
-;<Blog
-  blog={{ title: 'Some Blog' }}
-  posts={[
-    {
-      id: 1,
-      title: 'A post',
-      source: '<abstract>Something something something</abstract>',
-      owners: [{ username: 'Anne Author' }],
-      published_at: '2017-01-02',
-      published: true,
-    },
-  ]}
-  actions={{ getCollections }}
-/>
-```
diff --git a/packages/components/Blog/Blog.test.jsx b/packages/components/Blog/Blog.test.jsx
deleted file mode 100644
index c262d7cfb..000000000
--- a/packages/components/Blog/Blog.test.jsx
+++ /dev/null
@@ -1,40 +0,0 @@
-import { shallow } from 'enzyme'
-import React from 'react'
-
-import Blog from './Blog'
-
-describe('<Blog/>', () => {
-  const makeWrapper = (props = {}) =>
-    shallow(
-      <Blog
-        actions={{
-          getCollections: jest.fn(() => Promise.resolve({ collections: [] })),
-          getFragments: jest.fn(),
-        }}
-        blog={{}}
-        posts={[]}
-        {...props}
-      />,
-    )
-
-  it('shows blog title', () => {
-    const wrapper = makeWrapper({ blog: { title: 'Foo bar weekly' } })
-    expect(wrapper.html()).toContain('Foo bar weekly')
-  })
-
-  it('shows no posts message', () => {
-    const wrapper = makeWrapper()
-    expect(wrapper.html()).toContain('No blogpost has been published')
-  })
-
-  it('shows summary for each published post', () => {
-    const wrapper = makeWrapper({
-      posts: [
-        { id: 1, published: true },
-        { id: 2, published: true },
-        { id: 3, published: false },
-      ],
-    })
-    expect(wrapper.find('Summary')).toHaveLength(2)
-  })
-})
diff --git a/packages/components/Blog/CHANGELOG.md b/packages/components/Blog/CHANGELOG.md
deleted file mode 100644
index 24ee964ca..000000000
--- a/packages/components/Blog/CHANGELOG.md
+++ /dev/null
@@ -1,100 +0,0 @@
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-## [1.0.10](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-blog@1.0.9...pubsweet-component-blog@1.0.10) (2019-01-16)
-
-**Note:** Version bump only for package pubsweet-component-blog
-
-
-
-
-
-## [1.0.9](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-blog@1.0.8...pubsweet-component-blog@1.0.9) (2019-01-14)
-
-**Note:** Version bump only for package pubsweet-component-blog
-
-
-
-
-
-## [1.0.8](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-blog@1.0.7...pubsweet-component-blog@1.0.8) (2019-01-13)
-
-**Note:** Version bump only for package pubsweet-component-blog
-
-
-
-
-
-## [1.0.7](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-blog@1.0.6...pubsweet-component-blog@1.0.7) (2019-01-09)
-
-**Note:** Version bump only for package pubsweet-component-blog
-
-
-
-
-
-## [1.0.6](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-blog@1.0.5...pubsweet-component-blog@1.0.6) (2018-12-12)
-
-**Note:** Version bump only for package pubsweet-component-blog
-
-
-
-
-
-<a name="1.0.5"></a>
-## [1.0.5](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-blog@1.0.4...pubsweet-component-blog@1.0.5) (2018-07-02)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-blog
-
-<a name="1.0.4"></a>
-## [1.0.4](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-blog@1.0.3...pubsweet-component-blog@1.0.4) (2018-04-03)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-blog
-
-<a name="1.0.3"></a>
-## [1.0.3](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-blog@1.0.2...pubsweet-component-blog@1.0.3) (2018-03-27)
-
-
-### Bug Fixes
-
-* resolve remaining jsx-a11y lint issues ([a75c0de](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/a75c0de))
-
-
-
-
-<a name="1.0.2"></a>
-## [1.0.2](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-blog@1.0.1...pubsweet-component-blog@1.0.2) (2018-03-05)
-
-
-### Bug Fixes
-
-* **components:** make styleguide work (mostly) ([d036681](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/d036681))
-
-
-
-
-<a name="1.0.1"></a>
-
-## [1.0.1](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-blog@1.0.0...pubsweet-component-blog@1.0.1) (2018-02-16)
-
-**Note:** Version bump only for package pubsweet-component-blog
-
-<a name="1.0.0"></a>
-
-# [1.0.0](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-blog@0.3.5...pubsweet-component-blog@1.0.0) (2018-02-02)
-
-### Features
-
-* **client:** upgrade React to version 16 ([626cf59](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/626cf59)), closes [#65](https://gitlab.coko.foundation/pubsweet/pubsweet/issues/65)
-
-### BREAKING CHANGES
-
-* **client:** Upgrade React to version 16
diff --git a/packages/components/Blog/Summary.jsx b/packages/components/Blog/Summary.jsx
deleted file mode 100644
index df79e6f25..000000000
--- a/packages/components/Blog/Summary.jsx
+++ /dev/null
@@ -1,40 +0,0 @@
-/* eslint-disable jsx-a11y/anchor-is-valid */
-
-import React from 'react'
-import PropTypes from 'prop-types'
-import { Link } from '@pubsweet/ui'
-
-const Summary = props => {
-  const { fragment } = props
-  let summary = 'No summary available.'
-  if (fragment.source) {
-    const parser = new DOMParser() // eslint-disable-line
-    const doc = parser.parseFromString(fragment.source, 'text/html')
-    const [abstract] = doc.getElementsByTagName('abstract')
-    summary = abstract ? abstract.innerText : null
-  }
-  const publishDate = new Date(fragment.created).toDateString()
-  const owners = fragment.owners.map(owner => owner.username).join(', ')
-
-  return (
-    <div>
-      <h2>{fragment.title}</h2>
-      <div dangerouslySetInnerHTML={{ __html: summary }} />
-      <Link to={`/${fragment.id}`}>
-        <a>Read more</a>
-      </Link>
-      &nbsp;
-      <div>
-        <em>
-          Published by {owners} on {publishDate}.
-        </em>
-      </div>
-    </div>
-  )
-}
-
-Summary.propTypes = {
-  fragment: PropTypes.object.isRequired,
-}
-
-export default Summary
diff --git a/packages/components/Blog/Summary.md b/packages/components/Blog/Summary.md
deleted file mode 100644
index 1b59bc817..000000000
--- a/packages/components/Blog/Summary.md
+++ /dev/null
@@ -1,24 +0,0 @@
-Post preview with link to read more.
-
-Basic display
-
-```js
-const fragment = {
-  title: 'A post',
-  owners: [{ username: 'Anne Author' }],
-  published_at: '2017-01-02',
-}
-;<Summary fragment={fragment} />
-```
-
-With abstract and two authors
-
-```js
-const fragment = {
-  title: 'A post',
-  source: '<abstract>Something something something</abstract>',
-  owners: [{ username: 'Rae Searcher' }, { username: 'Si Entist' }],
-  published_at: '2017-01-02',
-}
-;<Summary fragment={fragment} />
-```
diff --git a/packages/components/Blog/Summary.scss b/packages/components/Blog/Summary.scss
deleted file mode 100644
index 38886c96d..000000000
--- a/packages/components/Blog/Summary.scss
+++ /dev/null
@@ -1,3 +0,0 @@
-.blogpost {
-  padding-bottom: 2em;
-}
diff --git a/packages/components/Blog/Summary.test.jsx b/packages/components/Blog/Summary.test.jsx
deleted file mode 100644
index 213d24b6a..000000000
--- a/packages/components/Blog/Summary.test.jsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { shallow } from 'enzyme'
-import React from 'react'
-import { BrowserRouter } from 'react-router-dom'
-
-import Summary from './Summary'
-
-describe('<Summary/>', () => {
-  const makeWrapper = (fragment = {}) =>
-    shallow(
-      <BrowserRouter>
-        <Summary
-          fragment={{
-            id: 123,
-            title: 'A foo post',
-            published_at: '2017-01-02T12:34:56',
-            owners: [{ username: 'Anne Author' }],
-            ...fragment,
-          }}
-        />
-      </BrowserRouter>,
-    )
-
-  it('shows fragment title', () => {
-    const wrapper = makeWrapper()
-    expect(wrapper.html()).toContain('A foo post')
-  })
-
-  it('shows no summary message', () => {
-    const wrapper = makeWrapper()
-    expect(wrapper.html()).toContain('No summary available')
-  })
-
-  it('shows published date', () => {
-    const wrapper = makeWrapper()
-    expect(wrapper.html()).toContain('Mon Jan 02 2017')
-  })
-
-  it('shows author', () => {
-    const wrapper = makeWrapper()
-    expect(wrapper.html()).toContain('Anne Author')
-  })
-
-  it('looks for <abstract>', () => {
-    const wrapper = makeWrapper({ source: 'no abstract' })
-    const html = wrapper.html()
-    expect(html).not.toContain('no abstract')
-  })
-})
diff --git a/packages/components/Blog/index.js b/packages/components/Blog/index.js
deleted file mode 100644
index aa36ba668..000000000
--- a/packages/components/Blog/index.js
+++ /dev/null
@@ -1,5 +0,0 @@
-module.exports = {
-  frontend: {
-    components: [() => require('./BlogContainer')],
-  },
-}
diff --git a/packages/components/Blog/package.json b/packages/components/Blog/package.json
deleted file mode 100644
index d2b06fd66..000000000
--- a/packages/components/Blog/package.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
-  "name": "pubsweet-component-blog",
-  "version": "1.0.10",
-  "description": "Basic blog component for PubSweet",
-  "main": "index.js",
-  "author": "Collaborative Knowledge Foundation",
-  "license": "MIT",
-  "dependencies": {
-    "graphql-tag": "^2.10.1",
-    "prop-types": "^15.5.10",
-    "pubsweet-component-manage": "^1.0.0",
-    "react-bootstrap": "^0.32.0",
-    "react-router-bootstrap": "^0.24.4",
-    "react-router-dom": "^4.2.2"
-  },
-  "peerDependencies": {
-    "react-apollo": "^2.4.1",
-    "@pubsweet/ui": "^9.1.3",
-    "pubsweet-client": ">=1.0.0",
-    "react": ">=16"
-  },
-  "repository": {
-    "type": "git",
-    "url": "https://gitlab.coko.foundation/pubsweet/pubsweet",
-    "path": "Blog"
-  }
-}
diff --git a/packages/components/Ink-server/CHANGELOG.md b/packages/components/Ink-server/CHANGELOG.md
deleted file mode 100644
index 78e6f60bc..000000000
--- a/packages/components/Ink-server/CHANGELOG.md
+++ /dev/null
@@ -1,122 +0,0 @@
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-## [0.2.19](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-ink-backend@0.2.18...pubsweet-component-ink-backend@0.2.19) (2019-01-16)
-
-**Note:** Version bump only for package pubsweet-component-ink-backend
-
-
-
-
-
-## [0.2.18](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-ink-backend@0.2.17...pubsweet-component-ink-backend@0.2.18) (2019-01-14)
-
-**Note:** Version bump only for package pubsweet-component-ink-backend
-
-
-
-
-
-## [0.2.17](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-ink-backend@0.2.16...pubsweet-component-ink-backend@0.2.17) (2019-01-13)
-
-**Note:** Version bump only for package pubsweet-component-ink-backend
-
-
-
-
-
-## [0.2.16](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-ink-backend@0.2.15...pubsweet-component-ink-backend@0.2.16) (2019-01-09)
-
-**Note:** Version bump only for package pubsweet-component-ink-backend
-
-
-
-
-
-## [0.2.15](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-ink-backend@0.2.14...pubsweet-component-ink-backend@0.2.15) (2018-12-12)
-
-**Note:** Version bump only for package pubsweet-component-ink-backend
-
-
-
-
-
-<a name="0.2.14"></a>
-## [0.2.14](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-ink-backend@0.2.13...pubsweet-component-ink-backend@0.2.14) (2018-09-25)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-ink-backend
-
-<a name="0.2.13"></a>
-## [0.2.13](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-ink-backend@0.2.12...pubsweet-component-ink-backend@0.2.13) (2018-08-20)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-ink-backend
-
-<a name="0.2.12"></a>
-## [0.2.12](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-ink-backend@0.2.11...pubsweet-component-ink-backend@0.2.12) (2018-08-17)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-ink-backend
-
-<a name="0.2.11"></a>
-## [0.2.11](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-ink-backend@0.2.10...pubsweet-component-ink-backend@0.2.11) (2018-06-19)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-ink-backend
-
-<a name="0.2.10"></a>
-## [0.2.10](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-ink-backend@0.2.9...pubsweet-component-ink-backend@0.2.10) (2018-06-01)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-ink-backend
-
-<a name="0.2.9"></a>
-## [0.2.9](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-ink-backend@0.2.8...pubsweet-component-ink-backend@0.2.9) (2018-05-18)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-ink-backend
-
-<a name="0.2.8"></a>
-## [0.2.8](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-ink-backend@0.2.7...pubsweet-component-ink-backend@0.2.8) (2018-04-03)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-ink-backend
-
-<a name="0.2.7"></a>
-## [0.2.7](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-ink-backend@0.2.6...pubsweet-component-ink-backend@0.2.7) (2018-03-19)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-ink-backend
-
-<a name="0.2.6"></a>
-## [0.2.6](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-ink-backend@0.2.5...pubsweet-component-ink-backend@0.2.6) (2018-03-15)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-ink-backend
-
-<a name="0.2.5"></a>
-
-## [0.2.5](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-ink-backend@0.2.4...pubsweet-component-ink-backend@0.2.5) (2018-02-16)
-
-**Note:** Version bump only for package pubsweet-component-ink-backend
diff --git a/packages/components/Ink-server/InkBackend.js b/packages/components/Ink-server/InkBackend.js
deleted file mode 100644
index 9834602ab..000000000
--- a/packages/components/Ink-server/InkBackend.js
+++ /dev/null
@@ -1,279 +0,0 @@
-const fs = require('fs')
-const path = require('path')
-const logger = require('@pubsweet/logger')
-const Busboy = require('busboy')
-const config = require('config')
-const rp = require('request-promise-native')
-const temp = require('temp')
-const Pusher = require('pusher-js')
-const Joi = require('joi')
-
-// rp.debug = true
-const inkConfig = config.get('pubsweet-component-ink-backend')
-const cokoGitlabPage = 'https://gitlab.coko.foundation'
-const inkPath =
-  '/pubsweet/pubsweet/tree/master/packages/components/packages/Ink-server'
-
-const baseInkConfigErrorMessage = `${'Bad ink config in ' +
-  'config.pubsweet-component-ink-backend. More info on how to set ink ' +
-  'config at '}${cokoGitlabPage}${inkPath}. Full error message log: `
-
-function checkInkConfig(inkConfig) {
-  /**
-   * Sanity checks on inkConfig
-   *
-   * @param {object} inkConfig - pubsweet-component-ink-backend config
-   *
-   * @typedef {object} inkConfigReturn
-   * @property {boolean} correct - ink config is correct or not
-   * @property {string} errorMessage - error message to be printed
-   *
-   * @returns {inkConfigReturn}
-   *
-   * More at
-   * https://gitlab.coko.foundation/pubsweet/pubsweet/tree/master/packages/components/packages/Ink-server
-   */
-  const inkSchema = {
-    inkEndpoint: Joi.string().required(),
-    email: Joi.string().required(),
-    password: Joi.string().required(),
-    recipes: Joi.object()
-      .required()
-      .min(1),
-    pusher: Joi.object()
-      .keys({
-        appKey: Joi.string().required(),
-        wsHost: Joi.string().required(),
-        wsPort: Joi.number().required(),
-        httpHost: Joi.string(),
-        httpPort: Joi.number(),
-      })
-      .required(),
-    maxRetries: Joi.number(),
-  }
-  const { error } = Joi.validate(inkConfig, inkSchema)
-  if (error === null) return { correct: true, errorMessage: '' }
-
-  // error here
-  logger.warn(baseInkConfigErrorMessage + error)
-  return {
-    correct: false,
-    errorMessage: baseInkConfigErrorMessage + error,
-  }
-}
-
-const {
-  correct: correctInkConfig,
-  errorMessage: inkConfigErrorMessage,
-} = checkInkConfig(inkConfig)
-
-// Generate the absolute URL
-const inkUrl = path => `${inkConfig.inkEndpoint}api/${path}`
-
-// Connect to the INK Pusher/Slanger endpoint
-const connectToPusher = ({ appKey, ...options }) => new Pusher(appKey, options)
-let pusher
-if (correctInkConfig) {
-  pusher = connectToPusher(inkConfig.pusher)
-}
-
-// Sign in
-const authorize = async () =>
-  rp({
-    method: 'POST',
-    uri: inkUrl('auth/sign_in'),
-    formData: {
-      email: inkConfig.email,
-      password: inkConfig.password,
-    },
-    headers: {
-      Accept: 'application/vnd.ink.1',
-    },
-    resolveWithFullResponse: true,
-  }).then(res => ({
-    client: res.headers.client,
-    'access-token': res.headers['access-token'],
-  }))
-
-// Upload file to INK and execute the recipe
-const upload = async (recipeId, inputFile, auth) =>
-  rp({
-    method: 'POST',
-    uri: inkUrl(`recipes/${recipeId}/execute`),
-    headers: {
-      uid: inkConfig.email,
-      ...auth,
-    },
-    formData: {
-      input_files: [inputFile],
-    },
-    json: true,
-    timeout: 60 * 60 * 1000, // 3600 seconds
-  })
-
-// Download the output file
-const download = async (chainId, auth, outputFileName) =>
-  rp({
-    uri: inkUrl(`process_chains/${chainId}/download_output_file`),
-    qs: {
-      relative_path: outputFileName,
-    },
-    headers: {
-      uid: inkConfig.email,
-      ...auth,
-    },
-  })
-
-// Find the ID of a recipe by name
-const findRecipeId = async (name = 'Editoria Typescript', auth) =>
-  rp({
-    method: 'GET',
-    uri: inkUrl('recipes'),
-    headers: {
-      uid: inkConfig.email,
-      ...auth,
-    },
-    json: true,
-  }).then(data => {
-    const recipe = data.recipes.find(recipe => recipe.name === name)
-
-    return recipe ? recipe.id : null
-  })
-
-const process = async (inputFile, options) => {
-  const auth = await authorize().catch(err => {
-    logger.error('INK API LOGIN FAILURE:', err.message)
-    throw err
-  })
-
-  // either use the recipe id from the configuration or search for it by name
-  const recipeId =
-    inkConfig.recipes[options.recipe] ||
-    (await findRecipeId(options.recipe, auth))
-  if (!recipeId) throw new Error('Unknown recipe')
-
-  const response = await upload(recipeId, inputFile, auth).catch(err => {
-    logger.error('INK API UPLOAD FAILURE:', err.message)
-    throw err
-  })
-
-  const chain = response.process_chain
-
-  return new Promise((resolve, reject) => {
-    // subscribe to the "process chain execution" channel
-    const channel = pusher.subscribe('process_chain_execution')
-
-    // wait for a "subscription succeeded" event
-    channel.bind('pusher:subscription_succeeded', () => {
-      const handler = data => {
-        if (data.chain_id !== chain.id) return
-
-        logger.info('Processing completed', data)
-
-        // unbind the event handler
-        channel.unbind('processing_completed', handler)
-
-        // unsubscribe from the channel
-        pusher.unsubscribe('process_chain_execution')
-
-        const manifest = chain.input_file_manifest
-
-        if (manifest.length === 0) {
-          reject(
-            new Error(
-              'The INK server gave a malformed response (no input files in the process chain)',
-            ),
-          )
-        }
-
-        // backwards compatibility
-        if (!options.outputFileName) {
-          options.outputFileName = `${path.basename(
-            manifest[0].path,
-            '.docx',
-          )}.html`
-        }
-
-        // download the output file
-        logger.info(
-          `Downloading output file ${options.outputFileName} from chain ${
-            chain.id
-          }`,
-        )
-
-        download(chain.id, auth, options.outputFileName)
-          .then(result => {
-            resolve(result)
-          })
-          .catch(error => {
-            logger.error('Error downloading from INK:', error.message)
-            reject(error)
-          })
-      }
-
-      // handle "processing completed" events on this channel
-      channel.bind('processing_completed', handler)
-    })
-
-    channel.bind('pusher:subscription_error', status => {
-      logger.error('Pusher subscription error', status)
-      reject(new Error('There was an error subscribing to the INK channel'))
-    })
-  })
-}
-
-const InkBackend = app => {
-  // TODO: authentication on this route
-  app.use('/api/ink', (req, res, next) => {
-    if (!correctInkConfig) {
-      next(new Error(inkConfigErrorMessage))
-      return
-    }
-    const fileStream = new Busboy({ headers: req.headers })
-
-    fileStream.on(
-      'file',
-      (fieldname, file, filename, encoding, contentType) => {
-        const stream = temp.createWriteStream()
-
-        stream.on('finish', () => {
-          const inputFile = {
-            value: fs.createReadStream(stream.path),
-            options: { filename, contentType },
-          }
-
-          logger.info(`Uploading file to INK for processing`)
-
-          process(inputFile, req.query)
-            .then(converted => {
-              res.json({ converted })
-
-              // clean up temp file
-              fs.unlink(stream.path, () => {
-                logger.info('Deleted temporary file', stream.path)
-              })
-            })
-            .catch(err => {
-              logger.error('ERROR CONVERTING WITH INK:', err.message)
-              next(err)
-            })
-        })
-
-        file.pipe(stream)
-
-        file.on('end', () => {
-          stream.end()
-        })
-      },
-    )
-
-    fileStream.on('error', err => {
-      logger.error(err)
-      next(err)
-    })
-
-    req.pipe(fileStream)
-  })
-}
-
-module.exports = InkBackend
diff --git a/packages/components/Ink-server/README.md b/packages/components/Ink-server/README.md
deleted file mode 100644
index e05d15d1c..000000000
--- a/packages/components/Ink-server/README.md
+++ /dev/null
@@ -1,37 +0,0 @@
-## Configuration
-
-In order to use this component, the following configuration needs to be added to a PubSweet application inside a section named `pubsweet-component-ink-backend`:
-
-* `inkEndpoint`: the URL of an [INK](https://gitlab.coko.foundation/INK/ink-api) instance
-* `email` and `password`: the email address and password used to authenticate with INK
-* `pusher`: a set of configuration values matching those used in the INK instance:
-  * `appKey`: the `SLANGER_APP_ID` value from INK's `.env` file
-  * `wsHost` and `httpHost`: the hostname of the INK instance (as used for `inkEndpoint`, but not a full URL)
-  * `wsPort` and `httpPort`: the ports that Slanger is running on in the INK instance, as configured in the `slanger` section of INK's `docker-compose.yml`.
-* `recipes`: recipe keys (as used in the `InkFrontend` component) that map to recipe IDs in the INK instance.
-
-
-For example:
-
-```json
-{
-  "pubsweet-component-ink-backend": {
-    "inkEndpoint": "https://ink.example.com/",
-    "email": "ink@example.com",
-    "password": "abcdef",
-    "pusher": {
-      "appKey": "abc123",
-      "wsHost": "ink.example.com",
-      "wsPort": 8080,
-      "httpHost": "ink.example.com",
-      "httpPort": 4567
-    },
-    "recipes": {
-      "foo": "1",
-      "bar": "2"
-    }
-  }
-}
-```
-
-
diff --git a/packages/components/Ink-server/index.js b/packages/components/Ink-server/index.js
deleted file mode 100644
index 275602496..000000000
--- a/packages/components/Ink-server/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = {
-  server: () => app => require('./InkBackend')(app),
-}
diff --git a/packages/components/Ink-server/package.json b/packages/components/Ink-server/package.json
deleted file mode 100644
index a6452b787..000000000
--- a/packages/components/Ink-server/package.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
-  "name": "pubsweet-component-ink-backend",
-  "version": "0.2.19",
-  "description": "Backend INK component for PubSweet",
-  "main": "index.js",
-  "author": "Collaborative Knowledge Foundation",
-  "license": "MIT",
-  "peerDependencies": {
-    "config": ">=3.0.1",
-    "joi": ">=14.3.1",
-    "pubsweet-server": ">=1.0.0"
-  },
-  "dependencies": {
-    "@pubsweet/logger": "^0.2.12",
-    "busboy": "^0.2.13",
-    "pusher-js": "^4.2.1",
-    "request": "^2.83.0",
-    "request-promise-native": "^1.0.5",
-    "temp": "^0.8.3"
-  }
-}
diff --git a/packages/components/InkFrontend/CHANGELOG.md b/packages/components/InkFrontend/CHANGELOG.md
deleted file mode 100644
index 987204f2d..000000000
--- a/packages/components/InkFrontend/CHANGELOG.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-<a name="1.0.2"></a>
-## [1.0.2](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-ink-frontend@1.0.1...pubsweet-component-ink-frontend@1.0.2) (2018-04-03)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-ink-frontend
-
-<a name="1.0.1"></a>
-
-## [1.0.1](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-ink-frontend@1.0.0...pubsweet-component-ink-frontend@1.0.1) (2018-02-16)
-
-**Note:** Version bump only for package pubsweet-component-ink-frontend
-
-<a name="1.0.0"></a>
-
-# [1.0.0](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-ink-frontend@0.2.4...pubsweet-component-ink-frontend@1.0.0) (2018-02-02)
-
-### Features
-
-* **client:** upgrade React to version 16 ([626cf59](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/626cf59)), closes [#65](https://gitlab.coko.foundation/pubsweet/pubsweet/issues/65)
-
-### BREAKING CHANGES
-
-* **client:** Upgrade React to version 16
diff --git a/packages/components/InkFrontend/InkFrontend.jsx b/packages/components/InkFrontend/InkFrontend.jsx
deleted file mode 100644
index 6b570991b..000000000
--- a/packages/components/InkFrontend/InkFrontend.jsx
+++ /dev/null
@@ -1,45 +0,0 @@
-import React, { Component } from 'react'
-import PropTypes from 'prop-types'
-import { Alert, Row, Col } from 'react-bootstrap'
-import Dropzone from 'react-dropzone'
-
-export default class InkFrontend extends Component {
-  constructor(props) {
-    super(props)
-    this.onDrop = this.onDrop.bind(this)
-  }
-
-  onDrop(files) {
-    this.props.convert(files[0])
-  }
-
-  render() {
-    const { ink } = this.props
-
-    return (
-      <div className="bootstrap">
-        {ink.isFetching ? (
-          <Alert bsStyle="info">INK is doing its thing...</Alert>
-        ) : null}
-        {ink.error ? <Alert bsStyle="danger">INK failed</Alert> : null}
-
-        <Row>
-          <Col md={2} mdOffset={5} xs={12}>
-            <Dropzone multiple={false} onDrop={this.onDrop}>
-              <div>
-                Try dropping some files here, or click to select files to
-                upload.
-              </div>
-            </Dropzone>
-            {ink.converted ? <span>HERE {ink.converted}</span> : null}
-          </Col>
-        </Row>
-      </div>
-    )
-  }
-}
-
-InkFrontend.propTypes = {
-  convert: PropTypes.func,
-  ink: PropTypes.object,
-}
diff --git a/packages/components/InkFrontend/InkFrontendContainer.js b/packages/components/InkFrontend/InkFrontendContainer.js
deleted file mode 100644
index f07ff3e1b..000000000
--- a/packages/components/InkFrontend/InkFrontendContainer.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import { connect } from 'react-redux'
-import { ink as convert } from './actions'
-import InkFrontend from './InkFrontend'
-
-export default connect(
-  state => ({
-    ink: state.ink,
-  }),
-  {
-    convert,
-  },
-)(InkFrontend)
diff --git a/packages/components/InkFrontend/actions.js b/packages/components/InkFrontend/actions.js
deleted file mode 100644
index 2b46428ff..000000000
--- a/packages/components/InkFrontend/actions.js
+++ /dev/null
@@ -1,45 +0,0 @@
-import qs from 'query-string'
-import request from 'pubsweet-client/src/helpers/api'
-import { INK_FAILURE, INK_REQUEST, INK_SUCCESS } from './types'
-
-export const inkRequest = () => ({
-  type: INK_REQUEST,
-})
-
-export const inkSuccess = converted => ({
-  type: INK_SUCCESS,
-  converted,
-})
-
-export const inkFailure = error => ({
-  type: INK_FAILURE,
-  error,
-})
-
-export const ink = (file, options) => dispatch => {
-  dispatch(inkRequest())
-
-  const body = new FormData()
-  body.append('file', file)
-
-  let url = '/ink'
-
-  if (options) {
-    url += `?${qs.stringify(options)}`
-  }
-
-  return request(url, {
-    method: 'POST',
-    body,
-  })
-    .then(data => {
-      dispatch(inkSuccess(data.converted))
-
-      return data
-    })
-    .catch(error => {
-      dispatch(inkFailure(error.message))
-
-      throw error
-    })
-}
diff --git a/packages/components/InkFrontend/index.js b/packages/components/InkFrontend/index.js
deleted file mode 100644
index fc4fb3138..000000000
--- a/packages/components/InkFrontend/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
-  frontend: {
-    components: [() => require('./InkFrontendContainer')],
-    actions: () => require('./actions'),
-    reducers: () => require('./reducers'),
-  },
-}
diff --git a/packages/components/InkFrontend/package.json b/packages/components/InkFrontend/package.json
deleted file mode 100644
index bb6675766..000000000
--- a/packages/components/InkFrontend/package.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
-  "name": "pubsweet-component-ink-frontend",
-  "version": "1.0.2",
-  "description": "A frontend component that talks to the INK backend component (which talks to INK for file processing and conversion)",
-  "main": "index.js",
-  "repository": {
-    "type": "git",
-    "url": "https://gitlab.coko.foundation/pubsweet/pubsweet"
-  },
-  "keywords": [
-    "file",
-    "processing",
-    "conversion",
-    "frontend",
-    "pubsweet",
-    "ink"
-  ],
-  "author": "Collaborative Knowledge Foundation",
-  "license": "MIT",
-  "dependencies": {
-    "prop-types": "^15.5.10",
-    "query-string": "^5.0.1",
-    "react-bootstrap": "^0.32.0",
-    "react-dropzone": "^4.2.7",
-    "react-redux": "^5.0.6",
-    "redux": "^3.7.2"
-  },
-  "peerDependencies": {
-    "pubsweet-client": ">=1.0.0",
-    "react": ">=16"
-  }
-}
diff --git a/packages/components/InkFrontend/reducers.js b/packages/components/InkFrontend/reducers.js
deleted file mode 100644
index ace0890a7..000000000
--- a/packages/components/InkFrontend/reducers.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import { INK_FAILURE, INK_REQUEST, INK_SUCCESS } from './types'
-
-const initialState = {
-  isFetching: false,
-  converted: null,
-  error: null,
-}
-
-export default function ink(state = initialState, action) {
-  switch (action.type) {
-    case INK_REQUEST:
-      return {
-        isFetching: true,
-        converted: null,
-        error: null,
-      }
-
-    case INK_SUCCESS:
-      return {
-        isFetching: false,
-        converted: action.converted,
-        error: null,
-      }
-
-    case INK_FAILURE:
-      return {
-        isFetching: false,
-        converted: null,
-        error: action.error,
-      }
-
-    default:
-      return state
-  }
-}
diff --git a/packages/components/InkFrontend/types.js b/packages/components/InkFrontend/types.js
deleted file mode 100644
index a521cd964..000000000
--- a/packages/components/InkFrontend/types.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export const INK_REQUEST = 'INK_REQUEST'
-export const INK_SUCCESS = 'INK_SUCCESS'
-export const INK_FAILURE = 'INK_FAILURE'
diff --git a/packages/components/Login/LoginContainer.test.jsx b/packages/components/Login/LoginContainer.test.jsx
index 3afd23a69..68394767c 100644
--- a/packages/components/Login/LoginContainer.test.jsx
+++ b/packages/components/Login/LoginContainer.test.jsx
@@ -124,7 +124,7 @@ describe('LoginContainer', () => {
     wrapper.update()
 
     expect(window.localStorage.token).toEqual('greatToken')
-    expect(globalLocation.pathname).toEqual('/')
+    expect(globalLocation.pathname).toEqual('/testRedirect')
   })
 
   it('does not log in user with incorrect credentials', async () => {
diff --git a/packages/components/Login/__snapshots__/Login.test.jsx.snap b/packages/components/Login/__snapshots__/Login.test.jsx.snap
deleted file mode 100644
index 8f595b980..000000000
--- a/packages/components/Login/__snapshots__/Login.test.jsx.snap
+++ /dev/null
@@ -1,977 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`<Login/> renders the login form 1`] = `
-ShallowWrapper {
-  Symbol(enzyme.__root__): [Circular],
-  Symbol(enzyme.__unrendered__): <Login />,
-  Symbol(enzyme.__renderer__): Object {
-    "batchedUpdates": [Function],
-    "getNode": [Function],
-    "render": [Function],
-    "simulateError": [Function],
-    "simulateEvent": [Function],
-    "unmount": [Function],
-  },
-  Symbol(enzyme.__node__): Object {
-    "instance": null,
-    "key": undefined,
-    "nodeType": "function",
-    "props": Object {
-      "children": Array [
-        <ForwardRef>
-          Login
-        </ForwardRef>,
-        false,
-        <form>
-          <FormikConnect(FieldInner)
-            component={[Function]}
-            name="username"
-          />
-          <FormikConnect(FieldInner)
-            component={[Function]}
-            name="password"
-          />
-          <ForwardRef
-            primary={true}
-            type="submit"
-          >
-            Login
-          </ForwardRef>
-        </form>,
-        <ForwardRef>
-          <span>
-            Don't have an account? 
-          </span>
-          <ForwardRef
-            to="/signup"
-          >
-            Sign up
-          </ForwardRef>
-        </ForwardRef>,
-        <ForwardRef>
-          <span>
-            Forgot your password? 
-          </span>
-          <ForwardRef
-            to="/password-reset"
-          >
-            Reset password
-          </ForwardRef>
-        </ForwardRef>,
-      ],
-      "small": true,
-    },
-    "ref": null,
-    "rendered": Array [
-      Object {
-        "instance": null,
-        "key": undefined,
-        "nodeType": "function",
-        "props": Object {
-          "children": "Login",
-        },
-        "ref": null,
-        "rendered": "Login",
-        "type": Object {
-          "$$typeof": Symbol(react.forward_ref),
-          "attrs": Array [
-            Object {
-              "level": 1,
-            },
-          ],
-          "componentStyle": ComponentStyle {
-            "componentId": "sc-Rmtcm",
-            "isStatic": false,
-            "rules": Array [
-              "
-  ",
-              "
-  color: ",
-              [Function],
-              ";
-  font-size: ",
-              [Function],
-              ";
-  font-family: ",
-              [Function],
-              ";
-  line-height: ",
-              [Function],
-              ";
-  ",
-              [Function],
-              ";
-",
-              ";
-  ",
-              [Function],
-              ";
-",
-            ],
-          },
-          "displayName": "styled.h1",
-          "foldedComponentIds": Array [],
-          "render": [Function],
-          "styledComponentId": "sc-Rmtcm",
-          "target": "h1",
-          "toString": [Function],
-          "warnTooManyClasses": [Function],
-          "withComponent": [Function],
-        },
-      },
-      false,
-      Object {
-        "instance": null,
-        "key": undefined,
-        "nodeType": "host",
-        "props": Object {
-          "children": Array [
-            <FormikConnect(FieldInner)
-              component={[Function]}
-              name="username"
-            />,
-            <FormikConnect(FieldInner)
-              component={[Function]}
-              name="password"
-            />,
-            <ForwardRef
-              primary={true}
-              type="submit"
-            >
-              Login
-            </ForwardRef>,
-          ],
-          "onSubmit": undefined,
-        },
-        "ref": null,
-        "rendered": Array [
-          Object {
-            "instance": null,
-            "key": undefined,
-            "nodeType": "function",
-            "props": Object {
-              "component": [Function],
-              "name": "username",
-            },
-            "ref": null,
-            "rendered": null,
-            "type": [Function],
-          },
-          Object {
-            "instance": null,
-            "key": undefined,
-            "nodeType": "function",
-            "props": Object {
-              "component": [Function],
-              "name": "password",
-            },
-            "ref": null,
-            "rendered": null,
-            "type": [Function],
-          },
-          Object {
-            "instance": null,
-            "key": undefined,
-            "nodeType": "function",
-            "props": Object {
-              "children": "Login",
-              "primary": true,
-              "type": "submit",
-            },
-            "ref": null,
-            "rendered": "Login",
-            "type": Object {
-              "$$typeof": Symbol(react.forward_ref),
-              "attrs": Array [
-                Object {
-                  "type": "button",
-                },
-              ],
-              "componentStyle": ComponentStyle {
-                "componentId": "sc-kgoBCf",
-                "isStatic": false,
-                "rules": Array [
-                  "
-  background: ",
-                  [Function],
-                  ";
-  border: ",
-                  [Function],
-                  " ",
-                  [Function],
-                  " ",
-                  [Function],
-                  ";
-  border-radius: ",
-                  [Function],
-                  ";
-  color: ",
-                  [Function],
-                  ";
-  font-family: ",
-                  [Function],
-                  ";
-  font-size: ",
-                  [Function],
-                  ";
-  line-height: calc(",
-                  [Function],
-                  " * 3);
-  min-width: calc(",
-                  [Function],
-                  " * 12);
-  padding: ",
-                  [Function],
-                  ";
-
-  &:focus,
-  &:hover {
-    background-color: ",
-                  [Function],
-                  ";
-    transition: ",
-                  [Function],
-                  " ",
-                  [Function],
-                  ";
-  }
-
-  &:active {
-    background-color: ",
-                  [Function],
-                  ";
-  }
-
-  &[disabled] {
-    cursor: not-allowed;
-    opacity: 0.5;
-
-    &:focus,
-    &:hover,
-    &:active {
-      background: ",
-                  [Function],
-                  ";
-    }
-  }
-
-  ",
-                  [Function],
-                  ";
-  ",
-                  [Function],
-                  ";
-",
-                ],
-              },
-              "displayName": "styled.button",
-              "foldedComponentIds": Array [],
-              "render": [Function],
-              "styledComponentId": "sc-kgoBCf",
-              "target": "button",
-              "toString": [Function],
-              "warnTooManyClasses": [Function],
-              "withComponent": [Function],
-            },
-          },
-        ],
-        "type": "form",
-      },
-      Object {
-        "instance": null,
-        "key": undefined,
-        "nodeType": "function",
-        "props": Object {
-          "children": Array [
-            <span>
-              Don't have an account? 
-            </span>,
-            <ForwardRef
-              to="/signup"
-            >
-              Sign up
-            </ForwardRef>,
-          ],
-        },
-        "ref": null,
-        "rendered": Array [
-          Object {
-            "instance": null,
-            "key": undefined,
-            "nodeType": "host",
-            "props": Object {
-              "children": "Don't have an account? ",
-            },
-            "ref": null,
-            "rendered": "Don't have an account? ",
-            "type": "span",
-          },
-          Object {
-            "instance": null,
-            "key": undefined,
-            "nodeType": "function",
-            "props": Object {
-              "children": "Sign up",
-              "to": "/signup",
-            },
-            "ref": null,
-            "rendered": "Sign up",
-            "type": Object {
-              "$$typeof": Symbol(react.forward_ref),
-              "attrs": Array [],
-              "componentStyle": ComponentStyle {
-                "componentId": "sc-csuQGl",
-                "isStatic": false,
-                "rules": Array [
-                  "
-  color: ",
-                  [Function],
-                  ";
-  cursor: pointer;
-
-  ",
-                  [Function],
-                  ";
-",
-                ],
-              },
-              "displayName": "Styled(Link)",
-              "foldedComponentIds": Array [],
-              "render": [Function],
-              "styledComponentId": "sc-csuQGl",
-              "target": [Function],
-              "toString": [Function],
-              "warnTooManyClasses": [Function],
-              "withComponent": [Function],
-              Symbol(Symbol.hasInstance): [Function],
-            },
-          },
-        ],
-        "type": Object {
-          "$$typeof": Symbol(react.forward_ref),
-          "attrs": Array [],
-          "componentStyle": ComponentStyle {
-            "componentId": "sc-gwVKww",
-            "isStatic": true,
-            "rules": Array [],
-          },
-          "displayName": "styled.div",
-          "foldedComponentIds": Array [],
-          "render": [Function],
-          "styledComponentId": "sc-gwVKww",
-          "target": "div",
-          "toString": [Function],
-          "warnTooManyClasses": [Function],
-          "withComponent": [Function],
-        },
-      },
-      Object {
-        "instance": null,
-        "key": undefined,
-        "nodeType": "function",
-        "props": Object {
-          "children": Array [
-            <span>
-              Forgot your password? 
-            </span>,
-            <ForwardRef
-              to="/password-reset"
-            >
-              Reset password
-            </ForwardRef>,
-          ],
-        },
-        "ref": null,
-        "rendered": Array [
-          Object {
-            "instance": null,
-            "key": undefined,
-            "nodeType": "host",
-            "props": Object {
-              "children": "Forgot your password? ",
-            },
-            "ref": null,
-            "rendered": "Forgot your password? ",
-            "type": "span",
-          },
-          Object {
-            "instance": null,
-            "key": undefined,
-            "nodeType": "function",
-            "props": Object {
-              "children": "Reset password",
-              "to": "/password-reset",
-            },
-            "ref": null,
-            "rendered": "Reset password",
-            "type": Object {
-              "$$typeof": Symbol(react.forward_ref),
-              "attrs": Array [],
-              "componentStyle": ComponentStyle {
-                "componentId": "sc-csuQGl",
-                "isStatic": false,
-                "rules": Array [
-                  "
-  color: ",
-                  [Function],
-                  ";
-  cursor: pointer;
-
-  ",
-                  [Function],
-                  ";
-",
-                ],
-              },
-              "displayName": "Styled(Link)",
-              "foldedComponentIds": Array [],
-              "render": [Function],
-              "styledComponentId": "sc-csuQGl",
-              "target": [Function],
-              "toString": [Function],
-              "warnTooManyClasses": [Function],
-              "withComponent": [Function],
-              Symbol(Symbol.hasInstance): [Function],
-            },
-          },
-        ],
-        "type": Object {
-          "$$typeof": Symbol(react.forward_ref),
-          "attrs": Array [],
-          "componentStyle": ComponentStyle {
-            "componentId": "sc-hXRMBi",
-            "isStatic": true,
-            "rules": Array [],
-          },
-          "displayName": "styled.div",
-          "foldedComponentIds": Array [],
-          "render": [Function],
-          "styledComponentId": "sc-hXRMBi",
-          "target": "div",
-          "toString": [Function],
-          "warnTooManyClasses": [Function],
-          "withComponent": [Function],
-        },
-      },
-    ],
-    "type": Object {
-      "$$typeof": Symbol(react.forward_ref),
-      "attrs": Array [],
-      "componentStyle": ComponentStyle {
-        "componentId": "sc-eqIVtm",
-        "isStatic": false,
-        "rules": Array [
-          "
-  margin: 0 auto;
-  width: ",
-          [Function],
-          ";
-",
-        ],
-      },
-      "displayName": "styled.div",
-      "foldedComponentIds": Array [],
-      "propTypes": Object {
-        "medium": [Function],
-        "small": [Function],
-      },
-      "render": [Function],
-      "styledComponentId": "sc-eqIVtm",
-      "target": "div",
-      "toString": [Function],
-      "warnTooManyClasses": [Function],
-      "withComponent": [Function],
-    },
-  },
-  Symbol(enzyme.__nodes__): Array [
-    Object {
-      "instance": null,
-      "key": undefined,
-      "nodeType": "function",
-      "props": Object {
-        "children": Array [
-          <ForwardRef>
-            Login
-          </ForwardRef>,
-          false,
-          <form>
-            <FormikConnect(FieldInner)
-              component={[Function]}
-              name="username"
-            />
-            <FormikConnect(FieldInner)
-              component={[Function]}
-              name="password"
-            />
-            <ForwardRef
-              primary={true}
-              type="submit"
-            >
-              Login
-            </ForwardRef>
-          </form>,
-          <ForwardRef>
-            <span>
-              Don't have an account? 
-            </span>
-            <ForwardRef
-              to="/signup"
-            >
-              Sign up
-            </ForwardRef>
-          </ForwardRef>,
-          <ForwardRef>
-            <span>
-              Forgot your password? 
-            </span>
-            <ForwardRef
-              to="/password-reset"
-            >
-              Reset password
-            </ForwardRef>
-          </ForwardRef>,
-        ],
-        "small": true,
-      },
-      "ref": null,
-      "rendered": Array [
-        Object {
-          "instance": null,
-          "key": undefined,
-          "nodeType": "function",
-          "props": Object {
-            "children": "Login",
-          },
-          "ref": null,
-          "rendered": "Login",
-          "type": Object {
-            "$$typeof": Symbol(react.forward_ref),
-            "attrs": Array [
-              Object {
-                "level": 1,
-              },
-            ],
-            "componentStyle": ComponentStyle {
-              "componentId": "sc-Rmtcm",
-              "isStatic": false,
-              "rules": Array [
-                "
-  ",
-                "
-  color: ",
-                [Function],
-                ";
-  font-size: ",
-                [Function],
-                ";
-  font-family: ",
-                [Function],
-                ";
-  line-height: ",
-                [Function],
-                ";
-  ",
-                [Function],
-                ";
-",
-                ";
-  ",
-                [Function],
-                ";
-",
-              ],
-            },
-            "displayName": "styled.h1",
-            "foldedComponentIds": Array [],
-            "render": [Function],
-            "styledComponentId": "sc-Rmtcm",
-            "target": "h1",
-            "toString": [Function],
-            "warnTooManyClasses": [Function],
-            "withComponent": [Function],
-          },
-        },
-        false,
-        Object {
-          "instance": null,
-          "key": undefined,
-          "nodeType": "host",
-          "props": Object {
-            "children": Array [
-              <FormikConnect(FieldInner)
-                component={[Function]}
-                name="username"
-              />,
-              <FormikConnect(FieldInner)
-                component={[Function]}
-                name="password"
-              />,
-              <ForwardRef
-                primary={true}
-                type="submit"
-              >
-                Login
-              </ForwardRef>,
-            ],
-            "onSubmit": undefined,
-          },
-          "ref": null,
-          "rendered": Array [
-            Object {
-              "instance": null,
-              "key": undefined,
-              "nodeType": "function",
-              "props": Object {
-                "component": [Function],
-                "name": "username",
-              },
-              "ref": null,
-              "rendered": null,
-              "type": [Function],
-            },
-            Object {
-              "instance": null,
-              "key": undefined,
-              "nodeType": "function",
-              "props": Object {
-                "component": [Function],
-                "name": "password",
-              },
-              "ref": null,
-              "rendered": null,
-              "type": [Function],
-            },
-            Object {
-              "instance": null,
-              "key": undefined,
-              "nodeType": "function",
-              "props": Object {
-                "children": "Login",
-                "primary": true,
-                "type": "submit",
-              },
-              "ref": null,
-              "rendered": "Login",
-              "type": Object {
-                "$$typeof": Symbol(react.forward_ref),
-                "attrs": Array [
-                  Object {
-                    "type": "button",
-                  },
-                ],
-                "componentStyle": ComponentStyle {
-                  "componentId": "sc-kgoBCf",
-                  "isStatic": false,
-                  "rules": Array [
-                    "
-  background: ",
-                    [Function],
-                    ";
-  border: ",
-                    [Function],
-                    " ",
-                    [Function],
-                    " ",
-                    [Function],
-                    ";
-  border-radius: ",
-                    [Function],
-                    ";
-  color: ",
-                    [Function],
-                    ";
-  font-family: ",
-                    [Function],
-                    ";
-  font-size: ",
-                    [Function],
-                    ";
-  line-height: calc(",
-                    [Function],
-                    " * 3);
-  min-width: calc(",
-                    [Function],
-                    " * 12);
-  padding: ",
-                    [Function],
-                    ";
-
-  &:focus,
-  &:hover {
-    background-color: ",
-                    [Function],
-                    ";
-    transition: ",
-                    [Function],
-                    " ",
-                    [Function],
-                    ";
-  }
-
-  &:active {
-    background-color: ",
-                    [Function],
-                    ";
-  }
-
-  &[disabled] {
-    cursor: not-allowed;
-    opacity: 0.5;
-
-    &:focus,
-    &:hover,
-    &:active {
-      background: ",
-                    [Function],
-                    ";
-    }
-  }
-
-  ",
-                    [Function],
-                    ";
-  ",
-                    [Function],
-                    ";
-",
-                  ],
-                },
-                "displayName": "styled.button",
-                "foldedComponentIds": Array [],
-                "render": [Function],
-                "styledComponentId": "sc-kgoBCf",
-                "target": "button",
-                "toString": [Function],
-                "warnTooManyClasses": [Function],
-                "withComponent": [Function],
-              },
-            },
-          ],
-          "type": "form",
-        },
-        Object {
-          "instance": null,
-          "key": undefined,
-          "nodeType": "function",
-          "props": Object {
-            "children": Array [
-              <span>
-                Don't have an account? 
-              </span>,
-              <ForwardRef
-                to="/signup"
-              >
-                Sign up
-              </ForwardRef>,
-            ],
-          },
-          "ref": null,
-          "rendered": Array [
-            Object {
-              "instance": null,
-              "key": undefined,
-              "nodeType": "host",
-              "props": Object {
-                "children": "Don't have an account? ",
-              },
-              "ref": null,
-              "rendered": "Don't have an account? ",
-              "type": "span",
-            },
-            Object {
-              "instance": null,
-              "key": undefined,
-              "nodeType": "function",
-              "props": Object {
-                "children": "Sign up",
-                "to": "/signup",
-              },
-              "ref": null,
-              "rendered": "Sign up",
-              "type": Object {
-                "$$typeof": Symbol(react.forward_ref),
-                "attrs": Array [],
-                "componentStyle": ComponentStyle {
-                  "componentId": "sc-csuQGl",
-                  "isStatic": false,
-                  "rules": Array [
-                    "
-  color: ",
-                    [Function],
-                    ";
-  cursor: pointer;
-
-  ",
-                    [Function],
-                    ";
-",
-                  ],
-                },
-                "displayName": "Styled(Link)",
-                "foldedComponentIds": Array [],
-                "render": [Function],
-                "styledComponentId": "sc-csuQGl",
-                "target": [Function],
-                "toString": [Function],
-                "warnTooManyClasses": [Function],
-                "withComponent": [Function],
-                Symbol(Symbol.hasInstance): [Function],
-              },
-            },
-          ],
-          "type": Object {
-            "$$typeof": Symbol(react.forward_ref),
-            "attrs": Array [],
-            "componentStyle": ComponentStyle {
-              "componentId": "sc-gwVKww",
-              "isStatic": true,
-              "rules": Array [],
-            },
-            "displayName": "styled.div",
-            "foldedComponentIds": Array [],
-            "render": [Function],
-            "styledComponentId": "sc-gwVKww",
-            "target": "div",
-            "toString": [Function],
-            "warnTooManyClasses": [Function],
-            "withComponent": [Function],
-          },
-        },
-        Object {
-          "instance": null,
-          "key": undefined,
-          "nodeType": "function",
-          "props": Object {
-            "children": Array [
-              <span>
-                Forgot your password? 
-              </span>,
-              <ForwardRef
-                to="/password-reset"
-              >
-                Reset password
-              </ForwardRef>,
-            ],
-          },
-          "ref": null,
-          "rendered": Array [
-            Object {
-              "instance": null,
-              "key": undefined,
-              "nodeType": "host",
-              "props": Object {
-                "children": "Forgot your password? ",
-              },
-              "ref": null,
-              "rendered": "Forgot your password? ",
-              "type": "span",
-            },
-            Object {
-              "instance": null,
-              "key": undefined,
-              "nodeType": "function",
-              "props": Object {
-                "children": "Reset password",
-                "to": "/password-reset",
-              },
-              "ref": null,
-              "rendered": "Reset password",
-              "type": Object {
-                "$$typeof": Symbol(react.forward_ref),
-                "attrs": Array [],
-                "componentStyle": ComponentStyle {
-                  "componentId": "sc-csuQGl",
-                  "isStatic": false,
-                  "rules": Array [
-                    "
-  color: ",
-                    [Function],
-                    ";
-  cursor: pointer;
-
-  ",
-                    [Function],
-                    ";
-",
-                  ],
-                },
-                "displayName": "Styled(Link)",
-                "foldedComponentIds": Array [],
-                "render": [Function],
-                "styledComponentId": "sc-csuQGl",
-                "target": [Function],
-                "toString": [Function],
-                "warnTooManyClasses": [Function],
-                "withComponent": [Function],
-                Symbol(Symbol.hasInstance): [Function],
-              },
-            },
-          ],
-          "type": Object {
-            "$$typeof": Symbol(react.forward_ref),
-            "attrs": Array [],
-            "componentStyle": ComponentStyle {
-              "componentId": "sc-hXRMBi",
-              "isStatic": true,
-              "rules": Array [],
-            },
-            "displayName": "styled.div",
-            "foldedComponentIds": Array [],
-            "render": [Function],
-            "styledComponentId": "sc-hXRMBi",
-            "target": "div",
-            "toString": [Function],
-            "warnTooManyClasses": [Function],
-            "withComponent": [Function],
-          },
-        },
-      ],
-      "type": Object {
-        "$$typeof": Symbol(react.forward_ref),
-        "attrs": Array [],
-        "componentStyle": ComponentStyle {
-          "componentId": "sc-eqIVtm",
-          "isStatic": false,
-          "rules": Array [
-            "
-  margin: 0 auto;
-  width: ",
-            [Function],
-            ";
-",
-          ],
-        },
-        "displayName": "styled.div",
-        "foldedComponentIds": Array [],
-        "propTypes": Object {
-          "medium": [Function],
-          "small": [Function],
-        },
-        "render": [Function],
-        "styledComponentId": "sc-eqIVtm",
-        "target": "div",
-        "toString": [Function],
-        "warnTooManyClasses": [Function],
-        "withComponent": [Function],
-      },
-    },
-  ],
-  Symbol(enzyme.__options__): Object {
-    "adapter": ReactSixteenAdapter {
-      "options": Object {
-        "enableComponentDidUpdateOnSetState": true,
-        "lifecycles": Object {
-          "componentDidUpdate": Object {
-            "onSetState": true,
-          },
-          "getDerivedStateFromProps": true,
-          "getSnapshotBeforeUpdate": true,
-          "setState": Object {
-            "skipsComponentDidUpdateOnNullish": true,
-          },
-        },
-      },
-    },
-  },
-}
-`;
diff --git a/packages/components/Login/package.json b/packages/components/Login/package.json
index 736b4bba5..70f0c26c8 100644
--- a/packages/components/Login/package.json
+++ b/packages/components/Login/package.json
@@ -9,9 +9,7 @@
     "@pubsweet/ui": "^9.1.3",
     "formik": "^1.3.0",
     "prop-types": "^15.5.10",
-    "react-redux": "^5.0.6",
     "react-router-dom": "^4.2.2",
-    "react-router-redux": "^5.0.0-alpha.9",
     "recompose": "^0.26.0"
   },
   "peerDependencies": {
diff --git a/packages/components/PasswordReset-server/CHANGELOG.md b/packages/components/PasswordReset-server/CHANGELOG.md
deleted file mode 100644
index c9820f49f..000000000
--- a/packages/components/PasswordReset-server/CHANGELOG.md
+++ /dev/null
@@ -1,108 +0,0 @@
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-## [2.0.3](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-backend@2.0.2...pubsweet-component-password-reset-backend@2.0.3) (2019-01-16)
-
-**Note:** Version bump only for package pubsweet-component-password-reset-backend
-
-
-
-
-
-## [2.0.2](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-backend@2.0.1...pubsweet-component-password-reset-backend@2.0.2) (2019-01-14)
-
-**Note:** Version bump only for package pubsweet-component-password-reset-backend
-
-
-
-
-
-## [2.0.1](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-backend@2.0.0...pubsweet-component-password-reset-backend@2.0.1) (2019-01-13)
-
-**Note:** Version bump only for package pubsweet-component-password-reset-backend
-
-
-
-
-
-# [2.0.0](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-backend@1.0.6...pubsweet-component-password-reset-backend@2.0.0) (2019-01-09)
-
-
-### Bug Fixes
-
-* change password reset timestamp generation ([600be3a](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/600be3a))
-* **password-reset-server:** align mailer config with send email ([d1cf251](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/d1cf251)), closes [#432](https://gitlab.coko.foundation/pubsweet/pubsweet/issues/432)
-
-
-### BREAKING CHANGES
-
-* **password-reset-server:** Config for mailer is now read from mailer.path, not mailer.transport
-* Previously, passwordResetTimestamp was generated as a number of seconds since
-epoch. In the new user data model, all dates are strings in ISO8601 format. This commit fixes the
-incosistency and makes password reset work again.
-
-
-
-
-
-## [1.0.6](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-backend@1.0.5...pubsweet-component-password-reset-backend@1.0.6) (2018-12-12)
-
-**Note:** Version bump only for package pubsweet-component-password-reset-backend
-
-
-
-
-
-<a name="1.0.5"></a>
-## [1.0.5](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-backend@1.0.4...pubsweet-component-password-reset-backend@1.0.5) (2018-09-25)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-backend
-
-<a name="1.0.4"></a>
-## [1.0.4](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-backend@1.0.3...pubsweet-component-password-reset-backend@1.0.4) (2018-04-03)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-backend
-
-<a name="1.0.3"></a>
-## [1.0.3](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-backend@1.0.2...pubsweet-component-password-reset-backend@1.0.3) (2018-03-27)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-backend
-
-<a name="1.0.2"></a>
-## [1.0.2](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-backend@1.0.1...pubsweet-component-password-reset-backend@1.0.2) (2018-03-19)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-backend
-
-<a name="1.0.1"></a>
-## [1.0.1](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-backend@1.0.0...pubsweet-component-password-reset-backend@1.0.1) (2018-03-15)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-backend
-
-<a name="1.0.0"></a>
-
-# [1.0.0](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-backend@0.2.2...pubsweet-component-password-reset-backend@1.0.0) (2018-02-16)
-
-### Code Refactoring
-
-* **components:** update mail transport config shape ([d142cd3](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/d142cd3))
-
-### BREAKING CHANGES
-
-* **components:** mail transport config has moved from `mail-transport` to `mailer.transport`
diff --git a/packages/components/PasswordReset-server/PasswordResetBackend.js b/packages/components/PasswordReset-server/PasswordResetBackend.js
deleted file mode 100644
index 270cb1aed..000000000
--- a/packages/components/PasswordReset-server/PasswordResetBackend.js
+++ /dev/null
@@ -1,99 +0,0 @@
-const crypto = require('crypto')
-const moment = require('moment')
-const config = require('config')
-
-const logger = require('@pubsweet/logger')
-const querystring = require('querystring')
-const bodyParser = require('body-parser')
-
-const transport = require('./transport')
-
-// fail early if these configs are missing
-const baseUrl = config.get('pubsweet-server.baseUrl')
-const configSender = config.get('mailer.from')
-
-const PasswordResetBackend = app => {
-  app.post('/api/password-reset', bodyParser.json(), async (req, res, next) => {
-    try {
-      const pathToPage =
-        config.get('password-reset.pathToPage') || '/password-reset'
-      const tokenLength = config.get('password-reset.token-length') || 32
-
-      const { token, password, username } = req.body
-
-      if (!username) {
-        res.status(400).json({ error: 'Username must be specified' })
-        return
-      }
-
-      // load the user by username
-      // TODO: use findOneByField
-      const user = await app.locals.models.User.findByField(
-        'username',
-        username,
-      ).then(results => (results ? results[0] : null))
-
-      if (!user) {
-        res.status(400).json({ error: 'User not found' })
-        return
-      }
-
-      if (token && password) {
-        // change the password
-
-        if (token !== user.passwordResetToken) {
-          res.status(400).json({ error: 'invalid' })
-          return
-        }
-
-        if (
-          moment()
-            .subtract(24, 'hours')
-            .isAfter(user.passwordResetTimestamp)
-        ) {
-          res.status(400).json({ error: 'expired' })
-          return
-        }
-
-        user.password = password
-        delete user.passwordResetToken
-        delete user.passwordResetTimestamp
-
-        await user.save()
-
-        res.sendStatus(200)
-      } else {
-        // send a password reset email
-
-        user.passwordResetToken = crypto
-          .randomBytes(tokenLength)
-          .toString('hex')
-        user.passwordResetTimestamp = moment().format()
-
-        await user.save()
-
-        const token = querystring.encode({
-          username,
-          token: user.passwordResetToken,
-        })
-        const passwordResetURL = `${baseUrl}${pathToPage}?${token}`
-
-        logger.info(`Sending password reset email to ${user.email}`)
-
-        await transport.sendMail({
-          from: configSender,
-          to: user.email,
-          subject: 'Password reset',
-          text: `Reset your password: ${passwordResetURL}`,
-          html: `<p><a href="${passwordResetURL}">Reset your password</a></p>`,
-        })
-
-        res.sendStatus(200)
-      }
-    } catch (e) {
-      next(e)
-    }
-  })
-}
-
-module.exports = PasswordResetBackend
diff --git a/packages/components/PasswordReset-server/PasswordResetBackend.test.js b/packages/components/PasswordReset-server/PasswordResetBackend.test.js
deleted file mode 100644
index 3eeb8df4c..000000000
--- a/packages/components/PasswordReset-server/PasswordResetBackend.test.js
+++ /dev/null
@@ -1,128 +0,0 @@
-process.env.SUPPRESS_NO_CONFIG_WARNING = true
-
-const express = require('express')
-const supertest = require('supertest')
-
-// mocks
-jest.mock('./transport', () => ({ sendMail: jest.fn() }))
-
-const transport = require('./transport')
-const component = require('.')
-
-function makeApp(response) {
-  const app = express()
-  // mock DB
-  app.locals.models = {
-    User: {
-      findByField: jest.fn(() =>
-        response instanceof Error
-          ? Promise.reject(response)
-          : Promise.resolve(response),
-      ),
-    },
-  }
-  // register component
-  component.server()(app)
-  // create test wrapper
-  return supertest(app)
-}
-
-describe('/api/password-reset route', () => {
-  describe('initial validation', () => {
-    it('errors if no username', () =>
-      makeApp()
-        .post('/api/password-reset')
-        .send({})
-        .expect(400, '{"error":"Username must be specified"}'))
-
-    it('errors if no user', () =>
-      makeApp(null)
-        .post('/api/password-reset')
-        .send({ username: 'hey' })
-        .expect(400, '{"error":"User not found"}'))
-
-    it('errors if DB call fails', () =>
-      makeApp(new Error('Ops!'))
-        .post('/api/password-reset')
-        .send({ username: 'hey' })
-        .expect(500))
-  })
-
-  describe('sending email', () => {
-    it('sends email if no token and password', () => {
-      const user = {
-        username: 'hey',
-        email: 'hey@here.com',
-        save: jest.fn(),
-      }
-      return makeApp([user])
-        .post('/api/password-reset')
-        .send({ username: user.username })
-        .expect(200)
-        .then(() => {
-          expect(user.passwordResetToken).toBeDefined()
-          expect(user.passwordResetTimestamp).toBeDefined()
-          expect(user.save).toHaveBeenCalled()
-          expect(transport.sendMail).toHaveBeenCalledWith(
-            expect.objectContaining({
-              from: 'nobody@example.com',
-              to: user.email,
-              subject: 'Password reset',
-              text: expect.stringContaining(
-                `http://example.com/password-reset?username=${
-                  user.username
-                }&token=${user.passwordResetToken}`,
-              ),
-            }),
-          )
-        })
-    })
-  })
-
-  describe('setting password', () => {
-    it('errors if reset token does not match', () => {
-      const user = {
-        username: 'hey',
-        passwordResetToken: '123',
-      }
-      return makeApp([user])
-        .post('/api/password-reset')
-        .send({ username: user.username, token: 'wrong', password: 'new pass' })
-        .expect(400, '{"error":"invalid"}')
-    })
-
-    it('errors if reset timestamp is in the past', () => {
-      const user = {
-        username: 'hey',
-        passwordResetToken: '123',
-        passwordResetTimestamp: Date.now() - 1000 * 60 * 60 * 24 * 2,
-      }
-      return makeApp([user])
-        .post('/api/password-reset')
-        .send({
-          username: user.username,
-          token: user.passwordResetToken,
-          password: 'new pass',
-        })
-        .expect(400, '{"error":"expired"}')
-    })
-
-    it('saves user if all valid', () => {
-      const user = {
-        username: 'hey',
-        passwordResetToken: '123',
-        passwordResetTimestamp: Date.now(),
-        save: jest.fn(),
-      }
-      return makeApp([user])
-        .post('/api/password-reset')
-        .send({
-          username: user.username,
-          token: user.passwordResetToken,
-          password: 'new pass',
-        })
-        .expect(200)
-        .then(() => expect(user.save).toHaveBeenCalled())
-    })
-  })
-})
diff --git a/packages/components/PasswordReset-server/index.js b/packages/components/PasswordReset-server/index.js
deleted file mode 100644
index b2e7210ab..000000000
--- a/packages/components/PasswordReset-server/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = {
-  server: () => app => require('./PasswordResetBackend')(app),
-}
diff --git a/packages/components/PasswordReset-server/package.json b/packages/components/PasswordReset-server/package.json
deleted file mode 100644
index 44d9c17d2..000000000
--- a/packages/components/PasswordReset-server/package.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
-  "name": "pubsweet-component-password-reset-backend",
-  "version": "2.0.3",
-  "description": "Password reset backend component for PubSweet",
-  "main": "index.js",
-  "scripts": {},
-  "author": "Collaborative Knowledge Foundation",
-  "license": "MIT",
-  "dependencies": {
-    "body-parser": "^1.17.2",
-    "config": "^3.0.1",
-    "moment": "^2.18.1",
-    "nodemailer": "^4.0.1"
-  },
-  "peerDependencies": {
-    "@pubsweet/logger": ">=0.0.1",
-    "pubsweet-server": ">=1.0.0"
-  },
-  "repository": {
-    "type": "git",
-    "url": "https://gitlab.coko.foundation/pubsweet/pubsweet",
-    "path": "PasswordResetBackend"
-  }
-}
diff --git a/packages/components/PasswordReset-server/transport.js b/packages/components/PasswordReset-server/transport.js
deleted file mode 100644
index 36e648525..000000000
--- a/packages/components/PasswordReset-server/transport.js
+++ /dev/null
@@ -1,7 +0,0 @@
-const config = require('config')
-const nodemailer = require('nodemailer')
-
-// SMTP transport options: https://nodemailer.com/smtp/
-
-const options = require(config.get('mailer.path'))
-module.exports = nodemailer.createTransport(options.transport)
diff --git a/packages/components/PasswordResetFrontend/.babelrc b/packages/components/PasswordResetFrontend/.babelrc
deleted file mode 100644
index e60d3036a..000000000
--- a/packages/components/PasswordResetFrontend/.babelrc
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-  "presets": ["@babel/preset-env", "@babel/preset-react"],
-  "plugins": ["@babel/plugin-proposal-class-properties"]
-}
diff --git a/packages/components/PasswordResetFrontend/CHANGELOG.md b/packages/components/PasswordResetFrontend/CHANGELOG.md
deleted file mode 100644
index 375a7269d..000000000
--- a/packages/components/PasswordResetFrontend/CHANGELOG.md
+++ /dev/null
@@ -1,373 +0,0 @@
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-## [3.0.7](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@3.0.6...pubsweet-component-password-reset-frontend@3.0.7) (2019-01-16)
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-
-
-
-
-## [3.0.6](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@3.0.5...pubsweet-component-password-reset-frontend@3.0.6) (2019-01-14)
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-
-
-
-
-## [3.0.5](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@3.0.4...pubsweet-component-password-reset-frontend@3.0.5) (2019-01-13)
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-
-
-
-
-## [3.0.4](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@3.0.3...pubsweet-component-password-reset-frontend@3.0.4) (2019-01-09)
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-
-
-
-
-## [3.0.3](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@3.0.2...pubsweet-component-password-reset-frontend@3.0.3) (2018-12-12)
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-
-
-
-
-## [3.0.2](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@3.0.1...pubsweet-component-password-reset-frontend@3.0.2) (2018-12-04)
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-
-
-
-
-## [3.0.1](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@3.0.0...pubsweet-component-password-reset-frontend@3.0.1) (2018-11-30)
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-
-
-
-
-# [3.0.0](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@2.0.17...pubsweet-component-password-reset-frontend@3.0.0) (2018-11-29)
-
-
-### Features
-
-* **various:** upgrade styled-components ([9b886f6](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/9b886f6))
-
-
-### BREAKING CHANGES
-
-* **various:** Replace styled-components injectGlobal with new createGlobalStyle
-
-
-
-
-
-<a name="2.0.17"></a>
-## [2.0.17](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@2.0.16...pubsweet-component-password-reset-frontend@2.0.17) (2018-11-05)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="2.0.16"></a>
-## [2.0.16](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@2.0.15...pubsweet-component-password-reset-frontend@2.0.16) (2018-10-08)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="2.0.15"></a>
-## [2.0.15](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@2.0.14...pubsweet-component-password-reset-frontend@2.0.15) (2018-09-27)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="2.0.14"></a>
-## [2.0.14](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@2.0.13...pubsweet-component-password-reset-frontend@2.0.14) (2018-09-19)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="2.0.13"></a>
-## [2.0.13](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@2.0.12...pubsweet-component-password-reset-frontend@2.0.13) (2018-09-06)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="2.0.12"></a>
-## [2.0.12](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@2.0.11...pubsweet-component-password-reset-frontend@2.0.12) (2018-09-04)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="2.0.11"></a>
-## [2.0.11](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@2.0.10...pubsweet-component-password-reset-frontend@2.0.11) (2018-08-20)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="2.0.10"></a>
-## [2.0.10](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@2.0.9...pubsweet-component-password-reset-frontend@2.0.10) (2018-08-17)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="2.0.9"></a>
-## [2.0.9](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@2.0.8...pubsweet-component-password-reset-frontend@2.0.9) (2018-08-02)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="2.0.8"></a>
-## [2.0.8](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@2.0.7...pubsweet-component-password-reset-frontend@2.0.8) (2018-07-27)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="2.0.7"></a>
-## [2.0.7](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@2.0.6...pubsweet-component-password-reset-frontend@2.0.7) (2018-07-12)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="2.0.6"></a>
-## [2.0.6](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@2.0.5...pubsweet-component-password-reset-frontend@2.0.6) (2018-07-09)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="2.0.5"></a>
-## [2.0.5](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@2.0.4...pubsweet-component-password-reset-frontend@2.0.5) (2018-07-03)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="2.0.4"></a>
-## [2.0.4](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@2.0.3...pubsweet-component-password-reset-frontend@2.0.4) (2018-07-02)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="2.0.3"></a>
-## [2.0.3](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@2.0.2...pubsweet-component-password-reset-frontend@2.0.3) (2018-06-28)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="2.0.2"></a>
-## [2.0.2](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@2.0.1...pubsweet-component-password-reset-frontend@2.0.2) (2018-06-28)
-
-
-### Bug Fixes
-
-* **monorepo:** fix versions of ui across repo ([72ada07](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/72ada07))
-
-
-
-
-<a name="2.0.1"></a>
-## [2.0.1](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@2.0.0...pubsweet-component-password-reset-frontend@2.0.1) (2018-06-19)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="2.0.0"></a>
-# [2.0.0](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@1.0.17...pubsweet-component-password-reset-frontend@2.0.0) (2018-06-01)
-
-
-### Features
-
-* **ui:** start ui-toolkit module ([2083b9c](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/2083b9c))
-
-
-### BREAKING CHANGES
-
-* **ui:** th now comes from the toolkit, so all th imports from ui are now broken
-
-
-
-
-<a name="1.0.17"></a>
-## [1.0.17](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@1.0.16...pubsweet-component-password-reset-frontend@1.0.17) (2018-05-21)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="1.0.16"></a>
-## [1.0.16](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@1.0.15...pubsweet-component-password-reset-frontend@1.0.16) (2018-05-18)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="1.0.15"></a>
-## [1.0.15](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@1.0.14...pubsweet-component-password-reset-frontend@1.0.15) (2018-05-10)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="1.0.14"></a>
-## [1.0.14](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@1.0.13...pubsweet-component-password-reset-frontend@1.0.14) (2018-05-09)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="1.0.13"></a>
-## [1.0.13](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@1.0.12...pubsweet-component-password-reset-frontend@1.0.13) (2018-05-03)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="1.0.12"></a>
-## [1.0.12](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@1.0.11...pubsweet-component-password-reset-frontend@1.0.12) (2018-04-24)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="1.0.11"></a>
-## [1.0.11](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@1.0.10...pubsweet-component-password-reset-frontend@1.0.11) (2018-04-11)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="1.0.10"></a>
-## [1.0.10](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@1.0.9...pubsweet-component-password-reset-frontend@1.0.10) (2018-04-03)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="1.0.9"></a>
-## [1.0.9](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@1.0.8...pubsweet-component-password-reset-frontend@1.0.9) (2018-03-30)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="1.0.8"></a>
-## [1.0.8](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@1.0.7...pubsweet-component-password-reset-frontend@1.0.8) (2018-03-28)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="1.0.7"></a>
-## [1.0.7](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@1.0.6...pubsweet-component-password-reset-frontend@1.0.7) (2018-03-27)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="1.0.6"></a>
-## [1.0.6](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@1.0.5...pubsweet-component-password-reset-frontend@1.0.6) (2018-03-19)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="1.0.5"></a>
-## [1.0.5](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@1.0.4...pubsweet-component-password-reset-frontend@1.0.5) (2018-03-15)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="1.0.4"></a>
-
-## [1.0.4](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@1.0.3...pubsweet-component-password-reset-frontend@1.0.4) (2018-03-09)
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="1.0.3"></a>
-
-## [1.0.3](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@1.0.2...pubsweet-component-password-reset-frontend@1.0.3) (2018-03-06)
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="1.0.2"></a>
-
-## [1.0.2](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@1.0.1...pubsweet-component-password-reset-frontend@1.0.2) (2018-03-05)
-
-### Bug Fixes
-
-* **components:** PasswordReset was still using a CSS variable ([e1c2c84](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/e1c2c84))
-
-<a name="1.0.1"></a>
-
-## [1.0.1](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@1.0.0...pubsweet-component-password-reset-frontend@1.0.1) (2018-02-16)
-
-**Note:** Version bump only for package pubsweet-component-password-reset-frontend
-
-<a name="1.0.0"></a>
-
-# [1.0.0](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-password-reset-frontend@0.2.3...pubsweet-component-password-reset-frontend@1.0.0) (2018-02-02)
-
-### Features
-
-* **client:** upgrade React to version 16 ([626cf59](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/626cf59)), closes [#65](https://gitlab.coko.foundation/pubsweet/pubsweet/issues/65)
-
-### BREAKING CHANGES
-
-* **client:** Upgrade React to version 16
diff --git a/packages/components/PasswordResetFrontend/PasswordReset.jsx b/packages/components/PasswordResetFrontend/PasswordReset.jsx
deleted file mode 100644
index 34accdeb1..000000000
--- a/packages/components/PasswordResetFrontend/PasswordReset.jsx
+++ /dev/null
@@ -1,258 +0,0 @@
-import React from 'react'
-import { Link, withRouter } from 'react-router-dom'
-import PropTypes from 'prop-types'
-import queryString from 'query-string'
-import styled from 'styled-components'
-import { TextField, Button } from '@pubsweet/ui'
-import { th } from '@pubsweet/ui-toolkit'
-import * as api from 'pubsweet-client/src/helpers/api'
-
-const Root = styled.div`
-  margin: 0 auto;
-  width: 40ch;
-`
-
-const Alert = styled.div`
-  color: ${th('colorError')};
-`
-
-class PasswordReset extends React.Component {
-  constructor(props) {
-    super(props)
-
-    this.state = this.getInitialState()
-  }
-
-  getInitialState() {
-    return {
-      username: '',
-      emailSent: false,
-      emailError: false,
-      emailErrorMessage: null,
-      emailSending: false,
-      password: '',
-      passwordChanged: false,
-      passwordError: false,
-      passwordErrorMessage: null,
-      passwordSending: false,
-    }
-  }
-
-  componentWillReceiveProps() {
-    this.setState(this.getInitialState())
-  }
-
-  static post(data) {
-    return api.create('/password-reset', data)
-  }
-
-  parsedQuery() {
-    return queryString.parse(this.props.location.search)
-  }
-
-  handleUsernameChange = e => {
-    this.setState({ username: e.target.value })
-  }
-
-  handlePasswordChange = e => {
-    this.setState({ password: e.target.value })
-  }
-
-  handleUsernameSubmit = e => {
-    e.preventDefault()
-
-    const { username } = this.state
-
-    if (username) {
-      this.initiatePasswordReset({ username })
-    } else {
-      this.setState({ emailError: 'Please enter a username' })
-    }
-  }
-
-  handlePasswordSubmit = e => {
-    e.preventDefault()
-
-    const { token, username } = this.parsedQuery()
-
-    const { password } = this.state
-
-    // TODO: enter twice and confirm?
-
-    if (password) {
-      this.resetPassword({ password, token, username })
-    } else {
-      this.setState({ passwordError: 'Please enter a new password' })
-    }
-  }
-
-  async initiatePasswordReset(data) {
-    this.setState({
-      emailSent: false,
-      emailError: false,
-      emailErrorMessage: null,
-      emailSending: true,
-    })
-
-    try {
-      await PasswordReset.post(data)
-      this.setState({
-        emailSent: true,
-        emailError: false,
-        emailSending: false,
-      })
-    } catch (err) {
-      this.setState({
-        emailError: true,
-        emailErrorMessage: err.error || 'There was an unexpected error',
-        emailSending: false,
-      })
-    }
-  }
-
-  async resetPassword(data) {
-    this.setState({
-      passwordChanged: false,
-      passwordError: false,
-      passwordErrorMessage: null,
-      passwordSending: true,
-    })
-
-    try {
-      await PasswordReset.post(data)
-      this.setState({
-        passwordChanged: true,
-        passwordError: false,
-        passwordSending: false,
-      })
-    } catch (err) {
-      this.setState({
-        passwordError: true,
-        passwordErrorMessage: err.error || 'There was an unexpected error',
-        passwordSending: false,
-      })
-    }
-  }
-
-  render() {
-    const {
-      username,
-      emailSent,
-      emailErrorMessage,
-      emailSending,
-      password,
-      passwordChanged,
-      passwordErrorMessage,
-      passwordSending,
-    } = this.state
-
-    const { token } = this.parsedQuery()
-
-    const buildForm = () => {
-      if (passwordChanged) {
-        return (
-          <Alert>
-            Your password has been changed, you can now{' '}
-            <Link to="/login">login with the new password</Link>.
-          </Alert>
-        )
-      }
-
-      if (token) {
-        // TODO: validate token on page load?
-
-        return (
-          <form onSubmit={this.handlePasswordSubmit}>
-            <TextField
-              label="New password"
-              onChange={this.handlePasswordChange}
-              placeholder="Enter a new password…"
-              type="password"
-              value={password}
-            />
-
-            <Button disabled={passwordSending} type="submit">
-              {passwordSending ? 'Saving…' : 'Save new password'}
-            </Button>
-          </form>
-        )
-      }
-
-      if (emailSent) {
-        return (
-          <Alert bsStyle="success">
-            An email has been sent containing further instructions.
-          </Alert>
-        )
-      }
-
-      // TODO: allow email instead of username?
-
-      return (
-        <form onSubmit={this.handleUsernameSubmit}>
-          <TextField
-            label="Username"
-            onChange={this.handleUsernameChange}
-            placeholder="Enter your username"
-            type="text"
-            value={username}
-          />
-          <Button disabled={emailSending} type="submit">
-            {emailSending ? 'Sending…' : 'Send email'}
-          </Button>
-        </form>
-      )
-    }
-
-    const buildError = error => {
-      if (!error) return null
-
-      return (
-        <Alert bsStyle="warning">
-          <i className="fa fa-exclamation-circle" /> {buildErrorMessage(error)}
-        </Alert>
-      )
-    }
-
-    const buildErrorMessage = error => {
-      if (error === 'expired') {
-        return (
-          <span>
-            The token is only valid for 24 hours, please{' '}
-            <Link to="/password-reset">request a new password reset email</Link>
-          </span>
-        )
-      }
-
-      if (error === 'invalid') {
-        return (
-          <span>
-            The token is no longer valid, please{' '}
-            <Link to="/password-reset">request a new password reset email</Link>
-          </span>
-        )
-      }
-
-      return error
-    }
-
-    return (
-      <Root>
-        {buildError(emailErrorMessage)}
-        {buildError(passwordErrorMessage)}
-
-        <h1>Password reset</h1>
-
-        {buildForm()}
-
-        <Link to="/login">Return to login form</Link>
-      </Root>
-    )
-  }
-}
-
-PasswordReset.propTypes = {
-  location: PropTypes.object.isRequired,
-}
-
-export default withRouter(PasswordReset)
diff --git a/packages/components/PasswordResetFrontend/index.js b/packages/components/PasswordResetFrontend/index.js
deleted file mode 100644
index 0c07eb363..000000000
--- a/packages/components/PasswordResetFrontend/index.js
+++ /dev/null
@@ -1,5 +0,0 @@
-module.exports = {
-  frontend: {
-    components: [() => require('./PasswordReset')],
-  },
-}
diff --git a/packages/components/PasswordResetFrontend/package.json b/packages/components/PasswordResetFrontend/package.json
deleted file mode 100644
index 101ba9466..000000000
--- a/packages/components/PasswordResetFrontend/package.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
-  "name": "pubsweet-component-password-reset-frontend",
-  "version": "3.0.7",
-  "description": "Password reset frontend component for PubSweet",
-  "main": "index.js",
-  "author": "Collaborative Knowledge Foundation",
-  "license": "MIT",
-  "dependencies": {
-    "@pubsweet/ui": "^9.1.3",
-    "@pubsweet/ui-toolkit": "^2.0.7",
-    "prop-types": "^15.5.10",
-    "query-string": "^5.0.0",
-    "react-router": "^4.2.0",
-    "styled-components": "^4.1.1"
-  },
-  "peerDependencies": {
-    "pubsweet-client": ">=1.0.0",
-    "react": ">=16",
-    "react-router-dom": "^4.3.1"
-  },
-  "repository": {
-    "type": "git",
-    "url": "https://gitlab.coko.foundation/pubsweet/pubsweet",
-    "path": "PasswordResetFrontend"
-  }
-}
diff --git a/packages/components/Polling-server/CHANGELOG.md b/packages/components/Polling-server/CHANGELOG.md
deleted file mode 100644
index ae4411dfc..000000000
--- a/packages/components/Polling-server/CHANGELOG.md
+++ /dev/null
@@ -1,69 +0,0 @@
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-<a name="0.0.9"></a>
-## [0.0.9](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/@pubsweet/component-polling-server@0.0.8...@pubsweet/component-polling-server@0.0.9) (2018-10-17)
-
-
-### Bug Fixes
-
-* sync cache added ([6989dd6](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/6989dd6))
-
-
-
-
-<a name="0.0.8"></a>
-## [0.0.8](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/@pubsweet/component-polling-server@0.0.7...@pubsweet/component-polling-server@0.0.8) (2018-09-25)
-
-
-
-
-**Note:** Version bump only for package @pubsweet/component-polling-server
-
-<a name="0.0.7"></a>
-## [0.0.7](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/@pubsweet/component-polling-server@0.0.6...@pubsweet/component-polling-server@0.0.7) (2018-07-27)
-
-
-
-
-**Note:** Version bump only for package @pubsweet/component-polling-server
-
-<a name="0.0.6"></a>
-## [0.0.6](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/@pubsweet/component-polling-server@0.0.5...@pubsweet/component-polling-server@0.0.6) (2018-06-19)
-
-
-### Bug Fixes
-
-* **polling server:** locking and unlocking handled in server now ([19ac6bf](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/19ac6bf))
-
-
-
-
-<a name="0.0.5"></a>
-## [0.0.5](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/@pubsweet/component-polling-server@0.0.4...@pubsweet/component-polling-server@0.0.5) (2018-04-03)
-
-
-
-
-**Note:** Version bump only for package @pubsweet/component-polling-server
-
-<a name="0.0.4"></a>
-## [0.0.4](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/@pubsweet/component-polling-server@0.0.3...@pubsweet/component-polling-server@0.0.4) (2018-03-27)
-
-
-### Bug Fixes
-
-* **polling-server:** remove revs ([b42cecd](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/b42cecd))
-
-
-
-
-<a name="0.0.3"></a>
-## [0.0.3](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/@pubsweet/component-polling-server@0.0.2...@pubsweet/component-polling-server@0.0.3) (2018-03-19)
-
-
-
-
-**Note:** Version bump only for package @pubsweet/component-polling-server
diff --git a/packages/components/Polling-server/PollingServer.js b/packages/components/Polling-server/PollingServer.js
deleted file mode 100644
index 6667047af..000000000
--- a/packages/components/Polling-server/PollingServer.js
+++ /dev/null
@@ -1,240 +0,0 @@
-const config = require('config')
-
-const logger = require('@pubsweet/logger')
-
-let lockedFragments = {}
-const initCache = async Fragment => {
-  const allFragments = await Fragment.all()
-  for (let i = 0; i < allFragments.length; i += 1) {
-    const currentFragment = allFragments[i]
-    if (currentFragment.lock && currentFragment.lock !== null) {
-      const { id } = currentFragment
-      lockedFragments[id] = currentFragment.lock.editor.userId
-    }
-  }
-  setInterval(() => cacheSync(Fragment), 8000)
-}
-
-const cacheSync = async Fragment => {
-  logger.info(`Syncing cache`)
-  const syncedLockedFragments = {}
-  const allFragments = await Fragment.all()
-  for (let i = 0; i < allFragments.length; i += 1) {
-    const currentFragment = allFragments[i]
-    if (currentFragment.lock && currentFragment.lock !== null) {
-      const { id } = currentFragment
-      syncedLockedFragments[id] = currentFragment.lock.editor.userId
-    }
-  }
-  lockedFragments = syncedLockedFragments
-}
-
-const PollingServer = app => {
-  const { Fragment, Collection, User } = app.locals.models
-  const { authsome } = app.locals
-  const tasks = {}
-  const { timer } = config.get('@pubsweet/component-polling-server')
-  const pollingTime = timer || 3000
-
-  initCache(Fragment)
-
-  const setTimer = (handler, milisecond, opts) => {
-    logger.info(
-      `Initiating timmer for FragmentID:${opts.fragmentId}, CollectionID:${
-        opts.collectionId
-      }, User:${opts.user.username}`,
-    )
-    logger.info(`# of running tasks: ${Object.keys(tasks).length}`)
-    if (Object.keys(tasks).length > 0) {
-      logger.info(`Clearing previous timmer for FragmentID:${opts.fragmentId}`)
-      clearTimeout(tasks[opts.fragmentId])
-      delete tasks[opts.fragmentId]
-    }
-    logger.info(`Task for FragmentID:${opts.fragmentId} cleared`)
-    logger.info(`# of running tasks: ${Object.keys(tasks).length}`)
-    try {
-      logger.info(`New timmer for FragmentID:${opts.fragmentId}`)
-      tasks[opts.fragmentId] = setTimeout(handler, milisecond, opts)
-    } catch (e) {
-      logger.error(`In setTimmer: ${e}`)
-      throw new Error(e)
-    }
-  }
-
-  const unlocker = async opts => {
-    const { collectionId, fragmentId } = opts
-    logger.info(
-      `Initialize unlocker for FragmentID:${opts.fragmentId}, CollectionID:${
-        opts.collectionId
-      }`,
-    )
-    try {
-      const collection = await Collection.find(collectionId)
-
-      if (!collection.fragments.includes(fragmentId)) {
-        logger.error(
-          `Collection ${collectionId} does not contain fragment ${fragmentId}`,
-        )
-        throw new Error(
-          `collection ${collection.id} does not contain fragment ${fragmentId}`,
-        )
-      }
-      logger.info('Collection found')
-
-      const fragment = await Fragment.find(fragmentId)
-      logger.info('Fragment found')
-
-      if (fragment.lock === null) return
-
-      const patch = {
-        id: fragment.id,
-        lock: null,
-      }
-
-      logger.info('Fragment Update')
-      await fragment.updateProperties(patch)
-      await fragment.save()
-
-      logger.info(`Fragments Cache before ${JSON.stringify(lockedFragments)}`)
-      delete lockedFragments[fragment.id]
-      logger.info(`Fragments Cache after ${JSON.stringify(lockedFragments)}`)
-      logger.info('Fragment stored')
-      logger.info(
-        `The value for fragment lock now is ${JSON.stringify(fragment.lock)}`,
-      )
-      // fragment.owners = await User.ownersWithUsername(fragment)
-
-      const data = {}
-
-      Object.keys(patch).forEach(key => {
-        data[key] = fragment[key]
-      })
-
-      const update = data
-      app.locals.sse.send({
-        action: 'fragment:patch',
-        data: { fragment: { id: fragment.id }, update },
-      })
-      logger.info('SSE sent')
-
-      logger.info(`# of running tasks: ${Object.keys(tasks).length}`)
-      if (Object.keys(tasks).length > 0) {
-        delete tasks[opts.fragmentId]
-      }
-      logger.info(`Task for FragmentID:${fragmentId} cleared`)
-      logger.info(`# of running tasks: ${Object.keys(tasks).length}`)
-    } catch (err) {
-      logger.error(`In unlocker for fragment ${fragmentId}, error: ${err}`)
-      throw new Error(err)
-    }
-  }
-
-  app.get(
-    '/api/collections/:collectionId/fragments/:fragmentId',
-    async (req, res, next) => {
-      const { collectionId, fragmentId } = req.params
-      const { username } = req.query
-
-      logger.info(
-        `Initiating polling for fragment with id ${fragmentId} of the collection with id ${collectionId} for user ${username}`,
-      )
-
-      try {
-        if (!username) {
-          logger.error('Username not provided')
-          res.status(400).json({ error: 'Username must be specified' })
-          return
-        }
-        const user = await User.findByField('username', username).then(
-          results => (results ? results[0] : null),
-        )
-
-        if (!user) {
-          logger.error(`User ${username} not found`)
-          res.status(400).json({ error: 'User not found' })
-          return
-        }
-
-        const opts = {
-          collectionId,
-          fragmentId,
-          user,
-        }
-
-        // find in cache
-        if (
-          Object.keys(lockedFragments).length > 0 &&
-          lockedFragments[fragmentId]
-        ) {
-          logger.info('Fragment found in cache')
-          if (lockedFragments[fragmentId] === user.id) {
-            logger.info(
-              'Fragment found in cache and it is locked by the correct user',
-            )
-            setTimer(unlocker, pollingTime, opts)
-            res.sendStatus(200)
-          } else {
-            logger.info(
-              `Fragment found in cache but it is not locked from ${
-                user.username
-              }`,
-            )
-            res.sendStatus(403)
-          }
-        } else {
-          const fragment = await Fragment.find(fragmentId)
-          logger.info('Fragment found but not from cache')
-
-          if (fragment) {
-            if (fragment.lock === null) {
-              const patch = {
-                id: fragmentId,
-                lock: {
-                  editor: { username: user.username, userId: user.id },
-                  timestamp: new Date(),
-                },
-              }
-              const object = {
-                current: fragment,
-                update: patch,
-              }
-              const condition = await authsome.can(user.id, 'PATCH', object)
-              if (condition) {
-                logger.info('Fragment Update')
-                await fragment.updateProperties(patch)
-                await fragment.save()
-                lockedFragments[fragment.id] = user.id
-                logger.info('Fragment stored')
-                logger.info(
-                  `The value for fragment lock now is ${fragment.lock}`,
-                )
-                const data = {}
-                Object.keys(patch).forEach(key => {
-                  data[key] = fragment[key]
-                })
-                const update = data
-                app.locals.sse.send({
-                  action: 'fragment:patch',
-                  data: { fragment: { id: fragment.id }, update },
-                })
-                logger.info('SSE sent')
-              }
-            } else if (fragment.lock !== null || fragment.lock !== undefined) {
-              if (fragment.lock.editor.userId !== user.id) {
-                res.sendStatus(403)
-              }
-            }
-            logger.info(`Setting timmer for ${pollingTime} ms`)
-            setTimer(unlocker, pollingTime, opts)
-            res.sendStatus(200)
-          }
-        }
-      } catch (e) {
-        logger.error(`In polling endpoint ${e}`)
-        throw new Error(e)
-      }
-    },
-  )
-}
-
-module.exports = PollingServer
diff --git a/packages/components/Polling-server/index.js b/packages/components/Polling-server/index.js
deleted file mode 100644
index 631bf7cb0..000000000
--- a/packages/components/Polling-server/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = {
-  server: () => app => require('./PollingServer')(app),
-}
diff --git a/packages/components/Polling-server/package.json b/packages/components/Polling-server/package.json
deleted file mode 100644
index c2bbeec93..000000000
--- a/packages/components/Polling-server/package.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
-  "name": "@pubsweet/component-polling-server",
-  "version": "0.0.9",
-  "description": "Polling server component",
-  "main": "index.js",
-  "scripts": {
-    "test": "jest"
-  },
-  "author": "Collaborative Knowledge Foundation",
-  "license": "MIT",
-  "peerDependencies": {
-    "@pubsweet/logger": "^0.2.3",
-    "pubsweet-server": "^7.1.1"
-  },
-  "dependencies": {
-    "config": "^3.0.1"
-  },
-  "repository": {
-    "type": "git",
-    "url": "https://gitlab.coko.foundation/pubsweet/pubsweet",
-    "path": "PollingServer"
-  },
-  "publishConfig": {
-    "access": "public"
-  }
-}
diff --git a/packages/components/PollingClient/CHANGELOG.md b/packages/components/PollingClient/CHANGELOG.md
deleted file mode 100644
index f90c3bcee..000000000
--- a/packages/components/PollingClient/CHANGELOG.md
+++ /dev/null
@@ -1,42 +0,0 @@
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-## [0.0.6](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/@pubsweet/component-polling-client@0.0.5...@pubsweet/component-polling-client@0.0.6) (2019-01-16)
-
-**Note:** Version bump only for package @pubsweet/component-polling-client
-
-
-
-
-
-## [0.0.5](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/@pubsweet/component-polling-client@0.0.4...@pubsweet/component-polling-client@0.0.5) (2019-01-14)
-
-**Note:** Version bump only for package @pubsweet/component-polling-client
-
-
-
-
-
-## [0.0.4](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/@pubsweet/component-polling-client@0.0.3...@pubsweet/component-polling-client@0.0.4) (2019-01-13)
-
-**Note:** Version bump only for package @pubsweet/component-polling-client
-
-
-
-
-
-<a name="0.0.3"></a>
-## [0.0.3](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/@pubsweet/component-polling-client@0.0.2...@pubsweet/component-polling-client@0.0.3) (2018-04-03)
-
-
-
-
-**Note:** Version bump only for package @pubsweet/component-polling-client
-
-<a name="0.0.2"></a>
-
-## [0.0.2](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/@pubsweet/component-polling-client@0.0.1...@pubsweet/component-polling-client@0.0.2) (2018-02-16)
-
-**Note:** Version bump only for package @pubsweet/component-polling-client
diff --git a/packages/components/PollingClient/actions.js b/packages/components/PollingClient/actions.js
deleted file mode 100644
index e6ce19970..000000000
--- a/packages/components/PollingClient/actions.js
+++ /dev/null
@@ -1,44 +0,0 @@
-import fetch from 'isomorphic-fetch'
-import * as T from './types'
-
-function pollingRequest() {
-  return {
-    type: T.POLLING_REQUEST,
-  }
-}
-
-function pollingSuccess() {
-  return {
-    type: T.POLLING_SUCCESS,
-  }
-}
-
-function pollingFailure(message) {
-  return {
-    type: T.POLLING_FAILURE,
-    error: message,
-  }
-}
-
-export function polling(bookId, fragmentId, user) {
-  return dispatch => {
-    dispatch(pollingRequest())
-
-    return fetch(
-      `/api/collections/${bookId}/fragments/${fragmentId}?username=${
-        user.username
-      }`,
-    )
-      .then(response => {
-        if (!response.ok) {
-          throw new Error(response.statusText)
-        }
-        return response
-      })
-      .then(data => dispatch(pollingSuccess()))
-      .catch(err => {
-        dispatch(pollingFailure(err))
-        throw err
-      })
-  }
-}
diff --git a/packages/components/PollingClient/index.js b/packages/components/PollingClient/index.js
deleted file mode 100644
index d2d6dbe5c..000000000
--- a/packages/components/PollingClient/index.js
+++ /dev/null
@@ -1,6 +0,0 @@
-module.exports = {
-  frontend: {
-    actions: () => require('./actions'),
-    reducers: () => require('./reducers'),
-  },
-}
diff --git a/packages/components/PollingClient/package.json b/packages/components/PollingClient/package.json
deleted file mode 100644
index a30071103..000000000
--- a/packages/components/PollingClient/package.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
-  "name": "@pubsweet/component-polling-client",
-  "version": "0.0.6",
-  "description": "A client component that poll the server in order to release the lock of a resource",
-  "main": "index.js",
-  "repository": {
-    "type": "git",
-    "url": "https://gitlab.coko.foundation/pubsweet/pubsweet"
-  },
-  "keywords": [
-    "polling",
-    "lock",
-    "client",
-    "pubsweet"
-  ],
-  "author": "Collaborative Knowledge Foundation",
-  "license": "MIT",
-  "dependencies": {
-    "isomorphic-fetch": "^2.2.1",
-    "react-redux": "^5.0.6",
-    "redux": "^3.7.2"
-  },
-  "peerDependencies": {
-    "pubsweet-client": ">=1.0.0",
-    "react": ">=16"
-  },
-  "publishConfig": {
-    "access": "public"
-  }
-}
diff --git a/packages/components/PollingClient/reducers.js b/packages/components/PollingClient/reducers.js
deleted file mode 100644
index 974c827a6..000000000
--- a/packages/components/PollingClient/reducers.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import { POLLING_FAILURE, POLLING_REQUEST, POLLING_SUCCESS } from './types'
-
-const initialState = {
-  isPolling: false,
-  error: undefined,
-}
-
-export default function polling(state = initialState, action) {
-  switch (action.type) {
-    case POLLING_REQUEST:
-      return Object.assign({}, state, {
-        isPolling: true,
-        error: undefined,
-      })
-
-    case POLLING_SUCCESS:
-      return Object.assign({}, state, {
-        isPolling: false,
-        error: undefined,
-      })
-
-    case POLLING_FAILURE:
-      return Object.assign({}, state, {
-        isPolling: false,
-        error: action.error,
-      })
-
-    default:
-      return state
-  }
-}
diff --git a/packages/components/PollingClient/types.js b/packages/components/PollingClient/types.js
deleted file mode 100644
index 72dc0000d..000000000
--- a/packages/components/PollingClient/types.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export const POLLING_REQUEST = 'POLLING_REQUEST'
-export const POLLING_SUCCESS = 'POLLING_SUCCESS'
-export const POLLING_FAILURE = 'POLLING_FAILURE'
diff --git a/packages/components/PostsManager/CHANGELOG.md b/packages/components/PostsManager/CHANGELOG.md
deleted file mode 100644
index b50a4b67e..000000000
--- a/packages/components/PostsManager/CHANGELOG.md
+++ /dev/null
@@ -1,433 +0,0 @@
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-## [1.0.52](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.51...pubsweet-component-posts-manager@1.0.52) (2019-01-16)
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-
-
-
-
-## [1.0.51](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.50...pubsweet-component-posts-manager@1.0.51) (2019-01-14)
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-
-
-
-
-## [1.0.50](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.49...pubsweet-component-posts-manager@1.0.50) (2019-01-13)
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-
-
-
-
-## [1.0.49](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.48...pubsweet-component-posts-manager@1.0.49) (2019-01-09)
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-
-
-
-
-## [1.0.48](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.47...pubsweet-component-posts-manager@1.0.48) (2018-12-12)
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-
-
-
-
-## [1.0.47](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.46...pubsweet-component-posts-manager@1.0.47) (2018-12-04)
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-
-
-
-
-## [1.0.46](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.45...pubsweet-component-posts-manager@1.0.46) (2018-11-30)
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-
-
-
-
-## [1.0.45](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.44...pubsweet-component-posts-manager@1.0.45) (2018-11-29)
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-
-
-
-
-<a name="1.0.44"></a>
-## [1.0.44](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.43...pubsweet-component-posts-manager@1.0.44) (2018-11-13)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.43"></a>
-## [1.0.43](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.42...pubsweet-component-posts-manager@1.0.43) (2018-11-05)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.42"></a>
-## [1.0.42](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.41...pubsweet-component-posts-manager@1.0.42) (2018-10-17)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.41"></a>
-## [1.0.41](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.40...pubsweet-component-posts-manager@1.0.41) (2018-10-08)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.40"></a>
-## [1.0.40](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.39...pubsweet-component-posts-manager@1.0.40) (2018-09-29)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.39"></a>
-## [1.0.39](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.38...pubsweet-component-posts-manager@1.0.39) (2018-09-28)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.38"></a>
-## [1.0.38](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.37...pubsweet-component-posts-manager@1.0.38) (2018-09-27)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.37"></a>
-## [1.0.37](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.36...pubsweet-component-posts-manager@1.0.37) (2018-09-27)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.36"></a>
-## [1.0.36](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.35...pubsweet-component-posts-manager@1.0.36) (2018-09-25)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.35"></a>
-## [1.0.35](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.34...pubsweet-component-posts-manager@1.0.35) (2018-09-20)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.34"></a>
-## [1.0.34](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.33...pubsweet-component-posts-manager@1.0.34) (2018-09-19)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.33"></a>
-## [1.0.33](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.32...pubsweet-component-posts-manager@1.0.33) (2018-09-06)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.32"></a>
-## [1.0.32](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.31...pubsweet-component-posts-manager@1.0.32) (2018-09-04)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.31"></a>
-## [1.0.31](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.30...pubsweet-component-posts-manager@1.0.31) (2018-08-20)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.30"></a>
-## [1.0.30](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.29...pubsweet-component-posts-manager@1.0.30) (2018-08-17)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.29"></a>
-## [1.0.29](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.28...pubsweet-component-posts-manager@1.0.29) (2018-08-02)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.28"></a>
-## [1.0.28](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.27...pubsweet-component-posts-manager@1.0.28) (2018-07-27)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.27"></a>
-## [1.0.27](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.26...pubsweet-component-posts-manager@1.0.27) (2018-07-12)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.26"></a>
-## [1.0.26](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.25...pubsweet-component-posts-manager@1.0.26) (2018-07-09)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.25"></a>
-## [1.0.25](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.24...pubsweet-component-posts-manager@1.0.25) (2018-07-03)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.24"></a>
-## [1.0.24](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.23...pubsweet-component-posts-manager@1.0.24) (2018-07-02)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.23"></a>
-## [1.0.23](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.22...pubsweet-component-posts-manager@1.0.23) (2018-06-28)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.22"></a>
-## [1.0.22](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.21...pubsweet-component-posts-manager@1.0.22) (2018-06-28)
-
-
-### Bug Fixes
-
-* **monorepo:** fix versions of ui across repo ([72ada07](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/72ada07))
-
-
-
-
-<a name="1.0.21"></a>
-## [1.0.21](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.20...pubsweet-component-posts-manager@1.0.21) (2018-06-19)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.20"></a>
-## [1.0.20](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.19...pubsweet-component-posts-manager@1.0.20) (2018-05-21)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.19"></a>
-## [1.0.19](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.18...pubsweet-component-posts-manager@1.0.19) (2018-05-18)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.18"></a>
-## [1.0.18](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.17...pubsweet-component-posts-manager@1.0.18) (2018-05-10)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.17"></a>
-## [1.0.17](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.16...pubsweet-component-posts-manager@1.0.17) (2018-05-09)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.16"></a>
-## [1.0.16](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.15...pubsweet-component-posts-manager@1.0.16) (2018-05-03)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.15"></a>
-## [1.0.15](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.14...pubsweet-component-posts-manager@1.0.15) (2018-05-03)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.14"></a>
-## [1.0.14](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.13...pubsweet-component-posts-manager@1.0.14) (2018-04-25)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.13"></a>
-## [1.0.13](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.12...pubsweet-component-posts-manager@1.0.13) (2018-04-24)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.12"></a>
-## [1.0.12](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.11...pubsweet-component-posts-manager@1.0.12) (2018-04-11)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.11"></a>
-## [1.0.11](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.10...pubsweet-component-posts-manager@1.0.11) (2018-04-03)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.10"></a>
-## [1.0.10](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.9...pubsweet-component-posts-manager@1.0.10) (2018-03-30)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.9"></a>
-## [1.0.9](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.8...pubsweet-component-posts-manager@1.0.9) (2018-03-28)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.8"></a>
-## [1.0.8](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.7...pubsweet-component-posts-manager@1.0.8) (2018-03-27)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.7"></a>
-## [1.0.7](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.6...pubsweet-component-posts-manager@1.0.7) (2018-03-19)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.6"></a>
-## [1.0.6](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.5...pubsweet-component-posts-manager@1.0.6) (2018-03-15)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.5"></a>
-
-## [1.0.5](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.4...pubsweet-component-posts-manager@1.0.5) (2018-03-09)
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.4"></a>
-
-## [1.0.4](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.3...pubsweet-component-posts-manager@1.0.4) (2018-03-06)
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.3"></a>
-
-## [1.0.3](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.2...pubsweet-component-posts-manager@1.0.3) (2018-03-05)
-
-### Bug Fixes
-
-* **components:** correctly redirect when edit button is clicked ([faca509](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/faca509))
-
-<a name="1.0.2"></a>
-
-## [1.0.2](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.1...pubsweet-component-posts-manager@1.0.2) (2018-02-23)
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.1"></a>
-
-## [1.0.1](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@1.0.0...pubsweet-component-posts-manager@1.0.1) (2018-02-16)
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
-
-<a name="1.0.0"></a>
-
-# [1.0.0](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@0.6.10...pubsweet-component-posts-manager@1.0.0) (2018-02-02)
-
-### Features
-
-* **client:** upgrade React to version 16 ([626cf59](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/626cf59)), closes [#65](https://gitlab.coko.foundation/pubsweet/pubsweet/issues/65)
-
-### BREAKING CHANGES
-
-* **client:** Upgrade React to version 16
-
-<a name="0.6.10"></a>
-
-## [0.6.10](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-posts-manager@0.6.9...pubsweet-component-posts-manager@0.6.10) (2018-02-02)
-
-**Note:** Version bump only for package pubsweet-component-posts-manager
diff --git a/packages/components/PostsManager/Post.jsx b/packages/components/PostsManager/Post.jsx
deleted file mode 100644
index e01bd32a2..000000000
--- a/packages/components/PostsManager/Post.jsx
+++ /dev/null
@@ -1,130 +0,0 @@
-import React from 'react'
-import { withRouter } from 'react-router'
-import PropTypes from 'prop-types'
-import { Button, EditableValue } from '@pubsweet/ui'
-
-import Authorize from 'pubsweet-client/src/helpers/Authorize'
-
-class Post extends React.Component {
-  constructor(props) {
-    super(props)
-    this.onUpdateTitle = this.onUpdateTitle.bind(this)
-    this.onPublish = this.onPublish.bind(this)
-    this.onUnpublish = this.onUnpublish.bind(this)
-    this.onDestroyClick = this.onDestroyClick.bind(this)
-    this.onDoubleClick = this.onDoubleClick.bind(this)
-
-    this.state = {
-      isEditing: false,
-    }
-  }
-
-  onUpdateTitle(title) {
-    this.props.update(
-      this.props.blog,
-      Object.assign(this.props.blogpost, {
-        title,
-      }),
-    )
-  }
-
-  onPublish() {
-    this.props.update(
-      this.props.blog,
-      Object.assign(this.props.blogpost, {
-        published_at: new Date(),
-        published: true,
-      }),
-    )
-  }
-
-  onUnpublish() {
-    this.props.update(
-      this.props.blog,
-      Object.assign(this.props.blogpost, {
-        published: false,
-      }),
-    )
-  }
-
-  onDestroyClick() {
-    this.props.delete(this.props.blog, this.props.blogpost)
-  }
-
-  onDoubleClick() {
-    this.setState({ isEditing: true })
-  }
-
-  render() {
-    const { blogpost, number } = this.props
-
-    let changePublished
-    if (!blogpost.published) {
-      changePublished = (
-        <Button onClick={this.onPublish} plain>
-          Publish
-        </Button>
-      )
-    } else {
-      changePublished = (
-        <Button onClick={this.onUnpublish} plain>
-          Unpublish
-        </Button>
-      )
-    }
-
-    if (blogpost.published_at) {
-      blogpost.published_at = new Date(blogpost.published_at).toDateString()
-    }
-
-    return (
-      <tr key={blogpost.key}>
-        <td>{number}</td>
-        <td>
-          <EditableValue
-            onSave={this.onUpdateTitle}
-            required
-            value={this.props.blogpost.title}
-          />
-        </td>
-        <td>{blogpost.owners.map(owner => owner.username).join(', ')}</td>
-        <td>
-          {blogpost.published ? 'Published' : 'Unpublished'} <br />
-          {blogpost.published_at}
-        </td>
-        <td>
-          <Authorize object={blogpost} operation="PATCH">
-            <Button
-              onClick={() =>
-                this.props.history.push(`/manage/sciencewriter/${blogpost.id}`)
-              }
-              plain
-            >
-              Edit
-            </Button>
-          </Authorize>
-
-          <Authorize object={blogpost} operation="PATCH">
-            {changePublished}
-          </Authorize>
-
-          <Authorize object={blogpost} operation="DELETE">
-            <Button onClick={this.onDestroyClick} plain>
-              Delete
-            </Button>
-          </Authorize>
-        </td>
-      </tr>
-    )
-  }
-}
-
-Post.propTypes = {
-  number: PropTypes.number,
-  blog: PropTypes.object,
-  blogpost: PropTypes.object,
-  delete: PropTypes.func,
-  update: PropTypes.func,
-}
-
-export default withRouter(Post)
diff --git a/packages/components/PostsManager/PostCreator.jsx b/packages/components/PostsManager/PostCreator.jsx
deleted file mode 100644
index a03d17783..000000000
--- a/packages/components/PostsManager/PostCreator.jsx
+++ /dev/null
@@ -1,51 +0,0 @@
-import React from 'react'
-import PropTypes from 'prop-types'
-import { Button, TextField } from '@pubsweet/ui'
-
-export default class PostCreator extends React.Component {
-  constructor(props) {
-    super(props)
-    this.onSave = this.onSave.bind(this)
-    this.onTitleChange = this.onTitleChange.bind(this)
-    this.state = { title: '' }
-  }
-
-  onTitleChange(event) {
-    this.setState({ title: event ? event.target.value : '' })
-  }
-
-  onSave(event) {
-    event.preventDefault()
-
-    const { title } = this.state
-
-    if (title !== '') {
-      this.props.create({
-        fragmentType: 'blogpost',
-        title,
-        published: false,
-      })
-      this.setState({ title: '' })
-    }
-  }
-
-  render() {
-    return (
-      <form onSubmit={this.onSave}>
-        <h3>Create a new blog post</h3>
-        <TextField
-          label="Title"
-          name="title"
-          onChange={this.onTitleChange}
-          placeholder="One fine day..."
-          required
-          value={this.state.title}
-        />
-        <Button type="submit">Create</Button>
-      </form>
-    )
-  }
-}
-PostCreator.propTypes = {
-  create: PropTypes.func,
-}
diff --git a/packages/components/PostsManager/PostList.jsx b/packages/components/PostsManager/PostList.jsx
deleted file mode 100644
index cfe005822..000000000
--- a/packages/components/PostsManager/PostList.jsx
+++ /dev/null
@@ -1,46 +0,0 @@
-import React from 'react'
-import PropTypes from 'prop-types'
-import Post from './Post'
-
-const PostList = props => {
-  const blogposts = props.blogposts.map((blogpost, key) => {
-    const id = blogpost.id ? blogpost.id : key + 1
-    return (
-      <Post
-        blog={props.blog}
-        blogpost={blogpost}
-        currentUser={props.currentUser}
-        delete={props.delete}
-        key={id}
-        number={key + 1}
-        update={props.update}
-      />
-    )
-  })
-  return (
-    <div>
-      <table>
-        <thead>
-          <tr>
-            <th>#</th>
-            <th>Title</th>
-            <th>Author</th>
-            <th>Status</th>
-            <th>Actions</th>
-          </tr>
-        </thead>
-        <tbody>{blogposts}</tbody>
-      </table>
-    </div>
-  )
-}
-
-PostList.propTypes = {
-  update: PropTypes.func,
-  delete: PropTypes.func,
-  blogposts: PropTypes.array,
-  blog: PropTypes.object,
-  currentUser: PropTypes.object,
-}
-
-export default PostList
diff --git a/packages/components/PostsManager/PostsManager.jsx b/packages/components/PostsManager/PostsManager.jsx
deleted file mode 100644
index 8ba6e3cfc..000000000
--- a/packages/components/PostsManager/PostsManager.jsx
+++ /dev/null
@@ -1,54 +0,0 @@
-import React from 'react'
-import PropTypes from 'prop-types'
-import Authorize from 'pubsweet-client/src/helpers/Authorize'
-import PostList from './PostList'
-import PostCreator from './PostCreator'
-
-export default class PostsManager extends React.Component {
-  componentWillMount() {
-    this.props.actions
-      .getCollections()
-      .then(result => this.props.actions.getFragments(result.collections[0]))
-  }
-
-  render() {
-    const { blog, blogposts, actions, error, currentUser } = this.props
-    const createBlogpost = fragment => actions.createFragment(blog, fragment)
-
-    if (Array.isArray(blogposts) && blog) {
-      return (
-        <Authorize
-          object={blog}
-          operation="GET"
-          unauthorized={<div>You are not authorized to view this page.</div>}
-        >
-          <div>
-            {error ? <div>{error}</div> : null}
-            <h2>{blog && blog.title}</h2>
-            <h3>blog posts</h3>
-            <PostList
-              blog={blog}
-              blogposts={blogposts}
-              currentUser={currentUser}
-              delete={actions.deleteFragment}
-              update={actions.updateFragment}
-            />
-            <Authorize object={blog} operation="POST">
-              <PostCreator create={createBlogpost} />
-            </Authorize>
-          </div>
-        </Authorize>
-      )
-    }
-
-    return null
-  }
-}
-
-PostsManager.propTypes = {
-  blog: PropTypes.object,
-  blogposts: PropTypes.array,
-  actions: PropTypes.object.isRequired,
-  error: PropTypes.string,
-  currentUser: PropTypes.object,
-}
diff --git a/packages/components/PostsManager/PostsManagerContainer.js b/packages/components/PostsManager/PostsManagerContainer.js
deleted file mode 100644
index 7bb33bd5f..000000000
--- a/packages/components/PostsManager/PostsManagerContainer.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import { bindActionCreators } from 'redux'
-import { connect } from 'react-redux'
-import Actions from 'pubsweet-client/src/actions'
-
-import PostsManager from './PostsManager'
-
-function mapState(state) {
-  const blog = state.collections[0]
-  const blogposts = blog
-    ? blog.fragments.map(f => state.fragments[f]).filter(f => f)
-    : []
-
-  return {
-    blog,
-    blogposts,
-    error: state.error,
-    currentUser: state.currentUser,
-  }
-}
-
-function mapDispatch(dispatch) {
-  return {
-    actions: bindActionCreators(Actions, dispatch),
-  }
-}
-
-export default connect(
-  mapState,
-  mapDispatch,
-)(PostsManager)
diff --git a/packages/components/PostsManager/index.js b/packages/components/PostsManager/index.js
deleted file mode 100644
index db202a993..000000000
--- a/packages/components/PostsManager/index.js
+++ /dev/null
@@ -1,5 +0,0 @@
-module.exports = {
-  frontend: {
-    components: [() => require('./PostsManagerContainer')],
-  },
-}
diff --git a/packages/components/PostsManager/package.json b/packages/components/PostsManager/package.json
deleted file mode 100644
index 6180f2439..000000000
--- a/packages/components/PostsManager/package.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
-  "name": "pubsweet-component-posts-manager",
-  "version": "1.0.52",
-  "description": "Basic Posts manager component for PubSweet",
-  "main": "index.js",
-  "author": "Collaborative Knowledge Foundation",
-  "license": "MIT",
-  "dependencies": {
-    "@pubsweet/ui": "^9.1.3",
-    "prop-types": "^15.5.10",
-    "pubsweet-component-form-group": "^2.0.3",
-    "react-redux": "^5.0.6",
-    "react-router-dom": "^4.2.2",
-    "redux": "^3.7.2"
-  },
-  "peerDependencies": {
-    "pubsweet-client": ">=1.0.0",
-    "react": ">=16",
-    "react-router": "^4.3.1"
-  },
-  "repository": {
-    "type": "git",
-    "url": "https://gitlab.coko.foundation/pubsweet/pubsweet",
-    "path": "PostsManager"
-  }
-}
diff --git a/packages/components/Signup/CHANGELOG.md b/packages/components/Signup/CHANGELOG.md
deleted file mode 100644
index 4d784ae49..000000000
--- a/packages/components/Signup/CHANGELOG.md
+++ /dev/null
@@ -1,342 +0,0 @@
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-## [1.0.41](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.40...pubsweet-component-signup@1.0.41) (2019-01-16)
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-
-
-
-
-## [1.0.40](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.39...pubsweet-component-signup@1.0.40) (2019-01-14)
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-
-
-
-
-## [1.0.39](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.38...pubsweet-component-signup@1.0.39) (2019-01-13)
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-
-
-
-
-## [1.0.38](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.37...pubsweet-component-signup@1.0.38) (2019-01-09)
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-
-
-
-
-## [1.0.37](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.36...pubsweet-component-signup@1.0.37) (2018-12-12)
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-
-
-
-
-## [1.0.36](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.35...pubsweet-component-signup@1.0.36) (2018-12-04)
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-
-
-
-
-## [1.0.35](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.34...pubsweet-component-signup@1.0.35) (2018-11-30)
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-
-
-
-
-## [1.0.34](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.33...pubsweet-component-signup@1.0.34) (2018-11-29)
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-
-
-
-
-<a name="1.0.33"></a>
-## [1.0.33](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.32...pubsweet-component-signup@1.0.33) (2018-11-05)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.32"></a>
-## [1.0.32](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.31...pubsweet-component-signup@1.0.32) (2018-10-08)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.31"></a>
-## [1.0.31](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.30...pubsweet-component-signup@1.0.31) (2018-09-27)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.30"></a>
-## [1.0.30](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.29...pubsweet-component-signup@1.0.30) (2018-09-19)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.29"></a>
-## [1.0.29](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.28...pubsweet-component-signup@1.0.29) (2018-09-06)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.28"></a>
-## [1.0.28](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.27...pubsweet-component-signup@1.0.28) (2018-09-04)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.27"></a>
-## [1.0.27](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.26...pubsweet-component-signup@1.0.27) (2018-08-20)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.26"></a>
-## [1.0.26](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.25...pubsweet-component-signup@1.0.26) (2018-08-17)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.25"></a>
-## [1.0.25](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.24...pubsweet-component-signup@1.0.25) (2018-08-02)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.24"></a>
-## [1.0.24](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.23...pubsweet-component-signup@1.0.24) (2018-07-27)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.23"></a>
-## [1.0.23](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.22...pubsweet-component-signup@1.0.23) (2018-07-12)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.22"></a>
-## [1.0.22](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.21...pubsweet-component-signup@1.0.22) (2018-07-09)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.21"></a>
-## [1.0.21](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.20...pubsweet-component-signup@1.0.21) (2018-07-03)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.20"></a>
-## [1.0.20](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.19...pubsweet-component-signup@1.0.20) (2018-07-02)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.19"></a>
-## [1.0.19](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.18...pubsweet-component-signup@1.0.19) (2018-06-28)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.18"></a>
-## [1.0.18](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.17...pubsweet-component-signup@1.0.18) (2018-06-28)
-
-
-### Bug Fixes
-
-* **monorepo:** fix versions of ui across repo ([72ada07](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/72ada07))
-
-
-
-
-<a name="1.0.17"></a>
-## [1.0.17](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.16...pubsweet-component-signup@1.0.17) (2018-05-21)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.16"></a>
-## [1.0.16](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.15...pubsweet-component-signup@1.0.16) (2018-05-18)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.15"></a>
-## [1.0.15](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.14...pubsweet-component-signup@1.0.15) (2018-05-10)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.14"></a>
-## [1.0.14](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.13...pubsweet-component-signup@1.0.14) (2018-05-09)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.13"></a>
-## [1.0.13](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.12...pubsweet-component-signup@1.0.13) (2018-05-03)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.12"></a>
-## [1.0.12](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.11...pubsweet-component-signup@1.0.12) (2018-04-24)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.11"></a>
-## [1.0.11](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.10...pubsweet-component-signup@1.0.11) (2018-04-11)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.10"></a>
-## [1.0.10](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.9...pubsweet-component-signup@1.0.10) (2018-04-03)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.9"></a>
-## [1.0.9](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.8...pubsweet-component-signup@1.0.9) (2018-03-30)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.8"></a>
-## [1.0.8](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.7...pubsweet-component-signup@1.0.8) (2018-03-28)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.7"></a>
-## [1.0.7](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.6...pubsweet-component-signup@1.0.7) (2018-03-27)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.6"></a>
-## [1.0.6](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.5...pubsweet-component-signup@1.0.6) (2018-03-19)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.5"></a>
-## [1.0.5](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.4...pubsweet-component-signup@1.0.5) (2018-03-15)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.4"></a>
-
-## [1.0.4](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.3...pubsweet-component-signup@1.0.4) (2018-03-09)
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.3"></a>
-
-## [1.0.3](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.2...pubsweet-component-signup@1.0.3) (2018-03-06)
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.2"></a>
-
-## [1.0.2](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.1...pubsweet-component-signup@1.0.2) (2018-03-05)
-
-### Bug Fixes
-
-* **components:** add dependency on pubsweet/ui ([f0a1926](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/f0a1926))
-* **components:** signup and login error examples ([3f991ec](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/3f991ec))
-
-<a name="1.0.1"></a>
-
-## [1.0.1](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@1.0.0...pubsweet-component-signup@1.0.1) (2018-02-16)
-
-**Note:** Version bump only for package pubsweet-component-signup
-
-<a name="1.0.0"></a>
-
-# [1.0.0](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-signup@0.5.0...pubsweet-component-signup@1.0.0) (2018-02-02)
-
-### Features
-
-* **client:** upgrade React to version 16 ([626cf59](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/626cf59)), closes [#65](https://gitlab.coko.foundation/pubsweet/pubsweet/issues/65)
-
-### BREAKING CHANGES
-
-* **client:** Upgrade React to version 16
diff --git a/packages/components/Signup/Signup.jsx b/packages/components/Signup/Signup.jsx
deleted file mode 100644
index e6c5bc700..000000000
--- a/packages/components/Signup/Signup.jsx
+++ /dev/null
@@ -1,42 +0,0 @@
-import React from 'react'
-import { Field } from 'redux-form'
-import {
-  CenteredColumn,
-  Link,
-  H1,
-  ErrorText,
-  Button,
-  TextField,
-} from '@pubsweet/ui'
-
-const UsernameInput = props => <TextField label="Username" {...props.input} />
-const EmailInput = props => (
-  <TextField label="Email" {...props.input} type="email" />
-)
-const PasswordInput = props => (
-  <TextField label="Password" {...props.input} type="password" />
-)
-
-const Signup = ({ error, handleSubmit }) => (
-  <CenteredColumn small>
-    <H1>Sign up</H1>
-
-    {error && <ErrorText>{error}</ErrorText>}
-
-    <form onSubmit={handleSubmit}>
-      <Field component={UsernameInput} name="username" />
-      <Field component={EmailInput} name="email" />
-      <Field component={PasswordInput} name="password" />
-      <Button primary type="submit">
-        Sign up
-      </Button>
-    </form>
-
-    <div>
-      <span>Already have an account? </span>
-      <Link to="/login">Login</Link>
-    </div>
-  </CenteredColumn>
-)
-
-export default Signup
diff --git a/packages/components/Signup/Signup.md b/packages/components/Signup/Signup.md
deleted file mode 100644
index 6ba7e53ab..000000000
--- a/packages/components/Signup/Signup.md
+++ /dev/null
@@ -1,26 +0,0 @@
-A login form
-
-```js
-const { reduxForm } = require('redux-form')
-
-const SignupForm = reduxForm({
-  form: 'signup',
-  onChange: values => console.log(values),
-})(Signup)
-;<SignupForm />
-```
-
-Which can have an error message:
-
-```js
-const { reduxForm, SubmissionError } = require('redux-form')
-
-const SignupForm = reduxForm({
-  form: 'signup-error',
-  onSubmit: val => {
-    console.log(val)
-    return Promise.reject(new SubmissionError({ _error: 'Error message' }))
-  },
-})(Signup)
-;<SignupForm />
-```
diff --git a/packages/components/Signup/SignupContainer.js b/packages/components/Signup/SignupContainer.js
deleted file mode 100644
index a1cd2947b..000000000
--- a/packages/components/Signup/SignupContainer.js
+++ /dev/null
@@ -1,20 +0,0 @@
-import { connect } from 'react-redux'
-import { compose } from 'recompose'
-import { reduxForm } from 'redux-form'
-
-import { signupUser } from './actions'
-import Signup from './Signup'
-
-const onSubmit = (values, dispatch) => {
-  dispatch(signupUser(values))
-}
-
-export default compose(
-  reduxForm({
-    form: 'signup',
-    onSubmit,
-  }),
-  connect(state => ({
-    error: state.error,
-  })),
-)(Signup)
diff --git a/packages/components/Signup/actions.js b/packages/components/Signup/actions.js
deleted file mode 100644
index 3c47ea703..000000000
--- a/packages/components/Signup/actions.js
+++ /dev/null
@@ -1,36 +0,0 @@
-import { push } from 'react-router-redux'
-import * as api from 'pubsweet-client/src/helpers/api'
-import * as T from './types'
-
-function signupRequest() {
-  return {
-    type: T.SIGNUP_REQUEST,
-  }
-}
-
-function signupSuccess(user) {
-  return {
-    type: T.SIGNUP_SUCCESS,
-    user,
-  }
-}
-
-function signupFailure(message) {
-  return {
-    type: T.SIGNUP_FAILURE,
-    error: message,
-  }
-}
-
-export function signupUser(user) {
-  return dispatch => {
-    dispatch(signupRequest())
-    return api.create('/users', user).then(
-      user => {
-        dispatch(signupSuccess(user))
-        dispatch(push('/login'))
-      },
-      err => dispatch(signupFailure(err)),
-    )
-  }
-}
diff --git a/packages/components/Signup/index.js b/packages/components/Signup/index.js
deleted file mode 100644
index 97d462d9b..000000000
--- a/packages/components/Signup/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = {
-  frontend: {
-    components: [() => require('./SignupContainer')],
-    actions: () => require('./actions'),
-    reducers: () => require('./reducers'),
-  },
-}
diff --git a/packages/components/Signup/package.json b/packages/components/Signup/package.json
deleted file mode 100644
index 80a7b1efa..000000000
--- a/packages/components/Signup/package.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "name": "pubsweet-component-signup",
-  "version": "1.0.41",
-  "description": "Basic signup form component for PubSweet",
-  "main": "index.js",
-  "author": "Collaborative Knowledge Foundation",
-  "license": "MIT",
-  "dependencies": {
-    "@pubsweet/ui": "^9.1.3",
-    "prop-types": "^15.5.10",
-    "react-bootstrap": "^0.32.0",
-    "react-redux": "^5.0.6",
-    "react-router": "^4.2.0",
-    "recompose": "^0.30.0",
-    "redux": "^3.7.2",
-    "redux-form": "^7.4.2"
-  },
-  "peerDependencies": {
-    "pubsweet-client": ">=1.0.0",
-    "react": ">=16",
-    "react-router-redux": "^4.0.8"
-  },
-  "repository": {
-    "type": "git",
-    "url": "https://gitlab.coko.foundation/pubsweet/pubsweet",
-    "path": "Signup"
-  }
-}
diff --git a/packages/components/Signup/reducers.js b/packages/components/Signup/reducers.js
deleted file mode 100644
index 3b1268c9e..000000000
--- a/packages/components/Signup/reducers.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import { SIGNUP_SUCCESS } from './types'
-
-export default function userSignup(
-  state = {
-    isFetching: false,
-    isAuthenticated: false,
-  },
-  action,
-) {
-  switch (action.type) {
-    case SIGNUP_SUCCESS:
-      return {
-        ...state,
-        isFetching: false,
-        isAuthenticated: true,
-        user: action.user,
-      }
-    default:
-      return state
-  }
-}
diff --git a/packages/components/Signup/types.js b/packages/components/Signup/types.js
deleted file mode 100644
index 8cea7b558..000000000
--- a/packages/components/Signup/types.js
+++ /dev/null
@@ -1,5 +0,0 @@
-// Action types
-
-export const SIGNUP_REQUEST = 'SIGNUP_REQUEST'
-export const SIGNUP_SUCCESS = 'SIGNUP_SUCCESS'
-export const SIGNUP_FAILURE = 'SIGNUP_FAILURE'
diff --git a/packages/components/TeamsManager/CHANGELOG.md b/packages/components/TeamsManager/CHANGELOG.md
deleted file mode 100644
index 211786294..000000000
--- a/packages/components/TeamsManager/CHANGELOG.md
+++ /dev/null
@@ -1,364 +0,0 @@
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-## [1.1.34](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.33...pubsweet-component-teams-manager@1.1.34) (2019-01-16)
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-
-
-
-
-## [1.1.33](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.32...pubsweet-component-teams-manager@1.1.33) (2019-01-14)
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-
-
-
-
-## [1.1.32](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.31...pubsweet-component-teams-manager@1.1.32) (2019-01-13)
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-
-
-
-
-## [1.1.31](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.30...pubsweet-component-teams-manager@1.1.31) (2019-01-09)
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-
-
-
-
-## [1.1.30](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.29...pubsweet-component-teams-manager@1.1.30) (2018-12-12)
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-
-
-
-
-## [1.1.29](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.28...pubsweet-component-teams-manager@1.1.29) (2018-12-04)
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-
-
-
-
-## [1.1.28](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.27...pubsweet-component-teams-manager@1.1.28) (2018-11-30)
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-
-
-
-
-## [1.1.27](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.26...pubsweet-component-teams-manager@1.1.27) (2018-11-29)
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-
-
-
-
-<a name="1.1.26"></a>
-## [1.1.26](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.25...pubsweet-component-teams-manager@1.1.26) (2018-11-05)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.1.25"></a>
-## [1.1.25](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.24...pubsweet-component-teams-manager@1.1.25) (2018-10-08)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.1.24"></a>
-## [1.1.24](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.23...pubsweet-component-teams-manager@1.1.24) (2018-09-27)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.1.23"></a>
-## [1.1.23](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.22...pubsweet-component-teams-manager@1.1.23) (2018-09-25)
-
-
-### Bug Fixes
-
-* **components:** make team manager resitant to undefined objects ([f180348](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/f180348))
-
-
-
-
-<a name="1.1.22"></a>
-## [1.1.22](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.21...pubsweet-component-teams-manager@1.1.22) (2018-09-19)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.1.21"></a>
-## [1.1.21](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.20...pubsweet-component-teams-manager@1.1.21) (2018-09-06)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.1.20"></a>
-## [1.1.20](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.19...pubsweet-component-teams-manager@1.1.20) (2018-09-04)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.1.19"></a>
-## [1.1.19](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.18...pubsweet-component-teams-manager@1.1.19) (2018-08-20)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.1.18"></a>
-## [1.1.18](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.17...pubsweet-component-teams-manager@1.1.18) (2018-08-17)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.1.17"></a>
-## [1.1.17](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.16...pubsweet-component-teams-manager@1.1.17) (2018-08-02)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.1.16"></a>
-## [1.1.16](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.15...pubsweet-component-teams-manager@1.1.16) (2018-07-27)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.1.15"></a>
-## [1.1.15](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.14...pubsweet-component-teams-manager@1.1.15) (2018-07-19)
-
-
-### Bug Fixes
-
-* **teams-manager:** update to fit new server Team model ([ccef37c](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/ccef37c))
-
-
-
-
-<a name="1.1.14"></a>
-## [1.1.14](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.13...pubsweet-component-teams-manager@1.1.14) (2018-07-12)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.1.13"></a>
-## [1.1.13](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.12...pubsweet-component-teams-manager@1.1.13) (2018-07-09)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.1.12"></a>
-## [1.1.12](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.11...pubsweet-component-teams-manager@1.1.12) (2018-07-03)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.1.11"></a>
-## [1.1.11](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.10...pubsweet-component-teams-manager@1.1.11) (2018-07-02)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.1.10"></a>
-## [1.1.10](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.9...pubsweet-component-teams-manager@1.1.10) (2018-06-28)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.1.9"></a>
-## [1.1.9](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.8...pubsweet-component-teams-manager@1.1.9) (2018-06-28)
-
-
-### Bug Fixes
-
-* **monorepo:** fix versions of ui across repo ([72ada07](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/72ada07))
-
-
-
-
-<a name="1.1.8"></a>
-## [1.1.8](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.7...pubsweet-component-teams-manager@1.1.8) (2018-05-21)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.1.7"></a>
-## [1.1.7](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.6...pubsweet-component-teams-manager@1.1.7) (2018-05-18)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.1.6"></a>
-## [1.1.6](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.5...pubsweet-component-teams-manager@1.1.6) (2018-05-10)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.1.5"></a>
-## [1.1.5](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.4...pubsweet-component-teams-manager@1.1.5) (2018-05-09)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.1.4"></a>
-## [1.1.4](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.3...pubsweet-component-teams-manager@1.1.4) (2018-05-03)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.1.3"></a>
-## [1.1.3](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.2...pubsweet-component-teams-manager@1.1.3) (2018-04-24)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.1.2"></a>
-## [1.1.2](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.1...pubsweet-component-teams-manager@1.1.2) (2018-04-11)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.1.1"></a>
-## [1.1.1](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.1.0...pubsweet-component-teams-manager@1.1.1) (2018-04-03)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.1.0"></a>
-# [1.1.0](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.0.8...pubsweet-component-teams-manager@1.1.0) (2018-03-30)
-
-
-### Features
-
-* **components:** remove react-bootstrap ([e66c933](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/e66c933))
-
-
-
-
-<a name="1.0.8"></a>
-## [1.0.8](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.0.7...pubsweet-component-teams-manager@1.0.8) (2018-03-28)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.0.7"></a>
-## [1.0.7](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.0.6...pubsweet-component-teams-manager@1.0.7) (2018-03-27)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.0.6"></a>
-## [1.0.6](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.0.5...pubsweet-component-teams-manager@1.0.6) (2018-03-19)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.0.5"></a>
-## [1.0.5](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.0.4...pubsweet-component-teams-manager@1.0.5) (2018-03-15)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.0.4"></a>
-
-## [1.0.4](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.0.3...pubsweet-component-teams-manager@1.0.4) (2018-03-09)
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.0.3"></a>
-
-## [1.0.3](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.0.2...pubsweet-component-teams-manager@1.0.3) (2018-03-06)
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.0.2"></a>
-
-## [1.0.2](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.0.1...pubsweet-component-teams-manager@1.0.2) (2018-03-05)
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.0.1"></a>
-
-## [1.0.1](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@1.0.0...pubsweet-component-teams-manager@1.0.1) (2018-02-16)
-
-**Note:** Version bump only for package pubsweet-component-teams-manager
-
-<a name="1.0.0"></a>
-
-# [1.0.0](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-teams-manager@0.3.2...pubsweet-component-teams-manager@1.0.0) (2018-02-02)
-
-### Features
-
-* **client:** upgrade React to version 16 ([626cf59](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/626cf59)), closes [#65](https://gitlab.coko.foundation/pubsweet/pubsweet/issues/65)
-
-### BREAKING CHANGES
-
-* **client:** Upgrade React to version 16
diff --git a/packages/components/TeamsManager/package.json b/packages/components/TeamsManager/package.json
deleted file mode 100644
index d0f577cad..000000000
--- a/packages/components/TeamsManager/package.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
-  "name": "pubsweet-component-teams-manager",
-  "version": "1.1.34",
-  "description": "Basic teams manager component for PubSweet",
-  "main": "src/index.js",
-  "author": "Collaborative Knowledge Foundation",
-  "license": "MIT",
-  "dependencies": {
-    "@pubsweet/ui": "^9.1.3",
-    "prop-types": "^15.5.10",
-    "pubsweet-client": "^8.0.4",
-    "react-dom": "^16.2.0",
-    "react-redux": "^5.0.6",
-    "redux": "^3.7.2"
-  },
-  "repository": {
-    "type": "git",
-    "url": "https://gitlab.coko.foundation/pubsweet/pubsweet",
-    "path": "TeamsManager"
-  },
-  "peerDependencies": {
-    "config": "^3.0.1",
-    "react": "^16.7.0"
-  }
-}
diff --git a/packages/components/TeamsManager/src/Team.jsx b/packages/components/TeamsManager/src/Team.jsx
deleted file mode 100644
index 5afc0a474..000000000
--- a/packages/components/TeamsManager/src/Team.jsx
+++ /dev/null
@@ -1,69 +0,0 @@
-import React from 'react'
-import PropTypes from 'prop-types'
-import { Button, Menu } from '@pubsweet/ui'
-
-class Team extends React.Component {
-  constructor(props) {
-    super(props)
-    this.updateMembers = this.updateMembers.bind(this)
-    this.onDelete = this.onDelete.bind(this)
-  }
-
-  updateMembers(members) {
-    const memberIds = members.map(member => member.value)
-    const team = Object.assign(this.props.team, { members: memberIds })
-    this.props.update(team)
-  }
-
-  onDelete() {
-    this.props.delete(this.props.team)
-  }
-
-  render() {
-    const { team, number, users } = this.props
-
-    const options = users.map(user => ({
-      value: user.id,
-      label: user.username,
-    }))
-
-    let object
-    if (team.object) {
-      object = `${team.object.type} ${team.object.id}`
-    } else {
-      object = 'Global'
-    }
-
-    return (
-      <tr>
-        <td>{number}</td>
-        <td>{team.name}</td>
-        <td>{team.teamType}</td>
-        <td>{object}</td>
-        <td>
-          <Menu
-            inline
-            multi
-            name="members"
-            onChange={this.updateMembers}
-            options={options}
-            value={team.members.join(',')}
-          />
-        </td>
-        <td>
-          <Button onClick={this.onDelete}>Delete</Button>
-        </td>
-      </tr>
-    )
-  }
-}
-
-Team.propTypes = {
-  team: PropTypes.object.isRequired,
-  number: PropTypes.number,
-  update: PropTypes.func.isRequired,
-  delete: PropTypes.func.isRequired,
-  users: PropTypes.array.isRequired,
-}
-
-export default Team
diff --git a/packages/components/TeamsManager/src/TeamCreator.jsx b/packages/components/TeamsManager/src/TeamCreator.jsx
deleted file mode 100644
index 8eba50860..000000000
--- a/packages/components/TeamsManager/src/TeamCreator.jsx
+++ /dev/null
@@ -1,112 +0,0 @@
-import React from 'react'
-import PropTypes from 'prop-types'
-import { Button, Menu, TextField } from '@pubsweet/ui'
-
-export default class TeamCreator extends React.Component {
-  constructor(props) {
-    super(props)
-    this.onSave = this.onSave.bind(this)
-    this.onNameChange = this.onNameChange.bind(this)
-    this.onCollectionSelect = this.onCollectionSelect.bind(this)
-    this.onTeamTypeSelect = this.onTeamTypeSelect.bind(this)
-
-    this.state = {
-      collectionSelected: undefined,
-    }
-  }
-
-  onSave(event) {
-    event.preventDefault()
-
-    const name = this.state.teamName
-    const teamType = this.state.teamTypeSelected
-
-    let objectId
-    let objectType
-
-    if (this.state.collectionSelected) {
-      objectId = this.state.collectionSelected
-      objectType = 'collection'
-    }
-
-    if (name && teamType && objectId && objectType) {
-      this.props.create({
-        name,
-        teamType,
-        object: {
-          id: objectId,
-          type: objectType,
-        },
-        members: [],
-      })
-      this.setState({
-        teamName: '',
-        collectionSelected: null,
-        teamTypeSelected: null,
-      })
-    }
-  }
-
-  onNameChange(event) {
-    this.setState({ teamName: event ? event.target.value : '' })
-  }
-
-  onCollectionSelect(collectionId) {
-    this.setState({ collectionSelected: collectionId || null })
-  }
-
-  onTeamTypeSelect(teamType) {
-    this.setState({ teamTypeSelected: teamType || null })
-  }
-
-  render() {
-    let { collections, types } = this.props
-
-    collections = collections.map(collection => ({
-      value: collection.id,
-      label: collection.title,
-    }))
-
-    types = Object.keys(types).map(type => ({
-      value: type,
-      label: `${types[type].name}`,
-    }))
-
-    return (
-      <form onSubmit={this.onSave}>
-        <h3>Create a new team</h3>
-        <TextField
-          label="Name"
-          name="teamName"
-          onChange={this.onNameChange}
-          placeholder="Team Awesome"
-          required
-          value={this.state.teamName}
-        />
-        <h4>Team type</h4>
-        <Menu
-          name="teamType"
-          onChange={this.onTeamTypeSelect}
-          options={types}
-          required
-          value={this.state.teamTypeSelected}
-        />
-        <h4>Collection</h4>
-        <Menu
-          name="collection"
-          onChange={this.onCollectionSelect}
-          options={collections}
-          required
-          value={this.state.collectionSelected}
-        />
-        <Button type="submit">Create</Button>
-      </form>
-    )
-  }
-}
-
-TeamCreator.propTypes = {
-  collections: PropTypes.array,
-  types: PropTypes.object,
-  create: PropTypes.func,
-}
diff --git a/packages/components/TeamsManager/src/TeamsManager.jsx b/packages/components/TeamsManager/src/TeamsManager.jsx
deleted file mode 100644
index 469e71950..000000000
--- a/packages/components/TeamsManager/src/TeamsManager.jsx
+++ /dev/null
@@ -1,66 +0,0 @@
-import React from 'react'
-import PropTypes from 'prop-types'
-import config from 'config'
-
-import Team from './Team'
-import TeamCreator from './TeamCreator'
-
-export default class TeamsManager extends React.Component {
-  componentWillMount() {
-    this.props.actions.getUsers()
-    this.props.actions.getTeams()
-    this.props.actions.getCollections()
-  }
-
-  render() {
-    const { teams = [], actions, error, users, collections } = this.props
-
-    if (teams && collections && users) {
-      return (
-        <div>
-          {error ? <div>{error}</div> : null}
-          <div>
-            <table>
-              <thead>
-                <tr>
-                  <th>#</th>
-                  <th>Name</th>
-                  <th>Type</th>
-                  <th>Object</th>
-                  <th>Members</th>
-                  <th>Actions</th>
-                </tr>
-              </thead>
-              <tbody>
-                {teams.map((team, key) => (
-                  <Team
-                    delete={actions.deleteTeam}
-                    key={team.id}
-                    number={key + 1}
-                    team={team}
-                    update={actions.updateTeam}
-                    users={users}
-                  />
-                ))}
-              </tbody>
-            </table>
-            <TeamCreator
-              collections={collections}
-              create={actions.createTeam}
-              types={config.authsome.teams}
-            />
-          </div>
-        </div>
-      )
-    }
-    return null
-  }
-}
-
-TeamsManager.propTypes = {
-  collections: PropTypes.array,
-  users: PropTypes.array,
-  teams: PropTypes.array,
-  actions: PropTypes.object.isRequired,
-  error: PropTypes.string,
-}
diff --git a/packages/components/TeamsManager/src/TeamsManagerContainer.js b/packages/components/TeamsManager/src/TeamsManagerContainer.js
deleted file mode 100644
index c70267830..000000000
--- a/packages/components/TeamsManager/src/TeamsManagerContainer.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import { bindActionCreators } from 'redux'
-import { connect } from 'react-redux'
-import Actions from 'pubsweet-client/src/actions'
-
-import TeamsManager from './TeamsManager'
-
-function mapStateToProps(state) {
-  return {
-    collections: state.collections,
-    teams: state.teams,
-    users: state.users.users,
-    error: state.error,
-  }
-}
-
-function mapDispatchToProps(dispatch) {
-  return {
-    actions: bindActionCreators(Actions, dispatch),
-  }
-}
-
-export default connect(
-  mapStateToProps,
-  mapDispatchToProps,
-)(TeamsManager)
diff --git a/packages/components/TeamsManager/src/index.js b/packages/components/TeamsManager/src/index.js
deleted file mode 100644
index 1d8f9506a..000000000
--- a/packages/components/TeamsManager/src/index.js
+++ /dev/null
@@ -1,6 +0,0 @@
-module.exports = {
-  client: {
-    components: [() => require('./TeamsManagerContainer')],
-  },
-  container: require('./TeamsManagerContainer'),
-}
diff --git a/packages/components/UsersManager/package.json b/packages/components/UsersManager/package.json
index 54badddb3..c3832601c 100644
--- a/packages/components/UsersManager/package.json
+++ b/packages/components/UsersManager/package.json
@@ -7,9 +7,7 @@
   "license": "MIT",
   "dependencies": {
     "@pubsweet/ui": "^9.1.3",
-    "prop-types": "^15.5.10",
-    "react-redux": "^5.0.6",
-    "redux": "^3.7.2"
+    "prop-types": "^15.5.10"
   },
   "peerDependencies": {
     "config": "^3.0.1",
diff --git a/packages/components/xpub-connect/CHANGELOG.md b/packages/components/xpub-connect/CHANGELOG.md
deleted file mode 100644
index 4635d0c74..000000000
--- a/packages/components/xpub-connect/CHANGELOG.md
+++ /dev/null
@@ -1,258 +0,0 @@
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-## [2.0.7](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@2.0.6...xpub-connect@2.0.7) (2019-01-16)
-
-**Note:** Version bump only for package xpub-connect
-
-
-
-
-
-## [2.0.6](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@2.0.5...xpub-connect@2.0.6) (2019-01-14)
-
-**Note:** Version bump only for package xpub-connect
-
-
-
-
-
-## [2.0.5](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@2.0.4...xpub-connect@2.0.5) (2019-01-13)
-
-**Note:** Version bump only for package xpub-connect
-
-
-
-
-
-## [2.0.4](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@2.0.3...xpub-connect@2.0.4) (2019-01-09)
-
-**Note:** Version bump only for package xpub-connect
-
-
-
-
-
-## [2.0.3](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@2.0.2...xpub-connect@2.0.3) (2018-12-12)
-
-**Note:** Version bump only for package xpub-connect
-
-
-
-
-
-## [2.0.2](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@2.0.1...xpub-connect@2.0.2) (2018-12-04)
-
-**Note:** Version bump only for package xpub-connect
-
-
-
-
-
-## [2.0.1](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@2.0.0...xpub-connect@2.0.1) (2018-11-30)
-
-**Note:** Version bump only for package xpub-connect
-
-
-
-
-
-# [2.0.0](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@1.1.4...xpub-connect@2.0.0) (2018-11-29)
-
-
-### Features
-
-* **various:** upgrade styled-components ([9b886f6](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/9b886f6))
-
-
-### BREAKING CHANGES
-
-* **various:** Replace styled-components injectGlobal with new createGlobalStyle
-
-
-
-
-
-<a name="1.1.4"></a>
-## [1.1.4](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@1.1.3...xpub-connect@1.1.4) (2018-08-02)
-
-
-
-
-**Note:** Version bump only for package xpub-connect
-
-<a name="1.1.3"></a>
-## [1.1.3](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@1.1.2...xpub-connect@1.1.3) (2018-07-09)
-
-
-
-
-**Note:** Version bump only for package xpub-connect
-
-<a name="1.1.2"></a>
-## [1.1.2](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@1.1.1...xpub-connect@1.1.2) (2018-07-02)
-
-
-
-
-**Note:** Version bump only for package xpub-connect
-
-<a name="1.1.1"></a>
-## [1.1.1](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@1.1.0...xpub-connect@1.1.1) (2018-06-28)
-
-
-
-
-**Note:** Version bump only for package xpub-connect
-
-<a name="1.1.0"></a>
-# [1.1.0](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@1.0.1...xpub-connect@1.1.0) (2018-06-28)
-
-
-### Bug Fixes
-
-* **connectpage:** add redirect on anothorized ([2d256a8](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/2d256a8))
-
-
-### Features
-
-* **connectpage:** add authsome mode to ConnectPage ([1f85eff](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/1f85eff))
-
-
-
-
-<a name="1.0.1"></a>
-## [1.0.1](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@1.0.0...xpub-connect@1.0.1) (2018-06-19)
-
-
-
-
-**Note:** Version bump only for package xpub-connect
-
-<a name="1.0.0"></a>
-# [1.0.0](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@0.0.16...xpub-connect@1.0.0) (2018-06-01)
-
-
-### Features
-
-* **ui:** start ui-toolkit module ([2083b9c](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/2083b9c))
-
-
-### BREAKING CHANGES
-
-* **ui:** th now comes from the toolkit, so all th imports from ui are now broken
-
-
-
-
-<a name="0.0.16"></a>
-## [0.0.16](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@0.0.15...xpub-connect@0.0.16) (2018-05-21)
-
-
-
-
-**Note:** Version bump only for package xpub-connect
-
-<a name="0.0.15"></a>
-## [0.0.15](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@0.0.14...xpub-connect@0.0.15) (2018-05-18)
-
-
-
-
-**Note:** Version bump only for package xpub-connect
-
-<a name="0.0.14"></a>
-## [0.0.14](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@0.0.13...xpub-connect@0.0.14) (2018-05-10)
-
-
-
-
-**Note:** Version bump only for package xpub-connect
-
-<a name="0.0.13"></a>
-## [0.0.13](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@0.0.12...xpub-connect@0.0.13) (2018-05-09)
-
-
-
-
-**Note:** Version bump only for package xpub-connect
-
-<a name="0.0.12"></a>
-## [0.0.12](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@0.0.11...xpub-connect@0.0.12) (2018-05-03)
-
-
-
-
-**Note:** Version bump only for package xpub-connect
-
-<a name="0.0.11"></a>
-## [0.0.11](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@0.0.10...xpub-connect@0.0.11) (2018-04-24)
-
-
-
-
-**Note:** Version bump only for package xpub-connect
-
-<a name="0.0.10"></a>
-## [0.0.10](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@0.0.9...xpub-connect@0.0.10) (2018-04-11)
-
-
-
-
-**Note:** Version bump only for package xpub-connect
-
-<a name="0.0.9"></a>
-## [0.0.9](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@0.0.8...xpub-connect@0.0.9) (2018-04-03)
-
-
-
-
-**Note:** Version bump only for package xpub-connect
-
-<a name="0.0.8"></a>
-## [0.0.8](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@0.0.7...xpub-connect@0.0.8) (2018-03-30)
-
-
-
-
-**Note:** Version bump only for package xpub-connect
-
-<a name="0.0.7"></a>
-## [0.0.7](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@0.0.6...xpub-connect@0.0.7) (2018-03-28)
-
-
-
-
-**Note:** Version bump only for package xpub-connect
-
-<a name="0.0.6"></a>
-## [0.0.6](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@0.0.5...xpub-connect@0.0.6) (2018-03-27)
-
-
-
-
-**Note:** Version bump only for package xpub-connect
-
-<a name="0.0.5"></a>
-## [0.0.5](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@0.0.4...xpub-connect@0.0.5) (2018-03-19)
-
-
-
-
-**Note:** Version bump only for package xpub-connect
-
-<a name="0.0.4"></a>
-## [0.0.4](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/xpub-connect@0.0.3...xpub-connect@0.0.4) (2018-03-15)
-
-
-
-
-**Note:** Version bump only for package xpub-connect
-
-<a name="0.0.3"></a>
-
-## 0.0.3 (2018-03-09)
-
-**Note:** Version bump only for package xpub-connect
diff --git a/packages/components/xpub-connect/README.md b/packages/components/xpub-connect/README.md
deleted file mode 100644
index febc4ed48..000000000
--- a/packages/components/xpub-connect/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-## xpub-connect (pubsweet-connect)
-
-This allows components to be defined as part of the composition of a functional component (as an alternative to handling data dependencies in the react lifecycle).
diff --git a/packages/components/xpub-connect/package.json b/packages/components/xpub-connect/package.json
deleted file mode 100644
index ed2019361..000000000
--- a/packages/components/xpub-connect/package.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
-  "name": "xpub-connect",
-  "version": "2.0.7",
-  "main": "src",
-  "author": "Collaborative Knowledge Foundation",
-  "license": "MIT",
-  "files": [
-    "src",
-    "dist"
-  ],
-  "dependencies": {
-    "@pubsweet/ui-toolkit": "^2.0.7",
-    "pubsweet-client": "^8.0.4",
-    "react-redux": "^5.0.2",
-    "react-router-dom": "^4.2.2",
-    "recompose": "^0.26.0",
-    "styled-components": "^4.1.1"
-  },
-  "peerDependencies": {
-    "react": ">=16"
-  }
-}
diff --git a/packages/components/xpub-connect/src/components/ConnectPage.js b/packages/components/xpub-connect/src/components/ConnectPage.js
deleted file mode 100644
index 54e23930c..000000000
--- a/packages/components/xpub-connect/src/components/ConnectPage.js
+++ /dev/null
@@ -1,98 +0,0 @@
-import React from 'react'
-import styled from 'styled-components'
-import Authorize from 'pubsweet-client/src/helpers/Authorize'
-import { compose } from 'recompose'
-import { connect } from 'react-redux'
-import { withRouter, Redirect } from 'react-router-dom'
-import { th } from '@pubsweet/ui-toolkit'
-
-const ErrorMessage = styled.div`
-  color: ${th('colorError')};
-`
-
-const LoadingMessage = styled.div.attrs({
-  children: 'loading…',
-})`
-  display: flex;
-  justify-content: center;
-`
-
-const ConnectPage = requirements => WrappedComponent => {
-  class ConnectedComponent extends React.Component {
-    state = {
-      complete: false,
-      error: null,
-      fetching: false,
-    }
-
-    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 <ErrorMessage>{error}</ErrorMessage>
-
-      if (!complete) return <LoadingMessage />
-
-      const checkObject = this.props.match
-      return (
-        <Authorize
-          object={checkObject}
-          operation="can view page"
-          unauthorized={() => <Redirect to="/" />}
-        >
-          <WrappedComponent {...this.props} />
-        </Authorize>
-      )
-    }
-  }
-
-  return compose(
-    withRouter,
-    connect(state => ({
-      isAuthenticated: state.currentUser.isAuthenticated,
-    })),
-  )(ConnectedComponent)
-}
-
-export default ConnectPage
diff --git a/packages/components/xpub-connect/src/components/index.js b/packages/components/xpub-connect/src/components/index.js
deleted file mode 100644
index bbadf19f6..000000000
--- a/packages/components/xpub-connect/src/components/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as ConnectPage } from './ConnectPage'
diff --git a/packages/components/xpub-connect/src/index.js b/packages/components/xpub-connect/src/index.js
deleted file mode 100644
index cb64ac1b5..000000000
--- a/packages/components/xpub-connect/src/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export * from './components'
diff --git a/packages/components/xpub-dashboard/package.json b/packages/components/xpub-dashboard/package.json
index 966fe6df3..bdda90279 100644
--- a/packages/components/xpub-dashboard/package.json
+++ b/packages/components/xpub-dashboard/package.json
@@ -17,7 +17,6 @@
     "pubsweet-component-ink-frontend": "^1.0.2",
     "react-dropzone": "^4.1.2",
     "react-moment": "^0.6.1",
-    "react-redux": "^5.0.2",
     "react-router-dom": "^4.2.2",
     "recompose": "^0.26.0",
     "styled-components": "^4.1.1",
@@ -38,8 +37,7 @@
     "faker": "^4.1.0",
     "identity-obj-proxy": "^3.0.0",
     "jest": "^24.0.0",
-    "react-test-renderer": "^16.5.2",
-    "redux-mock-store": "^1.4.0"
+    "react-test-renderer": "^16.5.2"
   },
   "peerDependencies": {
     "config": "^3.0.1",
diff --git a/packages/components/xpub-dashboard/src/components/Dashboard.js b/packages/components/xpub-dashboard/src/components/Dashboard.js
index 0fd893d3a..2b9556d2a 100644
--- a/packages/components/xpub-dashboard/src/components/Dashboard.js
+++ b/packages/components/xpub-dashboard/src/components/Dashboard.js
@@ -1,5 +1,5 @@
 import React from 'react'
-import AuthorizeWithGraphQL from 'pubsweet-client/src/helpers/AuthorizeWithGraphQL'
+import Authorize from 'pubsweet-client/src/helpers/Authorize'
 import { Page, Section, Heading, UploadContainer } from './molecules/Page'
 
 import UploadManuscript from './UploadManuscript'
@@ -32,10 +32,7 @@ const Dashboard = ({
         Nothing to do at the moment. Please upload a document.
       </UploadContainer>
     )}
-    <AuthorizeWithGraphQL
-      object={dashboard}
-      operation="can view my submission section"
-    >
+    <Authorize object={dashboard} operation="can view my submission section">
       {dashboard.length > 0 ? (
         <Section>
           <Heading>My Submissions</Heading>
@@ -54,11 +51,8 @@ const Dashboard = ({
           ))}
         </Section>
       ) : null}
-    </AuthorizeWithGraphQL>
-    <AuthorizeWithGraphQL
-      object={dashboard}
-      operation="can view review section"
-    >
+    </Authorize>
+    <Authorize object={dashboard} operation="can view review section">
       {dashboard.length > 0 ? (
         <Section>
           <Heading>To review</Heading>
@@ -73,12 +67,9 @@ const Dashboard = ({
           ))}
         </Section>
       ) : null}
-    </AuthorizeWithGraphQL>
+    </Authorize>
 
-    <AuthorizeWithGraphQL
-      object={dashboard}
-      operation="can view my manuscripts section"
-    >
+    <Authorize object={dashboard} operation="can view my manuscripts section">
       {dashboard.length > 0 ? (
         <Section>
           <Heading>My Manuscripts</Heading>
@@ -91,7 +82,7 @@ const Dashboard = ({
           ))}
         </Section>
       ) : null}
-    </AuthorizeWithGraphQL>
+    </Authorize>
   </Page>
 )
 
diff --git a/packages/components/xpub-dashboard/src/components/Dashboard.test.js b/packages/components/xpub-dashboard/src/components/Dashboard.test.js
index fdf892430..9644bd704 100644
--- a/packages/components/xpub-dashboard/src/components/Dashboard.test.js
+++ b/packages/components/xpub-dashboard/src/components/Dashboard.test.js
@@ -18,10 +18,7 @@ jest.mock('config', () => ({
   },
 }))
 
-jest.mock(
-  'pubsweet-client/src/helpers/AuthorizeWithGraphQL',
-  () => 'AuthorizeWithGraphQL',
-)
+jest.mock('pubsweet-client/src/helpers/Authorize', () => 'Authorize')
 
 const getProjects = item => item.map(c => c.props().version)
 
diff --git a/packages/components/xpub-dashboard/src/components/DashboardPage.integration.test.js b/packages/components/xpub-dashboard/src/components/DashboardPage.integration.test.js
index c8a58f821..957a83a2b 100644
--- a/packages/components/xpub-dashboard/src/components/DashboardPage.integration.test.js
+++ b/packages/components/xpub-dashboard/src/components/DashboardPage.integration.test.js
@@ -39,10 +39,7 @@ jest.mock('pubsweet-client/src/helpers/api', () => ({
   }),
 }))
 
-jest.mock(
-  'pubsweet-client/src/helpers/AuthorizeWithGraphQL',
-  () => 'AuthorizeWithGraphQL',
-)
+jest.mock('pubsweet-client/src/helpers/Authorize', () => 'Authorize')
 
 global.window.localStorage = {
   getItem: jest.fn(() => 'tok123'),
diff --git a/packages/components/xpub-dashboard/src/components/sections/EditorItem.js b/packages/components/xpub-dashboard/src/components/sections/EditorItem.js
index 607b74620..d76dfd56f 100644
--- a/packages/components/xpub-dashboard/src/components/sections/EditorItem.js
+++ b/packages/components/xpub-dashboard/src/components/sections/EditorItem.js
@@ -1,7 +1,7 @@
 import React from 'react'
 
 import styled from 'styled-components'
-import AuthorizeWithGraphQL from 'pubsweet-client/src/helpers/AuthorizeWithGraphQL'
+import Authorize from 'pubsweet-client/src/helpers/Authorize'
 import { Action, ActionGroup } from '@pubsweet/ui'
 import { getUserFromTeam } from 'xpub-selectors'
 
@@ -58,10 +58,7 @@ const getSubmitedDate = version =>
   ) || []
 
 const EditorItem = ({ version, journals }) => (
-  <AuthorizeWithGraphQL
-    object={[version]}
-    operation="can view my manuscripts section"
-  >
+  <Authorize object={[version]} operation="can view my manuscripts section">
     <Item>
       <Header>
         <Status status={version.status} />
@@ -94,7 +91,7 @@ const EditorItem = ({ version, journals }) => (
 
       <Reviews version={version} />
     </Item>
-  </AuthorizeWithGraphQL>
+  </Authorize>
 )
 
 export default EditorItem
diff --git a/packages/components/xpub-dashboard/src/components/sections/EditorItem.test.js b/packages/components/xpub-dashboard/src/components/sections/EditorItem.test.js
index 6b6d90e95..8e4aa675a 100644
--- a/packages/components/xpub-dashboard/src/components/sections/EditorItem.test.js
+++ b/packages/components/xpub-dashboard/src/components/sections/EditorItem.test.js
@@ -24,10 +24,7 @@ jest.mock('config', () => ({
   },
 }))
 
-jest.mock(
-  'pubsweet-client/src/helpers/AuthorizeWithGraphQL',
-  () => 'AuthorizeWithGraphQL',
-)
+jest.mock('pubsweet-client/src/helpers/Authorize', () => 'Authorize')
 
 const journal = {
   reviewStatus: ['invited', 'accepted', 'rejected', 'completed'],
diff --git a/packages/components/xpub-dashboard/src/components/sections/OwnerItem.js b/packages/components/xpub-dashboard/src/components/sections/OwnerItem.js
index 794bf694e..58fdc9c2c 100644
--- a/packages/components/xpub-dashboard/src/components/sections/OwnerItem.js
+++ b/packages/components/xpub-dashboard/src/components/sections/OwnerItem.js
@@ -2,7 +2,7 @@ import React from 'react'
 import { pickBy } from 'lodash'
 
 import { Action, ActionGroup } from '@pubsweet/ui'
-import AuthorizeWithGraphQL from 'pubsweet-client/src/helpers/Authorize'
+import Authorize from 'pubsweet-client/src/helpers/Authorize'
 
 import { Item, Header, Body } from '../molecules/Item'
 import Status from '../Status'
@@ -44,13 +44,13 @@ const OwnerItem = ({ version, journals, deleteManuscript }) => {
   )
 
   const actions = (
-    <AuthorizeWithGraphQL
+    <Authorize
       object={version}
       operation="can delete manuscript"
       unauthorized={unauthorized}
     >
       <ActionGroup>{Object.values(actionButtons)}</ActionGroup>
-    </AuthorizeWithGraphQL>
+    </Authorize>
   )
 
   const body = (
@@ -61,15 +61,12 @@ const OwnerItem = ({ version, journals, deleteManuscript }) => {
   )
 
   return (
-    <AuthorizeWithGraphQL
-      object={[version]}
-      operation="can view my submission section"
-    >
+    <Authorize object={[version]} operation="can view my submission section">
       <Item>
         {itemHeader}
         {body}
       </Item>
-    </AuthorizeWithGraphQL>
+    </Authorize>
   )
 }
 
diff --git a/packages/components/xpub-dashboard/src/components/sections/ReviewerItem.js b/packages/components/xpub-dashboard/src/components/sections/ReviewerItem.js
index d154ea284..d5849dba2 100644
--- a/packages/components/xpub-dashboard/src/components/sections/ReviewerItem.js
+++ b/packages/components/xpub-dashboard/src/components/sections/ReviewerItem.js
@@ -1,6 +1,6 @@
 import React from 'react'
 import { Button } from '@pubsweet/ui'
-import AuthorizeWithGraphQL from 'pubsweet-client/src/helpers/Authorize'
+import Authorize from 'pubsweet-client/src/helpers/Authorize'
 // Enable that when Team Models is updated
 // import { getUserFromTeam } from 'xpub-selectors'
 import { Item, Body, Divider } from '../molecules/Item'
@@ -33,7 +33,7 @@ const ReviewerItem = ({ version, journals, currentUser, reviewerResponse }) => {
     ) || {}
 
   return (
-    <AuthorizeWithGraphQL
+    <Authorize
       key={`${review.id}`}
       object={[version]}
       operation="can view review section"
@@ -85,7 +85,7 @@ const ReviewerItem = ({ version, journals, currentUser, reviewerResponse }) => {
           {status === 'rejected' && 'rejected'}
         </Body>
       </Item>
-    </AuthorizeWithGraphQL>
+    </Authorize>
   )
 }
 
diff --git a/packages/components/xpub-find-reviewers/CHANGELOG.md b/packages/components/xpub-find-reviewers/CHANGELOG.md
deleted file mode 100644
index 3c9bc34b0..000000000
--- a/packages/components/xpub-find-reviewers/CHANGELOG.md
+++ /dev/null
@@ -1,183 +0,0 @@
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-## [0.0.24](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-find-reviewers@0.0.23...pubsweet-component-xpub-find-reviewers@0.0.24) (2019-01-16)
-
-**Note:** Version bump only for package pubsweet-component-xpub-find-reviewers
-
-
-
-
-
-## [0.0.23](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-find-reviewers@0.0.22...pubsweet-component-xpub-find-reviewers@0.0.23) (2019-01-14)
-
-**Note:** Version bump only for package pubsweet-component-xpub-find-reviewers
-
-
-
-
-
-## [0.0.22](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-find-reviewers@0.0.21...pubsweet-component-xpub-find-reviewers@0.0.22) (2019-01-13)
-
-**Note:** Version bump only for package pubsweet-component-xpub-find-reviewers
-
-
-
-
-
-## [0.0.21](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-find-reviewers@0.0.20...pubsweet-component-xpub-find-reviewers@0.0.21) (2019-01-09)
-
-**Note:** Version bump only for package pubsweet-component-xpub-find-reviewers
-
-
-
-
-
-## [0.0.20](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-find-reviewers@0.0.19...pubsweet-component-xpub-find-reviewers@0.0.20) (2018-12-12)
-
-**Note:** Version bump only for package pubsweet-component-xpub-find-reviewers
-
-
-
-
-
-<a name="0.0.19"></a>
-## [0.0.19](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-find-reviewers@0.0.18...pubsweet-component-xpub-find-reviewers@0.0.19) (2018-06-28)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-find-reviewers
-
-<a name="0.0.18"></a>
-## [0.0.18](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-find-reviewers@0.0.17...pubsweet-component-xpub-find-reviewers@0.0.18) (2018-06-19)
-
-
-### Bug Fixes
-
-* **linter:** error ([7db67f9](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/7db67f9))
-
-
-
-
-<a name="0.0.17"></a>
-## [0.0.17](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-find-reviewers@0.0.16...pubsweet-component-xpub-find-reviewers@0.0.17) (2018-06-01)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-find-reviewers
-
-<a name="0.0.16"></a>
-## [0.0.16](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-find-reviewers@0.0.15...pubsweet-component-xpub-find-reviewers@0.0.16) (2018-05-21)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-find-reviewers
-
-<a name="0.0.15"></a>
-## [0.0.15](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-find-reviewers@0.0.14...pubsweet-component-xpub-find-reviewers@0.0.15) (2018-05-18)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-find-reviewers
-
-<a name="0.0.14"></a>
-## [0.0.14](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-find-reviewers@0.0.13...pubsweet-component-xpub-find-reviewers@0.0.14) (2018-05-10)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-find-reviewers
-
-<a name="0.0.13"></a>
-## [0.0.13](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-find-reviewers@0.0.12...pubsweet-component-xpub-find-reviewers@0.0.13) (2018-05-09)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-find-reviewers
-
-<a name="0.0.12"></a>
-## [0.0.12](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-find-reviewers@0.0.11...pubsweet-component-xpub-find-reviewers@0.0.12) (2018-05-03)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-find-reviewers
-
-<a name="0.0.11"></a>
-## [0.0.11](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-find-reviewers@0.0.10...pubsweet-component-xpub-find-reviewers@0.0.11) (2018-04-24)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-find-reviewers
-
-<a name="0.0.10"></a>
-## [0.0.10](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-find-reviewers@0.0.9...pubsweet-component-xpub-find-reviewers@0.0.10) (2018-04-11)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-find-reviewers
-
-<a name="0.0.9"></a>
-## [0.0.9](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-find-reviewers@0.0.8...pubsweet-component-xpub-find-reviewers@0.0.9) (2018-04-03)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-find-reviewers
-
-<a name="0.0.8"></a>
-## [0.0.8](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-find-reviewers@0.0.7...pubsweet-component-xpub-find-reviewers@0.0.8) (2018-03-30)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-find-reviewers
-
-<a name="0.0.7"></a>
-## [0.0.7](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-find-reviewers@0.0.6...pubsweet-component-xpub-find-reviewers@0.0.7) (2018-03-28)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-find-reviewers
-
-<a name="0.0.6"></a>
-## [0.0.6](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-find-reviewers@0.0.5...pubsweet-component-xpub-find-reviewers@0.0.6) (2018-03-27)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-find-reviewers
-
-<a name="0.0.5"></a>
-## [0.0.5](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-find-reviewers@0.0.4...pubsweet-component-xpub-find-reviewers@0.0.5) (2018-03-19)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-find-reviewers
-
-<a name="0.0.4"></a>
-## [0.0.4](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-find-reviewers@0.0.3...pubsweet-component-xpub-find-reviewers@0.0.4) (2018-03-15)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-find-reviewers
-
-<a name="0.0.3"></a>
-
-## 0.0.3 (2018-03-09)
-
-### Bug Fixes
-
-* **xpub:** find-reviewers package name ([1b0ff2d](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/1b0ff2d))
diff --git a/packages/components/xpub-find-reviewers/package.json b/packages/components/xpub-find-reviewers/package.json
deleted file mode 100644
index 5069d5f07..000000000
--- a/packages/components/xpub-find-reviewers/package.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
-  "name": "pubsweet-component-xpub-find-reviewers",
-  "version": "0.0.24",
-  "main": "src",
-  "author": "Collaborative Knowledge Foundation",
-  "license": "MIT",
-  "files": [
-    "src",
-    "dist"
-  ],
-  "dependencies": {
-    "@pubsweet/ui": "^9.1.3",
-    "classnames": "^2.2.6",
-    "faker": "^4.1.0",
-    "pubsweet-client": "^8.0.4",
-    "pubsweet-component-ink-frontend": "^1.0.2",
-    "react-redux": "^5.0.2",
-    "react-router-dom": "^4.2.2",
-    "recompose": "^0.26.0",
-    "xpub-connect": "^2.0.7",
-    "xpub-edit": "^2.5.10",
-    "xpub-selectors": "^0.2.8"
-  },
-  "devDependencies": {
-    "babel-core": "^6.26.0",
-    "babel-loader": "^8.0.5",
-    "@babel/preset-env": "^7.0.0",
-    "@babel/preset-react": "^7.0.0",
-    "faker": "^4.1.0"
-  },
-  "peerDependencies": {
-    "config": "^3.0.1",
-    "lodash": "^4.17.11",
-    "react": ">=16",
-    "react-redux": "^5.0.2",
-    "react-router-dom": "^4.2.2",
-    "redux-form": "^8.1.0"
-  }
-}
diff --git a/packages/components/xpub-find-reviewers/src/components/Author.js b/packages/components/xpub-find-reviewers/src/components/Author.js
deleted file mode 100644
index bbb389f4a..000000000
--- a/packages/components/xpub-find-reviewers/src/components/Author.js
+++ /dev/null
@@ -1,89 +0,0 @@
-import React from 'react'
-import classnames from 'classnames'
-import { Icon, PlainButton } from '@pubsweet/ui'
-import Paper from './Paper'
-import classes from './Author.local.scss'
-import ProjectLink from './ProjectLink'
-
-const Author = ({ author, toggleAuthor, project, version }) => (
-  <div className={classes.root}>
-    {author.hidden ? (
-      <h3 className={classes.title}>
-        <PlainButton
-          className={classes.toggle}
-          onClick={toggleAuthor('hidden')}
-        >
-          Show
-        </PlainButton>
-      </h3>
-    ) : (
-      <h3 className={classes.title}>
-        <ProjectLink
-          id={author.id}
-          page="find-reviewers/author"
-          project={project}
-          target="_blank"
-          version={version}
-        >
-          {author.name}
-        </ProjectLink>
-
-        {author.flagged && (
-          <span className={classes.marker} title="Potential problems!">
-            <Icon color="orange">alert_circle</Icon>
-          </span>
-        )}
-
-        {author.boardMember && (
-          <span className={classes.marker} title="Editorial board member">
-            <Icon color="green">zap</Icon>
-          </span>
-        )}
-
-        {!author.assigned && (
-          <PlainButton
-            className={classnames(classes.toggle, classes.showOnHover)}
-            onClick={toggleAuthor('hidden')}
-          >
-            Hide
-          </PlainButton>
-        )}
-
-        <PlainButton
-          className={classnames(classes.toggle, classes.showOnHover, {
-            [classes.assigned]: !!author.assigned,
-          })}
-          disabled={author.flagged}
-          onClick={toggleAuthor('assigned')}
-        >
-          {author.assigned ? 'Assigned' : 'Assign'}
-        </PlainButton>
-
-        <PlainButton
-          className={classnames(classes.toggle, classes.showOnHover, {
-            [classes.expanded]: !!author.expanded,
-          })}
-          onClick={toggleAuthor('expanded')}
-        >
-          {author.expanded ? 'Collapse' : 'Expand'}
-        </PlainButton>
-      </h3>
-    )}
-
-    {author.expanded && !author.hidden && (
-      <div className={classes.papers}>
-        {author.papers.map(paper => (
-          <Paper
-            id={paper.id}
-            key={paper.id}
-            paper={paper}
-            project={project}
-            version={version}
-          />
-        ))}
-      </div>
-    )}
-  </div>
-)
-
-export default Author
diff --git a/packages/components/xpub-find-reviewers/src/components/Author.local.scss b/packages/components/xpub-find-reviewers/src/components/Author.local.scss
deleted file mode 100644
index 69864efdc..000000000
--- a/packages/components/xpub-find-reviewers/src/components/Author.local.scss
+++ /dev/null
@@ -1,30 +0,0 @@
-.papers {
-  margin: 10px;
-}
-
-.title {
-  display: flex;
-}
-
-.marker {
-  height: 1em;
-  margin-left: 1ch;
-}
-
-.toggle {
-  color: #777;
-  font-size: 10px;
-  margin-left: 2ch;
-}
-
-.root:not(:hover) .showOnHover:not(.assigned) {
-  display: none;
-}
-
-.assigned {
-  color: blue;
-}
-
-.expanded {
-  color: red;
-}
diff --git a/packages/components/xpub-find-reviewers/src/components/Author.md b/packages/components/xpub-find-reviewers/src/components/Author.md
deleted file mode 100644
index 259bc6d8c..000000000
--- a/packages/components/xpub-find-reviewers/src/components/Author.md
+++ /dev/null
@@ -1,26 +0,0 @@
-A suggested author, with a list of authored papers.
-
-```js
-const author = {
-  id: faker.random.uuid(),
-  name: faker.name.findName(),
-  papers: [
-    {
-      id: faker.random.uuid(),
-      title: faker.lorem.sentence(20, 5),
-      scorePercent: faker.random.number({ min: 1, max: 100 }),
-    },
-    {
-      id: faker.random.uuid(),
-      title: faker.lorem.sentence(20, 5),
-      scorePercent: faker.random.number({ min: 1, max: 100 }),
-    },
-    {
-      id: faker.random.uuid(),
-      title: faker.lorem.sentence(20, 5),
-      scorePercent: faker.random.number({ min: 1, max: 100 }),
-    },
-  ],
-}
-;<Author author={author} toggleAuthor={() => null} />
-```
diff --git a/packages/components/xpub-find-reviewers/src/components/AuthorLayout.js b/packages/components/xpub-find-reviewers/src/components/AuthorLayout.js
deleted file mode 100644
index 7bb9cd036..000000000
--- a/packages/components/xpub-find-reviewers/src/components/AuthorLayout.js
+++ /dev/null
@@ -1,63 +0,0 @@
-import React from 'react'
-import { Button } from '@pubsweet/ui'
-import classes from './AuthorLayout.local.scss'
-import Paper from './Paper'
-import { publicationYears } from '../lib/author'
-
-const AuthorLayout = ({ author, assignReviewer, project, version }) => (
-  <div className={classes.root}>
-    <h1 className={classes.title}>
-      {author && (
-        <a href={author.url} rel="noopener noreferrer" target="_blank">
-          {author.name}
-        </a>
-      )}
-    </h1>
-
-    <div className={classes.meta}>
-      <div className={classes.email}>{author.email}</div>
-
-      <div className={classes.affiliation}>{author.affiliation}</div>
-
-      <div className={classes.history}>
-        {publicationYears(author.papers).map(item => (
-          <span
-            className={classes.year}
-            key={item.year}
-            style={{ fontSize: item.size }}
-          >
-            {item.year}
-          </span>
-        ))}
-      </div>
-
-      <div>
-        <Button onClick={assignReviewer}>Assign</Button>
-      </div>
-    </div>
-
-    <div className={classes.row}>
-      <div className={classes.column}>
-        {!!author.papers.length && (
-          <div>
-            <h2 className={classes.heading}>Papers</h2>
-
-            {author.papers.map(paper => (
-              <Paper
-                id={paper.paperId}
-                key={paper.paperId}
-                paper={paper}
-                project={project}
-                version={version}
-              />
-            ))}
-          </div>
-        )}
-      </div>
-
-      <div className={classes.column} />
-    </div>
-  </div>
-)
-
-export default AuthorLayout
diff --git a/packages/components/xpub-find-reviewers/src/components/AuthorLayout.local.scss b/packages/components/xpub-find-reviewers/src/components/AuthorLayout.local.scss
deleted file mode 100644
index 140a4c666..000000000
--- a/packages/components/xpub-find-reviewers/src/components/AuthorLayout.local.scss
+++ /dev/null
@@ -1,37 +0,0 @@
-.root {
-  padding: 0 10px;
-}
-
-.root a {
-  color: inherit;
-  font-style: normal;
-}
-
-.title {
-  font-family: var(--font-author);
-}
-
-.title a {
-  color: inherit;
-  font-style: normal;
-}
-
-.heading {
-  font-family: var(--font-author);
-}
-
-.root a:hover {
-  color: var(--color-primary);
-}
-
-.root a:visited {
-  color: inherit;
-}
-
-.history {
-  margin: 10px 0;
-}
-
-.history .year {
-  margin: 0 3px;
-}
diff --git a/packages/components/xpub-find-reviewers/src/components/AuthorPage.js b/packages/components/xpub-find-reviewers/src/components/AuthorPage.js
deleted file mode 100644
index 4cbeaef58..000000000
--- a/packages/components/xpub-find-reviewers/src/components/AuthorPage.js
+++ /dev/null
@@ -1,96 +0,0 @@
-import React from 'react'
-import faker from 'faker'
-import { compose } from 'recompose'
-import { connect } from 'react-redux'
-import { actions } from 'pubsweet-client'
-import { ConnectPage } from 'xpub-connect'
-import { selectCollection, selectFragment } from 'xpub-selectors'
-import AuthorLayout from './AuthorLayout'
-import { scholar } from '../lib/scholar'
-// import { newestFirst } from '../lib/sort'
-
-class AuthorPage extends React.Component {
-  state = {
-    author: null,
-  }
-
-  componentDidMount() {
-    const { match } = this.props
-
-    this.fetch(match.params.id)
-  }
-
-  componentWillReceiveProps(nextProps) {
-    const { match } = nextProps
-
-    if (match.params.id !== this.props.match.params.id) {
-      this.fetch(match.params.id)
-    }
-  }
-
-  fetch(id) {
-    this.setState({
-      author: null,
-    })
-
-    scholar(`author/${id}`).then(author => {
-      if (this.props.match.params.id !== id) return
-
-      author.email = faker.internet.email()
-
-      author.affiliation = [
-        faker.address.streetAddress(),
-        faker.address.city(),
-        faker.address.country(),
-      ].join(', ')
-
-      this.setState({ author })
-
-      // TODO: need years from the API, this is too many requests
-
-      // Promise.all(
-      //   author.papers.map(paper => scholar(`paper/${paper.paperId}`)),
-      // ).then(papers => {
-      //   author.papers = papers.sort(newestFirst)
-      //   this.setState({ author })
-      // })
-    })
-  }
-
-  assignReviewer = () => {
-    // const { author } = this.state
-    // TODO: need to know the submission to assign this reviewer to
-  }
-
-  render() {
-    const { author } = this.state
-    const { project, version } = this.props
-
-    if (!author) return <div>Loading…</div>
-
-    return (
-      <AuthorLayout
-        assignReviewer={this.assignReviewer}
-        author={author}
-        project={project}
-        version={version}
-      />
-    )
-  }
-}
-
-export default compose(
-  ConnectPage(({ match }) => [
-    actions.getCollection({ id: match.params.project }),
-    actions.getFragment(
-      { id: match.params.project },
-      { id: match.params.version },
-    ),
-  ]),
-  connect((state, { match }) => {
-    const project = selectCollection(state, match.params.project)
-    const version = selectFragment(state, match.params.version)
-
-    return { project, version }
-  }),
-)(AuthorPage)
diff --git a/packages/components/xpub-find-reviewers/src/components/FindReviewersLayout.js b/packages/components/xpub-find-reviewers/src/components/FindReviewersLayout.js
deleted file mode 100644
index 9f227d016..000000000
--- a/packages/components/xpub-find-reviewers/src/components/FindReviewersLayout.js
+++ /dev/null
@@ -1,55 +0,0 @@
-import React from 'react'
-import Author from './Author'
-import Paper from './Paper'
-import Metadata from './Metadata'
-import classes from './FindReviewersLayout.local.scss'
-
-const FindReviewersLayout = ({
-  authors,
-  papers,
-  project,
-  version,
-  error,
-  toggleAuthor,
-}) => (
-  <div className={classes.root}>
-    <Metadata version={version} />
-
-    {error && <div>{error}</div>}
-
-    {authors ? (
-      <div className={classes.row}>
-        <div className={classes.column}>
-          <h2 className={classes.heading}>Similar Papers</h2>
-          {papers.map(paper => (
-            <Paper
-              id={paper.id}
-              key={paper.id}
-              paper={paper}
-              project={project}
-              version={version}
-            />
-          ))}
-        </div>
-
-        <div className={classes.column}>
-          <h2 className={classes.heading}>Suggested Reviewers</h2>
-
-          {authors.map(author => (
-            <Author
-              author={author}
-              key={author.id}
-              project={project}
-              toggleAuthor={toggleAuthor(author.id)}
-              version={version}
-            />
-          ))}
-        </div>
-      </div>
-    ) : (
-      <div>Searching for reviewers…</div>
-    )}
-  </div>
-)
-
-export default FindReviewersLayout
diff --git a/packages/components/xpub-find-reviewers/src/components/FindReviewersLayout.local.scss b/packages/components/xpub-find-reviewers/src/components/FindReviewersLayout.local.scss
deleted file mode 100644
index 2977cf4e2..000000000
--- a/packages/components/xpub-find-reviewers/src/components/FindReviewersLayout.local.scss
+++ /dev/null
@@ -1,36 +0,0 @@
-.root {
-  padding: 0 20px;
-}
-
-.root a {
-  color: inherit;
-  font-style: normal;
-}
-
-.root a:hover {
-  color: var(--color-primary);
-}
-
-.root a:visited {
-  color: inherit;
-}
-
-.row {
-  display: flex;
-}
-
-.column {
-  flex: 1;
-  font-family: var(--font-interface);
-  padding-right: 20px;
-}
-
-.heading {
-  display: flex;
-  font-family: var(--font-author);
-  justify-content: space-between;
-}
-
-.button {
-  font-size: 12px;
-}
diff --git a/packages/components/xpub-find-reviewers/src/components/FindReviewersLayout.md b/packages/components/xpub-find-reviewers/src/components/FindReviewersLayout.md
deleted file mode 100644
index 05ac5b4ee..000000000
--- a/packages/components/xpub-find-reviewers/src/components/FindReviewersLayout.md
+++ /dev/null
@@ -1,58 +0,0 @@
-A page showing submission metadata and a list of suggested reviewers and similar papers.
-
-```js
-const papers = [
-  {
-    id: faker.random.uuid(),
-    title: faker.lorem.sentence(20, 5),
-    scorePercent: faker.random.number({ min: 1, max: 100 }),
-  },
-  {
-    id: faker.random.uuid(),
-    title: faker.lorem.sentence(20, 5),
-    scorePercent: faker.random.number({ min: 1, max: 100 }),
-  },
-  {
-    id: faker.random.uuid(),
-    title: faker.lorem.sentence(20, 5),
-    scorePercent: faker.random.number({ min: 1, max: 100 }),
-  },
-]
-
-const authors = [
-  {
-    id: faker.random.uuid(),
-    name: faker.name.findName(),
-    papers: papers.slice(0, 2),
-  },
-  {
-    id: faker.random.uuid(),
-    name: faker.name.findName(),
-    papers: papers.slice(0, 1),
-  },
-  {
-    id: faker.random.uuid(),
-    name: faker.name.findName(),
-    papers: papers.slice(1, 2),
-  },
-]
-
-const version = {
-  metadata: {
-    title: faker.lorem.sentence(20, 5),
-    abstract: faker.lorem.sentences(5),
-    authors: [
-      faker.name.findName(),
-      faker.name.findName(),
-      faker.name.findName(),
-    ],
-  },
-}
-;<FindReviewersLayout
-  authors={authors}
-  papers={papers}
-  version={version}
-  toggleAuthor={() => () => null}
-  error={null}
-/>
-```
diff --git a/packages/components/xpub-find-reviewers/src/components/FindReviewersPage.js b/packages/components/xpub-find-reviewers/src/components/FindReviewersPage.js
deleted file mode 100644
index c04f30c9b..000000000
--- a/packages/components/xpub-find-reviewers/src/components/FindReviewersPage.js
+++ /dev/null
@@ -1,117 +0,0 @@
-import React from 'react'
-import { compose } from 'recompose'
-import { connect } from 'react-redux'
-import { actions } from 'pubsweet-client'
-import { ink } from 'pubsweet-component-ink-frontend/actions'
-import { ConnectPage } from 'xpub-connect'
-import { selectCollection, selectFragment } from 'xpub-selectors'
-import { calculateAuthorScores, calculatePaperScores } from '../lib/score'
-import FindReviewersLayout from './FindReviewersLayout'
-
-class FindReviewersPage extends React.Component {
-  state = {
-    papers: null,
-    authors: null,
-    error: null,
-  }
-
-  componentDidMount() {
-    const { version } = this.props
-
-    this.fetch(version)
-  }
-
-  componentWillReceiveProps(nextProps) {
-    const { version } = nextProps
-
-    if (version.id !== this.props.version.id) {
-      this.fetch(version)
-    }
-  }
-
-  fetch({ metadata: { title, abstract } }) {
-    const text = [title, abstract].join('\n\n')
-
-    this.setState({
-      papers: null,
-      authors: null,
-      error: null,
-    })
-
-    const file = new File([text], 'paper.txt', { type: 'text/plain' })
-
-    const options = {
-      recipe: 'find-reviewers',
-      outputFileName: 'paper_mlt.json',
-    }
-
-    this.props
-      .ink(file, options)
-      .then(response => {
-        const data = JSON.parse(response.converted)
-        const papers = calculatePaperScores(data)
-        const authors = calculateAuthorScores(papers)
-
-        // TODO: use actual board member data
-        authors.forEach(author => {
-          author.boardMember = Math.random() > 0.95
-          author.flagged = Math.random() > 0.9
-          author.expanded = true // TODO: remove the "expanded" property if not useful
-        })
-
-        this.setState({ papers, authors })
-      })
-      .catch(error => {
-        console.error(error)
-
-        this.setState({
-          error:
-            'Sorry, there was a problem calculating reviewers for this submission',
-        })
-      })
-  }
-
-  toggleAuthor = id => field => () => {
-    const { authors } = this.state
-
-    const index = authors.findIndex(author => author.id === id)
-
-    authors[index][field] = !authors[index][field]
-
-    this.setState({ authors })
-  }
-
-  render() {
-    const { error, authors, papers } = this.state
-
-    return (
-      <FindReviewersLayout
-        authors={authors}
-        error={error}
-        papers={papers}
-        project={this.props.project}
-        toggleAuthor={this.toggleAuthor}
-        version={this.props.version}
-      />
-    )
-  }
-}
-
-export default compose(
-  ConnectPage(({ match }) => [
-    actions.getCollection({ id: match.params.project }),
-    actions.getFragment(
-      { id: match.params.project },
-      { id: match.params.version },
-    ),
-  ]),
-  connect(
-    (state, { match }) => {
-      const project = selectCollection(state, match.params.project)
-      const version = selectFragment(state, match.params.version)
-
-      return { project, version }
-    },
-    { ink },
-  ),
-)(FindReviewersPage)
diff --git a/packages/components/xpub-find-reviewers/src/components/Metadata.js b/packages/components/xpub-find-reviewers/src/components/Metadata.js
deleted file mode 100644
index 1bc2cc86f..000000000
--- a/packages/components/xpub-find-reviewers/src/components/Metadata.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import React from 'react'
-import { AbstractViewer, TitleViewer } from 'xpub-edit'
-import classes from './Metadata.local.scss'
-
-const Metadata = ({ version }) => (
-  <div className={classes.root}>
-    <TitleViewer className={classes.title} value={version.metadata.title} />
-
-    <div className={classes.authors}>{version.metadata.authors.join(', ')}</div>
-
-    <AbstractViewer
-      className={classes.abstract}
-      value={version.metadata.abstract}
-    />
-  </div>
-)
-
-export default Metadata
diff --git a/packages/components/xpub-find-reviewers/src/components/Metadata.local.scss b/packages/components/xpub-find-reviewers/src/components/Metadata.local.scss
deleted file mode 100644
index 6845068ef..000000000
--- a/packages/components/xpub-find-reviewers/src/components/Metadata.local.scss
+++ /dev/null
@@ -1,15 +0,0 @@
-.root {
-  margin-bottom: 20px;
-}
-
-.title.title {
-  font-family: var(--font-author);
-  font-size: 150%;
-  font-weight: bold;
-}
-
-.abstract,
-.authors,
-.title {
-  margin-bottom: 20px;
-}
diff --git a/packages/components/xpub-find-reviewers/src/components/Metadata.md b/packages/components/xpub-find-reviewers/src/components/Metadata.md
deleted file mode 100644
index 7259ae8d5..000000000
--- a/packages/components/xpub-find-reviewers/src/components/Metadata.md
+++ /dev/null
@@ -1,15 +0,0 @@
-```js
-const version = {
-  id: faker.random.uuid(),
-  metadata: {
-    title: faker.lorem.sentence(20, 5),
-    abstract: faker.lorem.sentences(5),
-    authors: [
-      faker.name.findName(),
-      faker.name.findName(),
-      faker.name.findName(),
-    ],
-  },
-}
-;<Metadata version={version} />
-```
diff --git a/packages/components/xpub-find-reviewers/src/components/Paper.js b/packages/components/xpub-find-reviewers/src/components/Paper.js
deleted file mode 100644
index 224c2a701..000000000
--- a/packages/components/xpub-find-reviewers/src/components/Paper.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import React from 'react'
-import classes from './Paper.local.scss'
-import ProjectLink from './ProjectLink'
-
-const Paper = ({ id, paper, project, version }) => (
-  <div className={classes.root}>
-    {paper.scorePercent && (
-      <div className={classes.score}>
-        <span
-          className={classes.scoreIndicator}
-          style={{ right: `${100 - paper.scorePercent}%` }}
-        />
-      </div>
-    )}
-
-    <div className={classes.main}>
-      {paper.year && <div className={classes.year}>{paper.year}</div>}
-
-      <div className={classes.title}>
-        <ProjectLink
-          id={id}
-          page="find-reviewers/paper"
-          project={project}
-          version={version}
-        >
-          {paper.title}
-        </ProjectLink>
-      </div>
-    </div>
-  </div>
-)
-
-export default Paper
diff --git a/packages/components/xpub-find-reviewers/src/components/Paper.local.scss b/packages/components/xpub-find-reviewers/src/components/Paper.local.scss
deleted file mode 100644
index 0a5119cc1..000000000
--- a/packages/components/xpub-find-reviewers/src/components/Paper.local.scss
+++ /dev/null
@@ -1,41 +0,0 @@
-.root {
-  align-items: left;
-  display: flex;
-  flex-wrap: nowrap;
-  margin-bottom: 5px;
-}
-
-.score {
-  border: 1px solid #6f97cc;
-  display: inline-block;
-  height: 1em;
-  margin-right: 1ch;
-  position: relative;
-  width: 30px;
-}
-
-.scoreIndicator {
-  background: #6f97cc;
-  bottom: 0;
-  display: inline-block;
-  left: 0;
-  position: absolute;
-  top: 0;
-}
-
-.main {
-  align-items: left;
-  display: flex;
-  flex: 1;
-  flex-wrap: nowrap;
-}
-
-.year {
-  font-family: 'Kocourier Prime Sans', monospace;
-  margin-right: 1ch;
-  white-space: nowrap;
-}
-
-.title {
-  flex: 1;
-}
diff --git a/packages/components/xpub-find-reviewers/src/components/Paper.md b/packages/components/xpub-find-reviewers/src/components/Paper.md
deleted file mode 100644
index 8f4640842..000000000
--- a/packages/components/xpub-find-reviewers/src/components/Paper.md
+++ /dev/null
@@ -1,10 +0,0 @@
-A paper, with a title and a percentage score.
-
-```js
-const paper = {
-  id: faker.random.uuid(),
-  title: faker.lorem.sentence(20, 5),
-  scorePercent: faker.random.number({ min: 1, max: 100 }),
-}
-;<Paper id={paper.id} paper={paper} />
-```
diff --git a/packages/components/xpub-find-reviewers/src/components/PaperLayout.js b/packages/components/xpub-find-reviewers/src/components/PaperLayout.js
deleted file mode 100644
index 4796688ec..000000000
--- a/packages/components/xpub-find-reviewers/src/components/PaperLayout.js
+++ /dev/null
@@ -1,78 +0,0 @@
-import React from 'react'
-import classes from './PaperLayout.local.scss'
-import { newestFirst } from '../lib/sort'
-import Paper from './Paper'
-import ProjectLink from './ProjectLink'
-
-const PaperLayout = ({ paper, project, version }) => (
-  <div className={classes.root}>
-    <h1 className={classes.title}>
-      <a href={paper.url} rel="noopener noreferrer" target="_blank">
-        {paper.title}
-      </a>
-    </h1>
-
-    <div className={classes.meta}>
-      {paper.year && <span className={classes.year}>{paper.year}</span>}
-      {paper.venue && <span className={classes.venue}>{paper.venue}</span>}
-    </div>
-
-    <div className={classes.authors}>
-      {paper.authors.map((author, i) => (
-        <span key={author.authorId || author.name}>
-          {!!i && ', '}
-          {author.authorId ? (
-            <ProjectLink
-              id={author.authorId}
-              page="find-reviewers/author"
-              project={project}
-              version={version}
-            >
-              {author.name}
-            </ProjectLink>
-          ) : (
-            <span>{author.name}</span>
-          )}
-        </span>
-      ))}
-    </div>
-
-    <div className={classes.row}>
-      <div className={classes.column}>
-        {!!paper.citations.length && (
-          <div>
-            <h2 className={classes.heading}>Cited By</h2>
-
-            {paper.citations.sort(newestFirst).map(paper => (
-              <Paper
-                id={paper.paperId}
-                key={paper.paperId}
-                paper={paper}
-                project={project}
-                version={version}
-              />
-            ))}
-          </div>
-        )}
-
-        {!!paper.references.length && (
-          <div>
-            <h2 className={classes.heading}>References</h2>
-
-            {paper.references.sort(newestFirst).map(paper => (
-              <Paper
-                id={paper.paperId}
-                key={paper.paperId}
-                paper={paper}
-                project={project}
-                version={version}
-              />
-            ))}
-          </div>
-        )}
-      </div>
-    </div>
-  </div>
-)
-
-export default PaperLayout
diff --git a/packages/components/xpub-find-reviewers/src/components/PaperLayout.local.scss b/packages/components/xpub-find-reviewers/src/components/PaperLayout.local.scss
deleted file mode 100644
index 1603dbf56..000000000
--- a/packages/components/xpub-find-reviewers/src/components/PaperLayout.local.scss
+++ /dev/null
@@ -1,50 +0,0 @@
-.root {
-  padding: 0 10px;
-}
-
-.root a {
-  color: inherit;
-  font-style: normal;
-}
-
-.title {
-  font-family: var(--font-author);
-}
-
-.title a {
-  color: inherit;
-  font-style: normal;
-}
-
-.row {
-  display: flex;
-}
-
-.column {
-  flex: 1;
-  font-family: var(--font-interface);
-  padding-right: 20px;
-}
-
-.heading {
-  font-family: var(--font-author);
-}
-
-.root a:hover {
-  color: var(--color-primary);
-}
-
-.root a:visited {
-  color: inherit;
-}
-
-.authors,
-.meta {
-  margin-top: 10px;
-}
-
-.year {
-  font-family: 'Kocourier Prime Sans', monospace;
-  margin-right: 1ch;
-  white-space: nowrap;
-}
diff --git a/packages/components/xpub-find-reviewers/src/components/PaperPage.js b/packages/components/xpub-find-reviewers/src/components/PaperPage.js
deleted file mode 100644
index 967ebad92..000000000
--- a/packages/components/xpub-find-reviewers/src/components/PaperPage.js
+++ /dev/null
@@ -1,72 +0,0 @@
-import React from 'react'
-import { compose } from 'recompose'
-import { connect } from 'react-redux'
-import { actions } from 'pubsweet-client'
-import { ConnectPage } from 'xpub-connect'
-import { selectCollection, selectFragment } from 'xpub-selectors'
-import PaperLayout from './PaperLayout'
-import { scholar } from '../lib/scholar'
-
-class PaperPage extends React.Component {
-  state = {
-    paper: null,
-  }
-
-  componentDidMount() {
-    const { match } = this.props
-
-    this.fetch(match.params.id)
-  }
-
-  componentWillReceiveProps(nextProps) {
-    const { match } = nextProps
-
-    if (match.params.id !== this.props.match.params.id) {
-      this.fetch(match.params.id)
-    }
-  }
-
-  fetch(id) {
-    this.setState({
-      paper: null,
-    })
-
-    scholar(`paper/${id}`).then(paper => {
-      if (this.props.match.params.id !== id) return
-
-      this.setState({ paper })
-    })
-  }
-
-  render() {
-    const { paper } = this.state
-    const { project, version } = this.props
-
-    if (!paper) return <div>Loading…</div>
-
-    return (
-      <PaperLayout
-        id={paper.id}
-        paper={paper}
-        project={project}
-        version={version}
-      />
-    )
-  }
-}
-
-export default compose(
-  ConnectPage(({ match }) => [
-    actions.getCollection({ id: match.params.project }),
-    actions.getFragment(
-      { id: match.params.project },
-      { id: match.params.version },
-    ),
-  ]),
-  connect((state, { match }) => {
-    const project = selectCollection(state, match.params.project)
-    const version = selectFragment(state, match.params.version)
-
-    return { project, version }
-  }),
-)(PaperPage)
diff --git a/packages/components/xpub-find-reviewers/src/components/ProjectLink.js b/packages/components/xpub-find-reviewers/src/components/ProjectLink.js
deleted file mode 100644
index db8a28959..000000000
--- a/packages/components/xpub-find-reviewers/src/components/ProjectLink.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import React from 'react'
-import { Link } from 'react-router-dom'
-
-const projectUrl = ({ project, version, page, id }) => {
-  const parts = []
-
-  parts.push('projects')
-  parts.push(typeof project === 'object' ? project.id : project)
-
-  if (version) {
-    parts.push('versions')
-    parts.push(typeof version === 'object' ? version.id : version)
-  }
-
-  if (page) {
-    parts.push(page)
-  }
-
-  if (id) {
-    parts.push(id)
-  }
-
-  return `/${parts.join('/')}`
-}
-
-const ProjectLink = props => (
-  <Link target={props.target} to={projectUrl(props)}>
-    {props.children}
-  </Link>
-)
-
-export default ProjectLink
diff --git a/packages/components/xpub-find-reviewers/src/components/index.js b/packages/components/xpub-find-reviewers/src/components/index.js
deleted file mode 100644
index 00ca66177..000000000
--- a/packages/components/xpub-find-reviewers/src/components/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export { default as AuthorPage } from './AuthorPage'
-export { default as PaperPage } from './PaperPage'
-export { default as FindReviewersPage } from './FindReviewersPage'
diff --git a/packages/components/xpub-find-reviewers/src/index.js b/packages/components/xpub-find-reviewers/src/index.js
deleted file mode 100644
index 6f1f42a64..000000000
--- a/packages/components/xpub-find-reviewers/src/index.js
+++ /dev/null
@@ -1,5 +0,0 @@
-module.exports = {
-  frontend: {
-    components: [() => require('./components')],
-  },
-}
diff --git a/packages/components/xpub-find-reviewers/src/lib/author.js b/packages/components/xpub-find-reviewers/src/lib/author.js
deleted file mode 100644
index 318eac875..000000000
--- a/packages/components/xpub-find-reviewers/src/lib/author.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import map from 'lodash/map'
-
-export const publicationYears = papers => {
-  const years = papers.map(paper => paper.year).filter(year => year)
-
-  if (!years.length) return []
-
-  const minYear = Math.min(...years)
-  const maxYear = Math.max(...years)
-
-  const output = {}
-
-  for (let year = minYear; year <= maxYear; year += 1) {
-    output[year] = 0
-  }
-
-  years.forEach(year => {
-    output[year] += 1
-  })
-
-  const ratio = 50 / Math.max(...Object.values(output))
-
-  return map(output, (count, year) => ({
-    year,
-    size: Math.max(10, count * ratio),
-  })).reverse()
-}
diff --git a/packages/components/xpub-find-reviewers/src/lib/scholar.js b/packages/components/xpub-find-reviewers/src/lib/scholar.js
deleted file mode 100644
index f1f812ce6..000000000
--- a/packages/components/xpub-find-reviewers/src/lib/scholar.js
+++ /dev/null
@@ -1,4 +0,0 @@
-export const scholar = path =>
-  window
-    .fetch(`https://api.semanticscholar.org/v1/${path}`)
-    .then(res => res.json())
diff --git a/packages/components/xpub-find-reviewers/src/lib/score.js b/packages/components/xpub-find-reviewers/src/lib/score.js
deleted file mode 100644
index dc8d6d610..000000000
--- a/packages/components/xpub-find-reviewers/src/lib/score.js
+++ /dev/null
@@ -1,57 +0,0 @@
-const highestScoreFirst = (a, b) => b.scorePercent - a.scorePercent
-
-const normalizeScore = papers => {
-  const maxScore = papers.reduce((output, paper) => output + paper.score, 0)
-
-  return item => {
-    item.scorePercent = (item.score / maxScore) * 100
-  }
-}
-
-const normalizeDocScore = maxScore => doc => {
-  doc._source.score = doc._score
-  doc._source.scorePercent = (doc._score / maxScore) * 100
-}
-
-export const calculatePaperScores = data => {
-  const docs = data.hits
-
-  docs.forEach(normalizeDocScore(data.max_score))
-
-  return docs.map(doc => doc._source)
-}
-
-export const calculateAuthorScores = papers => {
-  const items = papers.reduce((output, paper) => {
-    paper.authors.forEach(author => {
-      const { ids, name } = author
-
-      const id = ids[0]
-
-      if (!id) return
-
-      if (!output[id]) {
-        output[id] = {
-          id,
-          name,
-          score: 0,
-          papers: [],
-        }
-      }
-
-      // some papers have duplicate authors :(
-      if (output[id].papers.some(item => item.id === paper.id)) return
-
-      output[id].score += paper.score
-      output[id].papers.push(paper)
-    })
-
-    return output
-  }, {})
-
-  const authors = Object.values(items)
-  authors.forEach(normalizeScore(papers))
-  authors.sort(highestScoreFirst)
-
-  return authors
-}
diff --git a/packages/components/xpub-find-reviewers/src/lib/sort.js b/packages/components/xpub-find-reviewers/src/lib/sort.js
deleted file mode 100644
index 6fd4a0704..000000000
--- a/packages/components/xpub-find-reviewers/src/lib/sort.js
+++ /dev/null
@@ -1,11 +0,0 @@
-export const alphabetical = (a, b) => {
-  if (a.title === b.title) return 0
-
-  return a.title > b.title ? 1 : -1
-}
-
-export const newestFirst = (a, b) => {
-  if (a.year === b.year) return alphabetical(a, b)
-
-  return b.year - a.year
-}
diff --git a/packages/components/xpub-formbuilder/CHANGELOG.md b/packages/components/xpub-formbuilder/CHANGELOG.md
deleted file mode 100644
index ba52621f3..000000000
--- a/packages/components/xpub-formbuilder/CHANGELOG.md
+++ /dev/null
@@ -1,174 +0,0 @@
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-## [1.0.7](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-formbuilder@1.0.6...pubsweet-component-xpub-formbuilder@1.0.7) (2019-01-16)
-
-
-### Bug Fixes
-
-* **components:** generals fixes on the components ([4a78cfe](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/4a78cfe))
-* **formbuilder:** delete forms ([17c52d0](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/17c52d0))
-* **formbuilder:** save to file ([c4f4196](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/c4f4196))
-* **merge:** merging to master ([8603808](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/8603808))
-* **test:** formbuilder ([93c55fd](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/93c55fd))
-* **test:** problems with eslint and test ([48f7fe2](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/48f7fe2))
-
-
-
-
-
-## [1.0.6](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-formbuilder@1.0.5...pubsweet-component-xpub-formbuilder@1.0.6) (2019-01-14)
-
-**Note:** Version bump only for package pubsweet-component-xpub-formbuilder
-
-
-
-
-
-## [1.0.5](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-formbuilder@1.0.4...pubsweet-component-xpub-formbuilder@1.0.5) (2019-01-13)
-
-**Note:** Version bump only for package pubsweet-component-xpub-formbuilder
-
-
-
-
-
-## [1.0.4](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-formbuilder@1.0.3...pubsweet-component-xpub-formbuilder@1.0.4) (2019-01-09)
-
-**Note:** Version bump only for package pubsweet-component-xpub-formbuilder
-
-
-
-
-
-## [1.0.3](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-formbuilder@1.0.2...pubsweet-component-xpub-formbuilder@1.0.3) (2018-12-12)
-
-**Note:** Version bump only for package pubsweet-component-xpub-formbuilder
-
-
-
-
-
-## [1.0.2](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-formbuilder@1.0.1...pubsweet-component-xpub-formbuilder@1.0.2) (2018-12-04)
-
-**Note:** Version bump only for package pubsweet-component-xpub-formbuilder
-
-
-
-
-
-## [1.0.1](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-formbuilder@1.0.0...pubsweet-component-xpub-formbuilder@1.0.1) (2018-11-30)
-
-**Note:** Version bump only for package pubsweet-component-xpub-formbuilder
-
-
-
-
-
-# [1.0.0](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-formbuilder@0.2.0...pubsweet-component-xpub-formbuilder@1.0.0) (2018-11-29)
-
-
-### Features
-
-* **various:** update styled-components ([5c51466](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/5c51466))
-* **various:** upgrade styled-components ([9b886f6](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/9b886f6))
-
-
-### BREAKING CHANGES
-
-* **various:** Replace all styled-components .extend with styled()
-* **various:** Replace styled-components injectGlobal with new createGlobalStyle
-
-
-
-
-
-<a name="0.2.0"></a>
-# [0.2.0](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-formbuilder@0.1.5...pubsweet-component-xpub-formbuilder@0.2.0) (2018-11-05)
-
-
-### Features
-
-* GraphQL Login component ([70df3de](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/70df3de))
-
-
-
-
-<a name="0.1.5"></a>
-## [0.1.5](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-formbuilder@0.1.4...pubsweet-component-xpub-formbuilder@0.1.5) (2018-10-08)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-formbuilder
-
-<a name="0.1.4"></a>
-## [0.1.4](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-formbuilder@0.1.3...pubsweet-component-xpub-formbuilder@0.1.4) (2018-09-27)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-formbuilder
-
-<a name="0.1.3"></a>
-## [0.1.3](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-formbuilder@0.1.2...pubsweet-component-xpub-formbuilder@0.1.3) (2018-09-25)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-formbuilder
-
-<a name="0.1.2"></a>
-## [0.1.2](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-formbuilder@0.1.1...pubsweet-component-xpub-formbuilder@0.1.2) (2018-09-19)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-formbuilder
-
-<a name="0.1.1"></a>
-## [0.1.1](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-formbuilder@0.1.0...pubsweet-component-xpub-formbuilder@0.1.1) (2018-09-06)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-formbuilder
-
-<a name="0.1.0"></a>
-# 0.1.0 (2018-09-04)
-
-
-### Bug Fixes
-
-* **fomrbuilder:** fix validation ([98b3b5e](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/98b3b5e))
-* **formbuilder:** create folder from scratch ([a2d533e](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/a2d533e))
-* **formbuilder:** erase files uneeded ([9bc04cd](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/9bc04cd))
-* **formbuilder:** test addition ([1379895](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/1379895))
-* **readme:** change readme files ([eb0ff9b](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/eb0ff9b))
-* **styleguide:** remove console ([c8f7bb2](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/c8f7bb2))
-* **test:** add data-test-id to tabs ([e8a42cb](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/e8a42cb))
-* **test:** fix intgration test ([900f0db](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/900f0db))
-* **update:** update dependencies ([52c0002](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/52c0002))
-* **xpubformbuilder:** integration test and component ([6806f81](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/6806f81))
-
-
-### Features
-
-* **backend:** add backend check path floder ([8c95e72](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/8c95e72))
-* **components:** form builder backend requests ([7082b0f](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/7082b0f))
-* **formbuilder:** add components for the builder ([cfae1c0](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/cfae1c0))
-* **formbuilder:** add form redux actions formbuilder ([7436353](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/7436353))
-* **formbuilder:** add formbuilder component ([c24b9f7](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/c24b9f7))
-* **formbuilder:** add forms layout ([0cd6b9d](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/0cd6b9d))
-* **formbuilder:** add validation for elements ([882935a](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/882935a))
-* **formbuilder:** layout of form builder ([2bd4956](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/2bd4956))
-
-
-
-
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
diff --git a/packages/components/xpub-formbuilder/README.md b/packages/components/xpub-formbuilder/README.md
deleted file mode 100644
index 4e4a2b8f9..000000000
--- a/packages/components/xpub-formbuilder/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-## pubsweet-component-xpub-formbuilder
-
-A PubSweet component that provides an interface for admins to manage forms in xPub.
diff --git a/packages/components/xpub-formbuilder/package.json b/packages/components/xpub-formbuilder/package.json
deleted file mode 100644
index c0d897c6f..000000000
--- a/packages/components/xpub-formbuilder/package.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
-  "name": "pubsweet-component-xpub-formbuilder",
-  "version": "1.0.7",
-  "description": "Form builder component for Xpub",
-  "main": "src/index.js",
-  "author": "Collaborative Knowledge Foundation",
-  "license": "MIT",
-  "files": [
-    "src",
-    "dist"
-  ],
-  "dependencies": {
-    "@pubsweet/ui": "^9.1.3",
-    "@pubsweet/ui-toolkit": "^2.0.7",
-    "formik": "^1.4.2",
-    "passport": "^0.4.0",
-    "prop-types": "^15.5.10",
-    "pubsweet-component-ink-frontend": "^1.0.2",
-    "react-dom": "^16.2.0",
-    "react-redux": "^5.0.6",
-    "recompose": "^0.26.0",
-    "redux": "^3.7.2",
-    "redux-form": "^7.4.2",
-    "styled-components": "^4.1.1",
-    "xpub-connect": "^2.0.7",
-    "xpub-edit": "^2.5.10"
-  },
-  "devDependencies": {
-    "@babel/preset-env": "^7.0.0",
-    "@babel/preset-react": "^7.0.0",
-    "babel-core": "^6.26.0",
-    "babel-loader": "^8.0.5",
-    "enzyme": "^3.7.0",
-    "enzyme-adapter-react-16": "^1.8.0",
-    "faker": "^4.1.0"
-  },
-  "peerDependencies": {
-    "config": "^3.0.1",
-    "graphql-tag": "^2.10.0",
-    "lodash": "^4.17.11",
-    "pubsweet-client": ">=2.1.0",
-    "react": ">=16",
-    "react-apollo": "^2.3.3"
-  }
-}
diff --git a/packages/components/xpub-formbuilder/src/components/ComponentProperties.jsx b/packages/components/xpub-formbuilder/src/components/ComponentProperties.jsx
deleted file mode 100644
index 49e206ed7..000000000
--- a/packages/components/xpub-formbuilder/src/components/ComponentProperties.jsx
+++ /dev/null
@@ -1,120 +0,0 @@
-import React from 'react'
-import { map, omitBy } from 'lodash'
-import {
-  branch,
-  renderComponent,
-  compose,
-  withState,
-  withHandlers,
-  withProps,
-} from 'recompose'
-import { ValidatedFieldFormik, Menu, Button } from '@pubsweet/ui'
-import { withFormik } from 'formik'
-
-import FormProperties from './FormProperties'
-import components from './config/Elements'
-import * as elements from './builderComponents'
-import { Page, Heading } from './molecules/Page'
-import { Section, Legend } from './styles'
-
-const MenuComponents = input => (
-  <Menu
-    options={Object.keys(components).map(value => ({
-      value,
-      label: value,
-    }))}
-    {...input}
-  />
-)
-
-const ComponentProperties = ({
-  properties,
-  changeComponent,
-  selectComponentValue,
-  handleSubmit,
-  setFieldValue,
-}) => (
-  <Page>
-    <form onSubmit={handleSubmit}>
-      <Heading>Component Properties</Heading>
-      <Section>
-        <Legend space>Choose Component</Legend>
-        <ValidatedFieldFormik
-          component={MenuComponents}
-          name="component"
-          onChange={value => {
-            changeComponent(value)
-            setFieldValue('component', value)
-          }}
-        />
-      </Section>
-      {selectComponentValue &&
-        map(components[selectComponentValue], (value, key) => (
-          <Section>
-            <Legend space>{`Field ${key}`}</Legend>
-            <ValidatedFieldFormik
-              component={elements[value.component].default}
-              key={`${selectComponentValue}-${key}`}
-              name={key}
-              onChange={event => {
-                let value = {}
-                if (event.target) {
-                  value = event.target.value
-                } else {
-                  value = event
-                }
-                setFieldValue(key, value)
-              }}
-              {...value.props}
-            />
-          </Section>
-        ))}
-      <Button primary type="submit">
-        Update Component
-      </Button>
-    </form>
-  </Page>
-)
-
-const UpdateForm = ({ onSubmitFn, properties, changeTabs }) => (
-  <FormProperties
-    mode="update"
-    onSubmitFn={onSubmitFn}
-    properties={properties}
-  />
-)
-
-const onSubmit = (values, { onSubmitFn, properties }) => {
-  if (!values.id || !values.component) return
-
-  const children = omitBy(values, value => value === '')
-  onSubmitFn({ id: properties.id }, Object.assign({}, { children }))
-}
-
-const ComponentForm = compose(
-  withProps(({ properties }) => ({
-    initialValues: { children: properties.properties },
-  })),
-  withFormik({
-    displayName: 'ComponentSubmit',
-    mapPropsToValues: data => data.properties.properties,
-    handleSubmit: (props, { props: { onSubmitFn, id, properties } }) =>
-      onSubmit(props, { onSubmitFn, properties }),
-  }),
-  withState(
-    'selectComponentValue',
-    'selectComponent',
-    ({ properties }) => properties.properties.component,
-  ),
-  withHandlers({
-    changeComponent: ({ selectComponent }) => component =>
-      selectComponent(() => component),
-  }),
-)(ComponentProperties)
-
-export default compose(
-  branch(
-    ({ properties }) => properties.type === 'form',
-    renderComponent(UpdateForm),
-  )(ComponentForm),
-)
diff --git a/packages/components/xpub-formbuilder/src/components/FormBuilder.jsx b/packages/components/xpub-formbuilder/src/components/FormBuilder.jsx
deleted file mode 100644
index 25c39956d..000000000
--- a/packages/components/xpub-formbuilder/src/components/FormBuilder.jsx
+++ /dev/null
@@ -1,156 +0,0 @@
-import React from 'react'
-import {
-  compose,
-  withState,
-  withHandlers,
-  lifecycle,
-  // setDisplayName,
-} from 'recompose'
-import styled, { withTheme } from 'styled-components'
-import { unescape } from 'lodash'
-import { th } from '@pubsweet/ui-toolkit'
-import { Icon, Action } from '@pubsweet/ui'
-import { Page } from './molecules/Page'
-
-const Element = styled.div`
-  display: flex;
-  border: 1px solid #000;
-  padding: 10px;
-  margin: 10px;
-  justify-content: space-between;
-`
-
-const StatusIcon = withTheme(({ children, theme }) => (
-  <Icon color={theme.colorPrimary}>{children}</Icon>
-))
-
-const Status = styled.div`
-  align-items: center;
-  color: ${th('colorPrimary')};
-  display: inline-flex;
-`
-
-const StatusIdle = styled(Status).attrs({
-  children: () => <StatusIcon>plus_circle</StatusIcon>,
-})``
-
-const Root = styled.div`
-  display: flex;
-  flex-direction: column;
-  font-weight: 200;
-  padding-bottom: 10px;
-  padding-top: 10px;
-
-  &:hover ${StatusIdle} {
-    circle {
-      fill: ${th('colorPrimary')};
-      stroke: ${th('colorPrimary')};
-    }
-
-    line {
-      stroke: white;
-    }
-  }
-`
-
-const Main = styled.div`
-  display: flex;
-  justify-content: center;
-`
-
-const Info = styled.div`
-  color: ${th('colorPrimary')};
-  font-size: 2em;
-  font-weight: 400;
-  text-transform: uppercase;
-  display: inline-flex;
-  padding: calc(8px / 2);
-`
-
-const ElementTitle = styled.span``
-
-const createMarkup = encodedHtml => ({
-  __html: unescape(encodedHtml),
-})
-
-const BuilderElement = ({ elements, changeProperties, deleteElement, form }) =>
-  elements.map((value, key) => (
-    <Element key={`element-${value.id}`}>
-      <Action
-        onClick={() =>
-          changeProperties({
-            type: 'element',
-            properties: value,
-          })
-        }
-      >
-        <ElementTitle dangerouslySetInnerHTML={createMarkup(value.title)} /> (
-        {value.component})
-      </Action>
-      <Action onClick={() => deleteElement(form.id, value.id)}>x</Action>
-    </Element>
-  ))
-
-const AddButtonElement = ({ addElements }) => (
-  <Root>
-    <Main>
-      <Action
-        onClick={() =>
-          addElements({
-            title: 'New Component',
-            id: `${Date.now()}`,
-          })
-        }
-      >
-        <StatusIdle />
-        <Info>Add Element</Info>
-      </Action>
-    </Main>
-  </Root>
-)
-
-const FormBuilder = ({
-  form,
-  elements,
-  addElements,
-  changeProperties,
-  deleteElement,
-}) => (
-  <Page>
-    <AddButtonElement addElements={addElements} form={form} id="add-element" />
-    {elements && elements.length > 0 && (
-      <BuilderElement
-        changeProperties={changeProperties}
-        deleteElement={deleteElement}
-        elements={elements}
-        form={form}
-        id="builder-element"
-      />
-    )}
-  </Page>
-)
-
-FormBuilder.displayName = 'FormBuilder'
-
-export default compose(
-  withState('elements', 'onAddElements', ({ form }) => form.children || []),
-  withHandlers({
-    addElements: ({ onAddElements, form }) => addElement =>
-      onAddElements(() => {
-        const addEl = { children: form.children || [] }
-        addEl.children = [...addEl.children, addElement]
-        return addEl.children
-      }),
-  }),
-  lifecycle({
-    componentWillReceiveProps(nextProps) {
-      if (this.props.form.children !== nextProps.form.children) {
-        this.setState({ elements: nextProps.form.children })
-      }
-
-      if (this.props.elements !== nextProps.elements) {
-        this.setState({ elements: nextProps.elements })
-      }
-    },
-  }),
-)(FormBuilder)
diff --git a/packages/components/xpub-formbuilder/src/components/FormBuilderLayout.jsx b/packages/components/xpub-formbuilder/src/components/FormBuilderLayout.jsx
deleted file mode 100644
index 84d4c667c..000000000
--- a/packages/components/xpub-formbuilder/src/components/FormBuilderLayout.jsx
+++ /dev/null
@@ -1,97 +0,0 @@
-import React from 'react'
-import { forEach } from 'lodash'
-import styled from 'styled-components'
-import { Tabs, Action } from '@pubsweet/ui'
-import { Columns, Admin } from './atoms/Columns'
-import ComponentProperties from './ComponentProperties'
-import FormBuilder from './FormBuilder'
-import FormProperties from './FormProperties'
-
-const DeleteIcon = styled(Action)`
-  margin-left: 10px;
-  line-height: 1.15;
-`
-
-const AdminStyled = styled(Admin)`
-  border-left: 1px solid black;
-  padding-left: 40px;
-`
-
-const FormBuilderLayout = ({
-  getForms,
-  properties,
-  deleteForm,
-  deleteElement,
-  updateForm,
-  createForm,
-  updateElements,
-  changeProperties,
-  changeTabs,
-  activeTab,
-}) => {
-  const Sections = []
-  forEach(getForms, (form, key) => {
-    Sections.push({
-      content: (
-        <FormBuilder
-          changeProperties={changeProperties}
-          deleteElement={deleteElement}
-          form={form}
-          key={`form-builder-${key}`}
-        />
-      ),
-      key: `${key}`,
-      label: [
-        form.name,
-        <DeleteIcon
-          key={`delete-form-${key}`}
-          onClick={e => {
-            e.preventDefault()
-            deleteForm(form.id)
-          }}
-        >
-          x
-        </DeleteIcon>,
-      ],
-    })
-  })
-
-  Sections.push({
-    content: (
-      <FormProperties
-        key="form-builder-new"
-        mode="create"
-        onSubmitFn={createForm}
-        properties={{}}
-      />
-    ),
-    key: 'new',
-    label: '+ Add Form',
-  })
-  return (
-    <Columns>
-      <Tabs
-        activeKey={`${activeTab}`}
-        onChange={tab => {
-          changeProperties({
-            type: 'form',
-            properties: getForms[tab],
-          })
-          changeTabs(tab)
-        }}
-        sections={Sections}
-        title="builder"
-      />
-      <AdminStyled>
-        <ComponentProperties
-          changeTabs={changeTabs}
-          key={`${properties.type}-${(properties.properties || {}).id}`}
-          onSubmitFn={properties.type === 'form' ? updateForm : updateElements}
-          properties={properties}
-        />
-      </AdminStyled>
-    </Columns>
-  )
-}
-
-export default FormBuilderLayout
diff --git a/packages/components/xpub-formbuilder/src/components/FormBuilderLayout.md b/packages/components/xpub-formbuilder/src/components/FormBuilderLayout.md
deleted file mode 100644
index ca3d1efb6..000000000
--- a/packages/components/xpub-formbuilder/src/components/FormBuilderLayout.md
+++ /dev/null
@@ -1,50 +0,0 @@
-A form builder to create forms
-
-```js
-const forms = [
-  {
-    name: 'test form',
-    id: 'test',
-    children: [
-      {
-        title: 'Title',
-        id: '1531303631370',
-        component: 'AbstractEditor',
-        name: 'metadata.title',
-        placeholder: 'Enter Title...',
-        validate: ['required'],
-        validateValue: { minChars: '10' },
-      },
-      {
-        title: 'Title 1',
-        id: '1531303631371',
-        component: 'AbstractEditor',
-        name: 'metadata.title',
-        placeholder: 'Enter Title...',
-        validate: ['required'],
-        validateValue: { minChars: '10' },
-      },
-    ],
-  },
-  { name: 'test form 1', id: 'test1' },
-]
-
-initialState = {
-  properties: {
-    type: 'form',
-    properties: forms[0],
-  },
-  activeTab: 0,
-}
-;<div style={{ position: 'relative', height: '100%' }}>
-  <FormBuilderLayout
-    getForms={forms}
-    activeTab={state.activeTab}
-    properties={state.properties}
-    changeProperties={value => {
-      setState({ properties: value })
-    }}
-    changeTabs={value => setState({ activeTab: value })}
-  />
-</div>
-```
diff --git a/packages/components/xpub-formbuilder/src/components/FormBuilderPage.js b/packages/components/xpub-formbuilder/src/components/FormBuilderPage.js
deleted file mode 100644
index c9cc7dd79..000000000
--- a/packages/components/xpub-formbuilder/src/components/FormBuilderPage.js
+++ /dev/null
@@ -1,126 +0,0 @@
-import { compose, withState, withHandlers, withProps } from 'recompose'
-import { graphql } from 'react-apollo'
-import gql from 'graphql-tag'
-import { withLoader } from 'pubsweet-client'
-
-import FormBuilderLayout from './FormBuilderLayout'
-
-const createForm = gql`
-  mutation($form: String!) {
-    createForm(form: $form)
-  }
-`
-
-const updateForm = gql`
-  mutation($form: String!, $id: String!) {
-    updateForm(form: $form, id: $id)
-  }
-`
-
-const updateFormElements = gql`
-  mutation($form: String!, $formId: String!) {
-    updateFormElements(form: $form, formId: $formId)
-  }
-`
-
-const deleteFormElement = gql`
-  mutation($formId: ID!, $elementId: ID!) {
-    deleteFormElement(formId: $formId, elementId: $elementId)
-  }
-`
-
-const deleteForms = gql`
-  mutation($formId: ID!) {
-    deleteForms(formId: $formId)
-  }
-`
-
-const query = gql`
-  query {
-    currentUser {
-      id
-      username
-      admin
-    }
-
-    getForms
-  }
-`
-
-export default compose(
-  graphql(query),
-  graphql(deleteForms, {
-    name: 'deleteForms',
-  }),
-  graphql(deleteFormElement, {
-    name: 'deleteFormElement',
-  }),
-  graphql(updateForm, {
-    name: 'updateForm',
-  }),
-  graphql(createForm, {
-    name: 'createForm',
-  }),
-  graphql(updateFormElements, {
-    name: 'updateFormElements',
-  }),
-  withLoader(),
-  withProps(props => ({
-    deleteForm: formId =>
-      props.deleteForms({
-        variables: {
-          formId,
-        },
-      }),
-    deleteElement: (formId, elementId) =>
-      props.deleteFormElement({
-        variables: {
-          formId,
-          elementId,
-        },
-      }),
-    updateForm: (form, formProperties) =>
-      props.updateForm({
-        variables: {
-          form: JSON.stringify(formProperties),
-          id: form.id,
-        },
-      }),
-    createForm: formProperties =>
-      props.createForm({
-        variables: {
-          form: JSON.stringify(formProperties),
-        },
-      }),
-    updateElements: (form, formElements) =>
-      props.updateFormElements({
-        variables: {
-          form: JSON.stringify(formElements),
-          formId: form.id,
-        },
-      }),
-  })),
-  withState('properties', 'onChangeProperties', ({ getForms }) => ({
-    type: 'form',
-    properties: getForms[0] || {},
-  })),
-  withState('activeTab', 'onChangeTab', ({ getForms, activeTab }) =>
-    getForms.length === 0 ? 'new' : 0,
-  ),
-  withHandlers({
-    changeProperties: ({
-      onChangeProperties,
-      getForms,
-      activeTab,
-    }) => properties =>
-      onChangeProperties(
-        () =>
-          Object.assign({}, properties, {
-            id: (getForms[activeTab] || {}).id,
-          }) || undefined,
-      ),
-    changeTabs: ({ onChangeTab }) => activeTab => {
-      onChangeTab(() => activeTab || '')
-    },
-  }),
-)(FormBuilderLayout)
diff --git a/packages/components/xpub-formbuilder/src/components/FormProperties.jsx b/packages/components/xpub-formbuilder/src/components/FormProperties.jsx
deleted file mode 100644
index c50d59fd1..000000000
--- a/packages/components/xpub-formbuilder/src/components/FormProperties.jsx
+++ /dev/null
@@ -1,141 +0,0 @@
-import React from 'react'
-import { withFormik } from 'formik'
-import { pick, isEmpty } from 'lodash'
-import styled from 'styled-components'
-import { compose, withProps, withState, withHandlers } from 'recompose'
-import { Button, TextField, ValidatedFieldFormik } from '@pubsweet/ui'
-import { th } from '@pubsweet/ui-toolkit'
-import { AbstractField, RadioBox } from './builderComponents'
-import { Page, Heading } from './molecules/Page'
-
-const nameText = input => <TextField {...input} />
-
-const idText = input => <TextField {...input} />
-
-export const Legend = styled.div`
-  font-size: ${th('fontSizeBase')};
-  font-weight: 600;
-  margin-bottom: ${({ space, theme }) => space && theme.gridUnit};
-`
-
-export const Section = styled.div`
-  margin: calc(${th('gridUnit')} * 6) 0;
-`
-
-const onSubmit = (values, { onSubmitFn, properties, mode }) => {
-  if (mode === 'create') {
-    onSubmitFn(Object.assign({}, values))
-  } else {
-    onSubmitFn({ id: properties.properties.id }, Object.assign({}, values))
-  }
-}
-
-const FormProperties = ({
-  handleSubmit,
-  properties,
-  mode,
-  selectPopup,
-  showPopupValue,
-  values,
-  setFieldValue,
-}) =>
-  isEmpty(properties.properties) && mode !== 'create' ? (
-    <Page>
-      <span>&nbsp;</span>
-    </Page>
-  ) : (
-    <Page>
-      <form onSubmit={handleSubmit}>
-        <Heading>{mode === 'create' ? 'Create Form' : 'Update Form'}</Heading>
-        <Section id="form.id" key="form.id">
-          <Legend>ID Form</Legend>
-          <ValidatedFieldFormik component={idText} name="id" />
-        </Section>
-        <Section id="form.name" key="form.name">
-          <Legend>Form Name</Legend>
-          <ValidatedFieldFormik component={nameText} name="name" />
-        </Section>
-        <Section id="form.description" key="form.description">
-          <Legend>Description</Legend>
-          <ValidatedFieldFormik
-            component={AbstractField.default}
-            name="description"
-            onChange={val => {
-              setFieldValue('description', val)
-            }}
-          />
-        </Section>
-        <Section id="form.submitpopup" key="form.submitpopup">
-          <Legend>Submit on Popup</Legend>
-          <ValidatedFieldFormik
-            component={RadioBox.default}
-            inline
-            name="haspopup"
-            onChange={(input, value) => {
-              setFieldValue('haspopup', input)
-              selectPopup(input)
-            }}
-            options={[
-              {
-                label: 'Yes',
-                value: 'true',
-              },
-              {
-                label: 'No',
-                value: 'false',
-              },
-            ]}
-          />
-        </Section>
-        {showPopupValue === 'true' && [
-          <Section id="popup.title" key="popup.title">
-            <Legend>Popup Title</Legend>
-            <ValidatedFieldFormik component={nameText} name="popuptitle" />
-          </Section>,
-          <Section id="popup.description" key="popup.description">
-            <Legend>Description</Legend>
-            <ValidatedFieldFormik
-              component={AbstractField.default}
-              name="popupdescription"
-              onChange={val => {
-                setFieldValue('popupdescription', val)
-              }}
-            />
-          </Section>,
-        ]}
-        <Button primary type="submit">
-          {mode === 'create' ? 'Create Form' : 'Update Form'}
-        </Button>
-      </form>
-    </Page>
-  )
-
-export default compose(
-  withProps(({ properties }) => {
-    const paths = [
-      'id',
-      'name',
-      'description',
-      'popupdescription',
-      'popuptitle',
-      'haspopup',
-    ]
-    return {
-      initialValues: pick(properties.properties, paths),
-    }
-  }),
-  withState(
-    'showPopupValue',
-    'selectPopup',
-    ({ properties }) => (properties.properties || {}).haspopup,
-  ),
-  withHandlers({
-    changeShowPopup: ({ selectPopup }) => value => selectPopup(() => value),
-  }),
-  withFormik({
-    displayName: 'FormSubmit',
-    mapPropsToValues: data => data.properties.properties,
-    handleSubmit: (props, { props: { mode, onSubmitFn, properties } }) =>
-      onSubmit(props, { mode, onSubmitFn, properties }),
-  }),
-)(FormProperties)
diff --git a/packages/components/xpub-formbuilder/src/components/atoms/Columns.js b/packages/components/xpub-formbuilder/src/components/atoms/Columns.js
deleted file mode 100644
index d51800fd2..000000000
--- a/packages/components/xpub-formbuilder/src/components/atoms/Columns.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import styled from 'styled-components'
-
-const Columns = styled.div`
-  display: grid;
-  grid-column-gap: 2em;
-  grid-template-areas: 'manuscript admin';
-  grid-template-columns: minmax(200px, 70ch) minmax(200px, 60ch);
-  justify-content: center;
-`
-
-const Manuscript = styled.div`
-  grid-area: manuscript;
-`
-
-const Admin = styled.div`
-  grid-area: admin;
-
-  border-left: 1px solid black;
-  padding-left: 40px;
-`
-
-export { Columns, Manuscript, Admin }
diff --git a/packages/components/xpub-formbuilder/src/components/builderComponents/AbstractField.js b/packages/components/xpub-formbuilder/src/components/builderComponents/AbstractField.js
deleted file mode 100644
index e044f1e21..000000000
--- a/packages/components/xpub-formbuilder/src/components/builderComponents/AbstractField.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import React from 'react'
-import { AbstractEditor } from 'xpub-edit'
-
-const AbstractInput = ({ validationStatus, ...input }) => (
-  <AbstractEditor placeholder="Enter text" title="" {...input} />
-)
-
-export default AbstractInput
diff --git a/packages/components/xpub-formbuilder/src/components/builderComponents/CheckBox.js b/packages/components/xpub-formbuilder/src/components/builderComponents/CheckBox.js
deleted file mode 100644
index ce802d6a7..000000000
--- a/packages/components/xpub-formbuilder/src/components/builderComponents/CheckBox.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import React from 'react'
-import { CheckboxGroup } from '@pubsweet/ui'
-
-const CheckboxFieldBuilder = input => <CheckboxGroup {...input} />
-export default CheckboxFieldBuilder
diff --git a/packages/components/xpub-formbuilder/src/components/builderComponents/Menu.js b/packages/components/xpub-formbuilder/src/components/builderComponents/Menu.js
deleted file mode 100644
index b64e39bd1..000000000
--- a/packages/components/xpub-formbuilder/src/components/builderComponents/Menu.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import React from 'react'
-import { Menu, TextField, ValidatedFieldFormik } from '@pubsweet/ui'
-import { compose, withState, withHandlers } from 'recompose'
-import { Legend, Section } from '../styles'
-
-const ValidationMenu = input => (
-  <div>
-    <Menu
-      {...input}
-      selectElement={value => {
-        input.onSelectElement(value)
-      }}
-    />
-    {input.selectelement && input.selectelement !== 'required' && (
-      <Section>
-        <Legend space>FIeld Min / Max</Legend>
-        <ValidatedFieldFormik
-          component={TextField}
-          name={`validateValue.${input.selectelement}`}
-        />
-      </Section>
-    )}
-  </div>
-)
-
-export default compose(
-  withState('selectelement', 'changeSelect', undefined),
-  withHandlers({
-    onSelectElement: ({ changeSelect }) => value => changeSelect(() => value),
-  }),
-)(ValidationMenu)
diff --git a/packages/components/xpub-formbuilder/src/components/builderComponents/OptionsField.js b/packages/components/xpub-formbuilder/src/components/builderComponents/OptionsField.js
deleted file mode 100644
index f429cf618..000000000
--- a/packages/components/xpub-formbuilder/src/components/builderComponents/OptionsField.js
+++ /dev/null
@@ -1,79 +0,0 @@
-import React from 'react'
-import styled from 'styled-components'
-import { FieldArray } from 'formik'
-import { TextField, ValidatedFieldFormik, Button } from '@pubsweet/ui'
-
-const Inline = styled.div`
-  display: inline-block;
-  margin-right: 10px;
-`
-
-const UnbulletedList = styled.div`
-  list-style-type: none;
-  margin-left: -40px;
-`
-
-const Spacing = styled.div`
-  padding: 15px 0px;
-`
-
-const Option = styled.div`
-  padding-bottom: 10px;
-`
-
-const keyInput = input => (
-  <TextField label="Key Option" placeholder="Enter key…" {...input} />
-)
-
-const valueInput = input => (
-  <TextField label="Value Option" placeholder="Enter value…" {...input} />
-)
-
-const renderOptions = ({ form: { values }, push, remove }) => (
-  <ul>
-    <UnbulletedList>
-      <li>
-        <Button onClick={() => push()} plain type="button">
-          Add another option
-        </Button>
-      </li>
-      {(values.options || []).map((option, index) => (
-        <li>
-          <Spacing>
-            <Option>
-              Option:&nbsp;
-              {values.options.length > 1 && (
-                <Button onClick={() => remove(index)} type="button">
-                  Remove
-                </Button>
-              )}
-            </Option>
-            <div>
-              <Inline>
-                <ValidatedFieldFormik
-                  component={keyInput}
-                  name={`options.${index}.label`}
-                  required
-                />
-              </Inline>
-
-              <Inline>
-                <ValidatedFieldFormik
-                  component={valueInput}
-                  name={`options.${index}.value`}
-                  required
-                />
-              </Inline>
-            </div>
-          </Spacing>
-        </li>
-      ))}
-    </UnbulletedList>
-  </ul>
-)
-
-const OptionsField = () => (
-  <FieldArray component={renderOptions} name="options" />
-)
-
-export default OptionsField
diff --git a/packages/components/xpub-formbuilder/src/components/builderComponents/RadioBox.js b/packages/components/xpub-formbuilder/src/components/builderComponents/RadioBox.js
deleted file mode 100644
index f0302c923..000000000
--- a/packages/components/xpub-formbuilder/src/components/builderComponents/RadioBox.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import React from 'react'
-import { RadioGroup } from '@pubsweet/ui'
-
-const RadioboxFieldBuilder = input => <RadioGroup {...input} />
-export default RadioboxFieldBuilder
diff --git a/packages/components/xpub-formbuilder/src/components/builderComponents/TextArea.js b/packages/components/xpub-formbuilder/src/components/builderComponents/TextArea.js
deleted file mode 100644
index 4be5acbfb..000000000
--- a/packages/components/xpub-formbuilder/src/components/builderComponents/TextArea.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import React from 'react'
-
-const TextareaFieldBuilder = input => <textarea {...input} />
-export default TextareaFieldBuilder
diff --git a/packages/components/xpub-formbuilder/src/components/builderComponents/TextField.js b/packages/components/xpub-formbuilder/src/components/builderComponents/TextField.js
deleted file mode 100644
index 221ecb215..000000000
--- a/packages/components/xpub-formbuilder/src/components/builderComponents/TextField.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import React from 'react'
-import { TextField } from '@pubsweet/ui'
-
-const TextFieldBuilder = input => <TextField {...input} />
-export default TextFieldBuilder
diff --git a/packages/components/xpub-formbuilder/src/components/builderComponents/index.js b/packages/components/xpub-formbuilder/src/components/builderComponents/index.js
deleted file mode 100644
index 24858cd7d..000000000
--- a/packages/components/xpub-formbuilder/src/components/builderComponents/index.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import * as OptionsField from './OptionsField'
-import * as TextField from './TextField'
-import * as Menu from './Menu'
-import * as AbstractField from './AbstractField'
-import * as CheckBox from './CheckBox'
-import * as RadioBox from './RadioBox'
-import * as TextArea from './TextArea'
-
-export {
-  OptionsField,
-  TextField,
-  Menu,
-  AbstractField,
-  CheckBox,
-  RadioBox,
-  TextArea,
-}
diff --git a/packages/components/xpub-formbuilder/src/components/config/Elements.js b/packages/components/xpub-formbuilder/src/components/config/Elements.js
deleted file mode 100644
index 425c9247f..000000000
--- a/packages/components/xpub-formbuilder/src/components/config/Elements.js
+++ /dev/null
@@ -1,171 +0,0 @@
-import config from 'config'
-
-const extendComponents = (config['pubsweet-component-xpub-formbuilder'] || {})
-  .components
-
-const textfield = {
-  component: 'TextField',
-}
-
-const orderfield = {
-  component: 'TextField',
-}
-
-const optionfield = {
-  component: 'OptionsField',
-}
-
-const editorfield = {
-  component: 'AbstractField',
-}
-
-const textarea = {
-  component: 'TextArea',
-  props: {
-    cols: 55,
-    rows: 5,
-  },
-}
-
-const validate = {
-  component: 'Menu',
-  props: {
-    multi: true,
-    options: [
-      {
-        value: 'required',
-        label: 'Required',
-      },
-      {
-        value: 'minSize',
-        label: 'minSize',
-      },
-      {
-        value: 'minChars',
-        label: 'minimum Characters',
-      },
-      {
-        value: 'maxChars',
-        label: 'maximum Characters',
-      },
-    ],
-  },
-}
-
-const radiofield = {
-  component: 'RadioBox',
-  props: {
-    inline: true,
-    options: [
-      {
-        value: 'true',
-        label: 'Yes',
-      },
-      {
-        value: 'false',
-        label: 'No',
-      },
-    ],
-    label: 'Inline',
-  },
-}
-
-const elements = {
-  Supplementary: {
-    id: textfield,
-    title: textfield,
-    name: textfield,
-    description: editorfield,
-    order: orderfield,
-    validate,
-  },
-  AuthorsInput: {
-    id: textfield,
-    title: textfield,
-    name: textfield,
-    order: orderfield,
-    validate,
-  },
-  AbstractEditor: {
-    id: textfield,
-    title: textfield,
-    name: textfield,
-    placeholder: textfield,
-    description: editorfield,
-    order: orderfield,
-    validate,
-  },
-  TextField: {
-    id: textfield,
-    title: textfield,
-    name: textfield,
-    placeholder: textfield,
-    description: editorfield,
-    order: orderfield,
-    validate,
-    parse: {
-      component: 'Menu',
-      props: {
-        label: 'Split with Comma Seperate',
-        options: [
-          {
-            value: 'false',
-            label: 'None',
-          },
-          {
-            value: 'split',
-            label: 'Split',
-          },
-        ],
-      },
-    },
-    format: {
-      component: 'Menu',
-      props: {
-        label: 'Join with Comma',
-        options: [
-          {
-            value: 'false',
-            label: 'None',
-          },
-          {
-            value: 'join',
-            label: 'Join',
-          },
-        ],
-      },
-    },
-  },
-  CheckboxGroup: {
-    id: textfield,
-    title: textfield,
-    name: textfield,
-    description: editorfield,
-    options: optionfield,
-    order: orderfield,
-    validate,
-  },
-  Menu: {
-    id: textfield,
-    title: textfield,
-    name: textfield,
-    placeholder: textfield,
-    description: editorfield,
-    options: optionfield,
-    order: orderfield,
-    validate,
-  },
-  RadioGroup: {
-    id: textfield,
-    title: textfield,
-    name: textfield,
-    description: editorfield,
-    options: optionfield,
-    order: orderfield,
-    inline: radiofield,
-    sectioncss: textarea,
-    validate,
-  },
-}
-
-export default Object.assign(elements, extendComponents)
diff --git a/packages/components/xpub-formbuilder/src/components/index.js b/packages/components/xpub-formbuilder/src/components/index.js
deleted file mode 100644
index 317c4b3b2..000000000
--- a/packages/components/xpub-formbuilder/src/components/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as FormBuilderPage } from './FormBuilderPage'
diff --git a/packages/components/xpub-formbuilder/src/components/molecules/Page.js b/packages/components/xpub-formbuilder/src/components/molecules/Page.js
deleted file mode 100644
index d9d9ed7c6..000000000
--- a/packages/components/xpub-formbuilder/src/components/molecules/Page.js
+++ /dev/null
@@ -1,30 +0,0 @@
-import styled from 'styled-components'
-import { th } from '@pubsweet/ui-toolkit'
-
-const Page = styled.div`
-  margin: auto;
-  max-width: 60em;
-`
-
-const Section = styled.div`
-  margin: ${th('gridUnit')} 0;
-
-  &:not(:last-of-type) {
-    margin-bottom: calc(${th('gridUnit')} * 2);
-  }
-`
-
-const Heading = styled.div`
-  color: ${th('colorPrimary')};
-  font-family: ${th('fontReading')};
-  font-size: ${th('fontSizeHeading3')};
-  margin: ${th('gridUnit')} 0;
-  text-transform: uppercase;
-`
-
-const UploadContainer = styled.div`
-  display: flex;
-  justify-content: center;
-`
-
-export { Page, Section, Heading, UploadContainer }
diff --git a/packages/components/xpub-formbuilder/src/components/styles/index.js b/packages/components/xpub-formbuilder/src/components/styles/index.js
deleted file mode 100644
index 96872aa8d..000000000
--- a/packages/components/xpub-formbuilder/src/components/styles/index.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import styled from 'styled-components'
-import { th } from '@pubsweet/ui-toolkit'
-
-export const Section = styled.div`
-  margin: calc(${th('gridUnit')} * 6) 0;
-`
-
-export const Legend = styled.div`
-  font-size: ${th('fontSizeBase')};
-  font-weight: 600;
-  margin-bottom: ${({ space, theme }) => space && theme.gridUnit};
-`
diff --git a/packages/components/xpub-formbuilder/src/index.js b/packages/components/xpub-formbuilder/src/index.js
deleted file mode 100644
index 61a1b3de5..000000000
--- a/packages/components/xpub-formbuilder/src/index.js
+++ /dev/null
@@ -1,12 +0,0 @@
-module.exports = {
-  frontend: {
-    components: [() => require('./components')],
-    actions: () => ({
-      getForm: require('./redux/FormBuilder').getForm,
-    }),
-    reducers: {
-      forms: () => require('./redux/FormBuilder').default,
-    },
-  },
-  server: () => require('./server/formRequestBackend'),
-}
diff --git a/packages/components/xpub-formbuilder/src/redux/FormBuilder.js b/packages/components/xpub-formbuilder/src/redux/FormBuilder.js
deleted file mode 100644
index edf54a138..000000000
--- a/packages/components/xpub-formbuilder/src/redux/FormBuilder.js
+++ /dev/null
@@ -1,135 +0,0 @@
-import * as api from 'pubsweet-client/src/helpers/api'
-
-export const GET_FORM_REQUEST = 'GET_FORM_REQUEST'
-export const GET_FORM_SUCCESS = 'GET_FORM_SUCCESS'
-export const GET_FORM_FAILURE = 'GET_FORM_FAILURE'
-
-function getFormRequest(project, version) {
-  return {
-    type: GET_FORM_REQUEST,
-  }
-}
-
-function getFormSuccess(forms) {
-  return {
-    type: GET_FORM_SUCCESS,
-    forms,
-  }
-}
-
-function getFormFailure(error) {
-  return {
-    type: GET_FORM_FAILURE,
-    error,
-  }
-}
-
-export function getForms() {
-  return dispatch => {
-    dispatch(getFormRequest())
-
-    return api
-      .get('/get-forms', {})
-      .then(result => {
-        dispatch(getFormSuccess(result))
-      })
-      .catch(error => dispatch(getFormFailure(error)))
-  }
-}
-
-export function getForm(formId) {
-  return dispatch => {
-    dispatch(getFormRequest())
-
-    return api
-      .get(`/get-form/${formId}`, {})
-      .then(result => {
-        dispatch(getFormSuccess(result))
-      })
-      .catch(error => dispatch(getFormFailure(error)))
-  }
-}
-
-export function updateForms(form, properties) {
-  return dispatch => {
-    dispatch(getFormRequest())
-
-    return api
-      .update(`/update-forms/${form.id}`, properties)
-      .then(result => {
-        dispatch(getFormSuccess(result))
-      })
-      .catch(error => dispatch(getFormFailure(error)))
-  }
-}
-
-export function updateElements(form, properties) {
-  return dispatch => {
-    dispatch(getFormRequest())
-
-    return api
-      .update(
-        `/update-forms/${form.id}/element/${properties.children.id}`,
-        properties,
-      )
-      .then(result => {
-        dispatch(getFormSuccess(result))
-      })
-      .catch(error => dispatch(getFormFailure(error)))
-  }
-}
-
-export function deleteForms(form) {
-  return dispatch => {
-    dispatch(getFormRequest())
-
-    return api
-      .remove(`/delete-forms/${form.id}`)
-      .then(result => {
-        dispatch(getFormSuccess(result))
-      })
-      .catch(error => dispatch(getFormFailure(error)))
-  }
-}
-
-export function deleteElements(form, element) {
-  return dispatch => {
-    dispatch(getFormRequest())
-
-    return api
-      .remove(`/delete-forms/${form.id}/elements/${element.id}`)
-      .then(result => {
-        dispatch(getFormSuccess(result))
-      })
-      .catch(error => dispatch(getFormFailure(error)))
-  }
-}
-
-export function createForms(properties) {
-  return dispatch => {
-    dispatch(getFormRequest())
-
-    return api
-      .create('/create-forms', properties)
-      .then(result => {
-        dispatch(getFormSuccess(result))
-      })
-      .catch(error => dispatch(getFormFailure(error)))
-  }
-}
-
-const initialState = {}
-export default (state = initialState, action) => {
-  switch (action.type) {
-    case GET_FORM_SUCCESS:
-      return {
-        forms: action.forms.forms,
-      }
-
-    case GET_FORM_FAILURE:
-      return { error: action.error }
-
-    default:
-      return state
-  }
-}
diff --git a/packages/components/xpub-formbuilder/src/server/formRequestBackend.js b/packages/components/xpub-formbuilder/src/server/formRequestBackend.js
deleted file mode 100644
index 898f4625d..000000000
--- a/packages/components/xpub-formbuilder/src/server/formRequestBackend.js
+++ /dev/null
@@ -1,204 +0,0 @@
-// const { pick } = require('lodash')
-const config = require('config')
-const passport = require('passport')
-// const logger = require('@pubsweet/logger')
-// const User = require('pubsweet-server/src/models/User')
-// const authsome = require('pubsweet-server/src/helpers/authsome')
-// const AuthorizationError = require('pubsweet-server/src/errors/AuthorizationError')
-const fs = require('fs')
-// const filepath = require('path')
-const { readFiles, mkdirp } = require('./util')
-
-const authBearer = passport.authenticate('bearer', { session: false })
-
-const mergeFiles = path =>
-  readFiles(path).then(files => {
-    const forms = []
-    files.forEach((item, index) => {
-      // const { name } = filepath.parse(item.filename)
-      const content = JSON.parse(item.content)
-      if (!content.name) return
-      forms.push(content)
-    })
-    return { forms }
-  })
-
-module.exports = app => {
-  app.get('/api/get-forms', authBearer, async (req, res, next) => {
-    try {
-      const folderPath = `${config.get(
-        'pubsweet-component-xpub-formbuilder.path',
-      )}/`
-
-      mkdirp(folderPath)
-      mergeFiles(folderPath).then(forms =>
-        res.send({
-          forms,
-        }),
-      )
-    } catch (err) {
-      next(err)
-    }
-  })
-
-  app.get('/api/get-form/:formId', authBearer, async (req, res, next) => {
-    try {
-      const { formId } = req.params
-      const folderPath = `${config.get(
-        'pubsweet-component-xpub-formbuilder.path',
-      )}/`
-      const path = `${folderPath}${formId}.json`
-      const forms = JSON.parse(fs.readFileSync(path, 'utf8'))
-
-      res.send({
-        forms,
-      })
-    } catch (err) {
-      next(err)
-    }
-  })
-
-  app.patch(
-    '/api/update-forms/:formId/element/:elementId',
-    authBearer,
-    async (req, res, next) => {
-      try {
-        const { formId, elementId } = req.params
-        const content = req.body
-        const folderPath = `${config.get(
-          'pubsweet-component-xpub-formbuilder.path',
-        )}/`
-        const path = `${folderPath}${formId}.json`
-        const forms = JSON.parse(fs.readFileSync(path, 'utf8'))
-        if (!forms.children) {
-          forms.children = [content.children]
-        } else if (forms.children.some(e => e.id === elementId)) {
-          const children = forms.children.map(value =>
-            value.id === elementId ? content.children : value,
-          )
-          forms.children = children
-        } else {
-          forms.children.push(content.children)
-        }
-
-        fs.writeFileSync(path, JSON.stringify(forms))
-        mergeFiles(folderPath).then(forms =>
-          res.send({
-            forms,
-          }),
-        )
-      } catch (err) {
-        next(err)
-      }
-    },
-  )
-
-  app.patch('/api/update-forms/:formId', authBearer, async (req, res, next) => {
-    try {
-      const { formId } = req.params
-      let content = req.body
-      const folderPath = `${config.get(
-        'pubsweet-component-xpub-formbuilder.path',
-      )}/`
-      let path = `${folderPath}${formId}.json`
-
-      if (fs.existsSync(path)) {
-        let forms = JSON.parse(fs.readFileSync(path, 'utf8'))
-        forms = Object.assign(forms, content)
-        content = forms
-        if (formId !== content.id) {
-          fs.unlinkSync(path)
-          path = `${folderPath}${content.id}.json`
-        }
-      }
-
-      fs.writeFileSync(path, JSON.stringify(content))
-      mergeFiles(folderPath).then(forms =>
-        res.send({
-          forms,
-        }),
-      )
-    } catch (err) {
-      next(err)
-    }
-  })
-
-  app.post('/api/create-forms', authBearer, async (req, res, next) => {
-    try {
-      const content = req.body
-      const folderPath = `${config.get(
-        'pubsweet-component-xpub-formbuilder.path',
-      )}/`
-      const path = `${folderPath}/${content.id}.json`
-
-      if (!fs.existsSync(path)) {
-        mkdirp(folderPath)
-        fs.writeFileSync(path, JSON.stringify(content))
-      }
-
-      mergeFiles(folderPath).then(forms =>
-        res.send({
-          forms,
-        }),
-      )
-    } catch (err) {
-      next(err)
-    }
-  })
-
-  app.delete(
-    '/api/delete-forms/:formId/elements/:elementId',
-    authBearer,
-    async (req, res, next) => {
-      try {
-        const { formId, elementId } = req.params
-        const folderPath = `${config.get(
-          'pubsweet-component-xpub-formbuilder.path',
-        )}/`
-
-        const path = `${folderPath}/${formId}.json`
-        const forms = JSON.parse(fs.readFileSync(path, 'utf8'))
-
-        if (forms.children) {
-          const children = forms.children.filter(el => el.id !== elementId)
-          forms.children = children
-          fs.writeFileSync(path, JSON.stringify(forms))
-        }
-
-        mergeFiles(folderPath).then(forms =>
-          res.send({
-            forms,
-          }),
-        )
-      } catch (err) {
-        next(err)
-      }
-    },
-  )
-
-  app.delete(
-    '/api/delete-forms/:formId',
-    authBearer,
-    async (req, res, next) => {
-      try {
-        const { formId } = req.params
-        const folderPath = `${config.get(
-          'pubsweet-component-xpub-formbuilder.path',
-        )}/`
-        const path = `${folderPath}${formId}.json`
-
-        if (fs.existsSync(path)) {
-          fs.unlinkSync(path)
-        }
-
-        mergeFiles(folderPath).then(forms =>
-          res.send({
-            forms,
-          }),
-        )
-      } catch (err) {
-        next(err)
-      }
-    },
-  )
-}
diff --git a/packages/components/xpub-formbuilder/src/server/util.js b/packages/components/xpub-formbuilder/src/server/util.js
deleted file mode 100644
index 32976c84c..000000000
--- a/packages/components/xpub-formbuilder/src/server/util.js
+++ /dev/null
@@ -1,58 +0,0 @@
-const fs = require('fs')
-const path = require('path')
-
-const Util = {}
-
-const promiseAllP = (items, block) => {
-  const promises = []
-  items.forEach((item, index) => {
-    const prom = () =>
-      new Promise((resolve, reject) =>
-        block.apply(this, [item, index, resolve, reject]),
-      )
-    promises.push(prom(item, index))
-  })
-  return Promise.all(promises)
-}
-
-Util.mkdirp = dir =>
-  path
-    .resolve(dir)
-    .split(path.sep)
-    .reduce((acc, cur) => {
-      const currentPath = path.normalize(acc + path.sep + cur)
-      try {
-        fs.statSync(currentPath)
-      } catch (e) {
-        if (e.code === 'ENOENT') {
-          fs.mkdirSync(currentPath)
-        } else {
-          throw e
-        }
-      }
-      return currentPath
-    }, '')
-
-Util.readFiles = dirname =>
-  new Promise((resolve, reject) => {
-    fs.readdir(dirname, (err, filenames) => {
-      if (err) return reject(err)
-      return promiseAllP(filenames, (filename, index, resolve, reject) =>
-        fs.readFile(
-          path.resolve(dirname, filename),
-          'utf-8',
-          (err, content) => {
-            if (err) return reject(err)
-            return resolve({
-              filename,
-              content,
-            })
-          },
-        ),
-      )
-        .then(results => resolve(results))
-        .catch(error => reject(error))
-    })
-  })
-
-module.exports = Util
diff --git a/packages/components/xpub-formbuilder/src/test/FormBuilder.test.js b/packages/components/xpub-formbuilder/src/test/FormBuilder.test.js
deleted file mode 100644
index 441dd6819..000000000
--- a/packages/components/xpub-formbuilder/src/test/FormBuilder.test.js
+++ /dev/null
@@ -1,110 +0,0 @@
-import React from 'react'
-import Enzyme, { shallow } from 'enzyme'
-import Adapter from 'enzyme-adapter-react-16'
-import { Action } from '@pubsweet/ui'
-
-import { diveTo } from './util'
-import FormBuilder from '../components/FormBuilder'
-import forms from './config/test.json'
-import formsnoelements from './config/testnoelements.json'
-
-jest.mock('config', () => ({
-  'pubsweet-client': {},
-  authsome: {
-    mode: 'authsome',
-    teams: {
-      seniorEditor: {
-        name: 'Senior Editors',
-        permissions: '',
-      },
-      handlingEditor: {
-        name: 'Handling Editors',
-        permissions: '',
-      },
-      managingEditor: {
-        name: 'Managing Editors',
-        permissions: '',
-      },
-      reviewer: {
-        name: 'Reviewer',
-        permissions: '',
-      },
-    },
-  },
-}))
-
-// this should be elsewhere
-Enzyme.configure({ adapter: new Adapter() })
-
-describe('FormBuilder', () => {
-  const makeWrapper = (props = {}) => {
-    props = Object.assign(
-      {
-        form: formsnoelements[0],
-      },
-      props,
-    )
-
-    return shallow(<FormBuilder {...props} />)
-  }
-
-  it('shows just the add element button', () => {
-    const formbuilder = makeWrapper()
-    expect(
-      diveTo(formbuilder, 'lifecycle(FormBuilder)', {})
-        .dive()
-        .find('#builder-element'),
-    ).toHaveLength(0)
-
-    expect(
-      diveTo(formbuilder, 'lifecycle(FormBuilder)', {})
-        .dive()
-        .find('#add-element'),
-    ).toHaveLength(1)
-  })
-
-  // TODO: This has started failing by upgrading enzyme. There
-  // are a few issues with these tests that need to be fixed
-  // anyway.
-  it.skip('shows add element button and form elements', () => {
-    const formbuilder = makeWrapper({ form: forms[0] })
-
-    expect(
-      diveTo(formbuilder, 'lifecycle(FormBuilder)', {})
-        .dive()
-        .find('#builder-element')
-        .dive()
-        .at(0),
-    ).toHaveLength(2)
-
-    expect(
-      diveTo(formbuilder, 'lifecycle(FormBuilder)', {})
-        .dive()
-        .find('#add-element'),
-    ).toHaveLength(1)
-  })
-
-  it('adds empty element to the form', () => {
-    const formbuilder = makeWrapper()
-    expect(
-      diveTo(formbuilder, 'lifecycle(FormBuilder)', {})
-        .dive()
-        .find('#builder-element'),
-    ).toHaveLength(0)
-
-    diveTo(formbuilder, 'lifecycle(FormBuilder)', {})
-      .dive()
-      .find('#add-element')
-      .dive()
-      .find(Action)
-      .simulate('click')
-
-    formbuilder.update()
-
-    expect(
-      diveTo(formbuilder, 'lifecycle(FormBuilder)', {})
-        .dive()
-        .find('#builder-element'),
-    ).toHaveLength(1)
-  })
-})
diff --git a/packages/components/xpub-formbuilder/src/test/FormBuilderLayout.test.js b/packages/components/xpub-formbuilder/src/test/FormBuilderLayout.test.js
deleted file mode 100644
index bc7b005ff..000000000
--- a/packages/components/xpub-formbuilder/src/test/FormBuilderLayout.test.js
+++ /dev/null
@@ -1,142 +0,0 @@
-import React from 'react'
-import faker from 'faker'
-import Enzyme, { mount } from 'enzyme'
-import { MemoryRouter } from 'react-router-dom'
-import { MockedProvider } from 'react-apollo/test-utils'
-import Adapter from 'enzyme-adapter-react-16'
-import { ThemeProvider } from 'styled-components'
-import gql from 'graphql-tag'
-
-import FormProperties from '../components/FormProperties'
-import FormBuilderLayout from '../components/FormBuilderLayout'
-import FormBuilder from '../components/FormBuilder'
-import noforms from './config/noforms.json'
-import testforms from './config/test.json'
-
-// this should be elsewhere
-Enzyme.configure({ adapter: new Adapter() })
-
-jest.mock('config', () => ({
-  'pubsweet-client': {},
-  authsome: {
-    mode: 'authsome',
-    teams: {
-      seniorEditor: {
-        name: 'Senior Editors',
-        permissions: '',
-      },
-      handlingEditor: {
-        name: 'Handling Editors',
-        permissions: '',
-      },
-      managingEditor: {
-        name: 'Managing Editors',
-        permissions: '',
-      },
-      reviewer: {
-        name: 'Reviewer',
-        permissions: '',
-      },
-    },
-  },
-}))
-
-const query = gql`
-  query {
-    currentUser {
-      id
-      username
-      admin
-    }
-
-    getForms
-  }
-`
-
-const mocks = [
-  {
-    request: {
-      query,
-    },
-    result: {
-      data: {
-        currentUser: { id: faker.random.uuid(), username: 'test', admin: true },
-        getForms: noforms,
-      },
-    },
-  },
-]
-
-describe('FormBuilder Layout', () => {
-  const makeWrapper = (props = {}) =>
-    mount(
-      <MemoryRouter>
-        <ThemeProvider
-          theme={{
-            colorPrimary: 'blue',
-            colorSecondary: '#E7E7E7',
-          }}
-        >
-          <MockedProvider addTypename={false} mocks={mocks}>
-            <FormBuilderLayout {...props} />
-          </MockedProvider>
-        </ThemeProvider>
-      </MemoryRouter>,
-    )
-
-  it('shows just the create form tab', () => {
-    const formbuilder = makeWrapper({
-      properties: {
-        type: 'form',
-      },
-      activeTab: 'new',
-    })
-
-    expect(
-      formbuilder.find('[data-test-id="tab-container"]').children(),
-    ).toHaveLength(1)
-
-    expect(
-      formbuilder
-        .find(FormProperties)
-        .find('form')
-        .text(),
-    ).toContain('Create Form')
-
-    expect(
-      formbuilder
-        .find(FormProperties)
-        .at(1)
-        .find('form'),
-    ).toHaveLength(0)
-  })
-
-  it('shows three tabs and make the first active', () => {
-    const formbuilder = makeWrapper({
-      properties: {
-        type: 'form',
-        properties: testforms[0],
-      },
-      activeTab: 0,
-      getForms: testforms,
-    })
-
-    expect(
-      formbuilder.find('[data-test-id="tab-container"]').children(),
-    ).toHaveLength(3)
-
-    expect(
-      formbuilder
-        .find(FormBuilder)
-        .find('BuilderElement')
-        .children(),
-    ).toHaveLength(testforms[0].children.length)
-
-    expect(
-      formbuilder
-        .find(FormProperties)
-        .at(0)
-        .find('form'),
-    ).toHaveLength(1)
-  })
-})
diff --git a/packages/components/xpub-formbuilder/src/test/FormBuilderPage.integration.test.js b/packages/components/xpub-formbuilder/src/test/FormBuilderPage.integration.test.js
deleted file mode 100644
index 11db339fa..000000000
--- a/packages/components/xpub-formbuilder/src/test/FormBuilderPage.integration.test.js
+++ /dev/null
@@ -1,114 +0,0 @@
-import React from 'react'
-import faker from 'faker'
-import { MemoryRouter } from 'react-router-dom'
-import { MockedProvider } from 'react-apollo/test-utils'
-import gql from 'graphql-tag'
-
-import Enzyme, { mount } from 'enzyme'
-import Adapter from 'enzyme-adapter-react-16'
-
-import { ThemeProvider } from 'styled-components'
-
-import FormBuilderPage from '../components/FormBuilderPage'
-
-import forms from './config/test.json'
-
-import FormProperties from '../components/FormProperties'
-
-// this should be elsewhere
-Enzyme.configure({ adapter: new Adapter() })
-
-jest.mock('config', () => {
-  const path = require('path')
-
-  return {
-    'pubsweet-client': {},
-    'pubsweet-component-xpub-formbuilder': {
-      path: path.resolve('../test/config'),
-    },
-    authsome: {
-      mode: 'authsome',
-      teams: {
-        seniorEditor: {
-          name: 'Senior Editors',
-          permissions: '',
-        },
-        handlingEditor: {
-          name: 'Handling Editors',
-          permissions: '',
-        },
-        managingEditor: {
-          name: 'Managing Editors',
-          permissions: '',
-        },
-        reviewer: {
-          name: 'Reviewer',
-          permissions: '',
-        },
-      },
-    },
-  }
-})
-
-jest.mock(
-  'pubsweet-client/src/helpers/AuthorizeWithGraphQL',
-  () => 'AuthorizeWithGraphQL',
-)
-
-global.window.localStorage = {
-  getItem: jest.fn(() => 'tok123'),
-}
-
-const query = gql`
-  query {
-    currentUser {
-      id
-      username
-      admin
-    }
-
-    getForms
-  }
-`
-
-const mocks = [
-  {
-    request: {
-      query,
-    },
-    result: {
-      data: {
-        currentUser: { id: faker.random.uuid(), username: 'test', admin: true },
-        getForms: forms,
-      },
-    },
-  },
-]
-
-describe('FormBuilderPage', () => {
-  it('runs', done => {
-    const page = mount(
-      <MemoryRouter>
-        <ThemeProvider
-          theme={{
-            colorPrimary: 'blue',
-            colorSecondary: '#E7E7E7',
-          }}
-        >
-          <MockedProvider addTypename={false} mocks={mocks}>
-            <FormBuilderPage />
-          </MockedProvider>
-        </ThemeProvider>
-      </MemoryRouter>,
-    )
-
-    setTimeout(() => {
-      page.update()
-      expect(page.find('#builder-element').children()).toHaveLength(
-        forms[0].children.length,
-      )
-      expect(page.find(FormProperties)).toHaveLength(1)
-      done()
-    }, 1000)
-  })
-})
diff --git a/packages/components/xpub-formbuilder/src/test/config/noforms.json b/packages/components/xpub-formbuilder/src/test/config/noforms.json
deleted file mode 100644
index fe51488c7..000000000
--- a/packages/components/xpub-formbuilder/src/test/config/noforms.json
+++ /dev/null
@@ -1 +0,0 @@
-[]
diff --git a/packages/components/xpub-formbuilder/src/test/config/test.json b/packages/components/xpub-formbuilder/src/test/config/test.json
deleted file mode 100644
index 824c3c087..000000000
--- a/packages/components/xpub-formbuilder/src/test/config/test.json
+++ /dev/null
@@ -1,27 +0,0 @@
-[
-  {
-    "name": "test form",
-    "id": "test",
-    "children": [
-      {
-        "title": "Title",
-        "id": "1531303631370",
-        "component": "AbstractEditor",
-        "name": "metadata.title",
-        "placeholder": "Enter Title...",
-        "validate": ["required"],
-        "validateValue": { "minChars": "10" }
-      },
-      {
-        "title": "Title 1",
-        "id": "1531303631371",
-        "component": "AbstractEditor",
-        "name": "metadata.title",
-        "placeholder": "Enter Title...",
-        "validate": ["required"],
-        "validateValue": { "minChars": "10" }
-      }
-    ]
-  },
-  { "name": "test form 1", "id": "test1" }
-]
diff --git a/packages/components/xpub-formbuilder/src/test/config/testnoelements.json b/packages/components/xpub-formbuilder/src/test/config/testnoelements.json
deleted file mode 100644
index af4bcbc4e..000000000
--- a/packages/components/xpub-formbuilder/src/test/config/testnoelements.json
+++ /dev/null
@@ -1 +0,0 @@
-[{ "name": "test form", "id": "test" }]
diff --git a/packages/components/xpub-formbuilder/src/test/util.js b/packages/components/xpub-formbuilder/src/test/util.js
deleted file mode 100644
index 639fb1b87..000000000
--- a/packages/components/xpub-formbuilder/src/test/util.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import { merge } from 'lodash'
-
-export const diveTo = (
-  shallowWrapper,
-  identifier,
-  options = { context: {} },
-) => {
-  const element = shallowWrapper.getElement()
-  if (!(element && element.type)) {
-    throw new Error(
-      `Failed to dive to ${identifier} - is it not in the component tree?`,
-    )
-  }
-  const instance = shallowWrapper.instance()
-
-  if (instance && instance.constructor.displayName === identifier) {
-    return shallowWrapper
-  }
-
-  const context = merge(
-    {},
-    instance && instance.getChildContext ? instance.getChildContext() : {},
-    options.context,
-  )
-
-  return diveTo(shallowWrapper.dive({ context }), identifier, { context })
-}
diff --git a/packages/components/xpub-manuscript/package.json b/packages/components/xpub-manuscript/package.json
index d446427ba..3e7600ee3 100644
--- a/packages/components/xpub-manuscript/package.json
+++ b/packages/components/xpub-manuscript/package.json
@@ -19,7 +19,6 @@
     "pubsweet-client": ">=2.1.0",
     "react": ">=16",
     "react-apollo": "^2.3.3",
-    "react-redux": ">=5.0.2",
     "react-router-dom": ">=4.2.2",
     "styled-components": "^4.1.3"
   },
@@ -34,7 +33,6 @@
     "pubsweet-client": "^8.0.4",
     "react": "^16.2.0",
     "react-dom": "^16.2.0",
-    "react-redux": "^5.0.2",
     "react-router-dom": "^4.2.2",
     "recompose": "^0.26.0",
     "rimraf": "^2.6.1"
diff --git a/packages/components/xpub-review/CHANGELOG.md b/packages/components/xpub-review/CHANGELOG.md
deleted file mode 100644
index d836a6b34..000000000
--- a/packages/components/xpub-review/CHANGELOG.md
+++ /dev/null
@@ -1,615 +0,0 @@
-# Change Log
-
-All notable changes to this project will be documented in this file.
-See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
-
-## [4.0.7](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@4.0.6...pubsweet-component-xpub-review@4.0.7) (2019-01-16)
-
-
-### Bug Fixes
-
-* **components:** change back teams model to previous model ([a5eeae0](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/a5eeae0))
-* **components:** fixing components after new manuscript version ([89537ff](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/89537ff))
-* **components:** graphql data model changes ([4b61093](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/4b61093))
-* **formik:** improve formik usage ([24b42ff](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/24b42ff))
-* **graphql:** review components fixes ([8094d9e](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/8094d9e))
-* **manuscript:** wax did not show ([80ae8c6](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/80ae8c6))
-* **merge:** merging to master ([8603808](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/8603808))
-* **test:** problems with eslint and test ([48f7fe2](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/48f7fe2))
-* **xpub-review:** changes tp reviews ([5ae4240](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/5ae4240))
-
-
-
-
-
-## [4.0.6](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@4.0.5...pubsweet-component-xpub-review@4.0.6) (2019-01-14)
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-
-
-
-
-## [4.0.5](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@4.0.4...pubsweet-component-xpub-review@4.0.5) (2019-01-13)
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-
-
-
-
-## [4.0.4](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@4.0.3...pubsweet-component-xpub-review@4.0.4) (2019-01-09)
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-
-
-
-
-## [4.0.3](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@4.0.2...pubsweet-component-xpub-review@4.0.3) (2018-12-12)
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-
-
-
-
-## [4.0.2](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@4.0.1...pubsweet-component-xpub-review@4.0.2) (2018-12-04)
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-
-
-
-
-## [4.0.1](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@4.0.0...pubsweet-component-xpub-review@4.0.1) (2018-11-30)
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-
-
-
-
-# [4.0.0](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@3.2.0...pubsweet-component-xpub-review@4.0.0) (2018-11-29)
-
-
-### Features
-
-* **various:** update styled-components ([5c51466](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/5c51466))
-* **various:** upgrade styled-components ([9b886f6](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/9b886f6))
-
-
-### BREAKING CHANGES
-
-* **various:** Replace all styled-components .extend with styled()
-* **various:** Replace styled-components injectGlobal with new createGlobalStyle
-
-
-
-
-
-<a name="3.2.0"></a>
-# [3.2.0](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@3.1.13...pubsweet-component-xpub-review@3.2.0) (2018-11-05)
-
-
-### Features
-
-* GraphQL Xpub review component ([66b3e73](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/66b3e73))
-
-
-
-
-<a name="3.1.13"></a>
-## [3.1.13](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@3.1.12...pubsweet-component-xpub-review@3.1.13) (2018-10-08)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-<a name="3.1.12"></a>
-## [3.1.12](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@3.1.11...pubsweet-component-xpub-review@3.1.12) (2018-09-27)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-<a name="3.1.11"></a>
-## [3.1.11](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@3.1.10...pubsweet-component-xpub-review@3.1.11) (2018-09-19)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-<a name="3.1.10"></a>
-## [3.1.10](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@3.1.9...pubsweet-component-xpub-review@3.1.10) (2018-09-06)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-<a name="3.1.9"></a>
-## [3.1.9](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@3.1.8...pubsweet-component-xpub-review@3.1.9) (2018-09-04)
-
-
-### Bug Fixes
-
-* **editor:** replace wax with wax-prosemirror ([d7b12f4](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/d7b12f4))
-
-
-
-
-<a name="3.1.8"></a>
-## [3.1.8](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@3.1.7...pubsweet-component-xpub-review@3.1.8) (2018-08-22)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-<a name="3.1.7"></a>
-## [3.1.7](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@3.1.6...pubsweet-component-xpub-review@3.1.7) (2018-08-20)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-<a name="3.1.6"></a>
-## [3.1.6](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@3.1.5...pubsweet-component-xpub-review@3.1.6) (2018-08-17)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-<a name="3.1.5"></a>
-## [3.1.5](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@3.1.4...pubsweet-component-xpub-review@3.1.5) (2018-08-02)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-<a name="3.1.4"></a>
-## [3.1.4](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@3.1.3...pubsweet-component-xpub-review@3.1.4) (2018-07-27)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-<a name="3.1.3"></a>
-## [3.1.3](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@3.1.2...pubsweet-component-xpub-review@3.1.3) (2018-07-23)
-
-
-### Bug Fixes
-
-* **review:** change attachment files ([bdfa18d](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/bdfa18d))
-* **review:** change user assign editor ([eadca2b](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/eadca2b))
-
-
-
-
-<a name="3.1.2"></a>
-## [3.1.2](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@3.1.1...pubsweet-component-xpub-review@3.1.2) (2018-07-19)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-<a name="3.1.1"></a>
-## [3.1.1](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@3.1.0...pubsweet-component-xpub-review@3.1.1) (2018-07-12)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-<a name="3.1.0"></a>
-# [3.1.0](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@3.0.1...pubsweet-component-xpub-review@3.1.0) (2018-07-09)
-
-
-### Features
-
-* correct version number ([56b467a](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/56b467a))
-* update dependency versions ([51486f4](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/51486f4))
-
-
-
-
-<a name="3.0.1"></a>
-## [3.0.1](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@3.0.0...pubsweet-component-xpub-review@3.0.1) (2018-07-03)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-<a name="3.0.0"></a>
-# [3.0.0](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@2.0.1...pubsweet-component-xpub-review@3.0.0) (2018-07-02)
-
-
-### Features
-
-* **ui:** introduce more line height variables ([85c24e2](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/85c24e2))
-
-
-### BREAKING CHANGES
-
-* **ui:** the existing fontLineHeight variable is gone and replaced by multiple new variables
-
-
-
-
-<a name="2.0.1"></a>
-## [2.0.1](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@2.0.0...pubsweet-component-xpub-review@2.0.1) (2018-06-28)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-<a name="2.0.0"></a>
-# [2.0.0](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@1.0.1...pubsweet-component-xpub-review@2.0.0) (2018-06-28)
-
-
-### Bug Fixes
-
-* **monorepo:** fix versions of ui across repo ([72ada07](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/72ada07))
-* **styleguide:** correct require path ([79a2b07](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/79a2b07))
-
-
-### Code Refactoring
-
-* **ui:** replace current gridunit variables with one small value ([cf48f29](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/cf48f29))
-
-
-### BREAKING CHANGES
-
-* **ui:** Your ui components will now be multiplying a much smaller value so they need to be
-adjusted
-
-
-
-
-<a name="1.0.1"></a>
-## [1.0.1](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@1.0.0...pubsweet-component-xpub-review@1.0.1) (2018-06-19)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-<a name="1.0.0"></a>
-# [1.0.0](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@0.4.2...pubsweet-component-xpub-review@1.0.0) (2018-06-01)
-
-
-### Features
-
-* **ui:** start ui-toolkit module ([2083b9c](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/2083b9c))
-
-
-### BREAKING CHANGES
-
-* **ui:** th now comes from the toolkit, so all th imports from ui are now broken
-
-
-
-
-<a name="0.4.2"></a>
-## [0.4.2](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@0.4.1...pubsweet-component-xpub-review@0.4.2) (2018-05-21)
-
-
-### Bug Fixes
-
-* **components:** use Tabs from pubsweet ui ([8e9fd3c](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/8e9fd3c))
-
-
-
-
-<a name="0.4.1"></a>
-## [0.4.1](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@0.4.0...pubsweet-component-xpub-review@0.4.1) (2018-05-18)
-
-
-### Bug Fixes
-
-* **components:** authors assigning problem ([50baa94](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/50baa94))
-
-
-
-
-<a name="0.4.0"></a>
-# [0.4.0](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@0.3.2...pubsweet-component-xpub-review@0.4.0) (2018-05-10)
-
-
-### Bug Fixes
-
-* **components:** decision linter ([5679ce0](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/5679ce0))
-* **components:** html parse, styled components ([8b24552](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/8b24552))
-* **components:** lint issues ([ff56878](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/ff56878))
-* **components:** redux form ([2f7f1ed](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/2f7f1ed))
-* **components:** review page layout ([4ea2cdd](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/4ea2cdd))
-
-
-### Features
-
-* **components:** add tabs to submission ([0e45892](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/0e45892))
-
-
-
-
-<a name="0.3.2"></a>
-## [0.3.2](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@0.3.1...pubsweet-component-xpub-review@0.3.2) (2018-05-09)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-<a name="0.3.1"></a>
-## [0.3.1](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@0.3.0...pubsweet-component-xpub-review@0.3.1) (2018-05-03)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-<a name="0.3.0"></a>
-# [0.3.0](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@0.2.0...pubsweet-component-xpub-review@0.3.0) (2018-05-03)
-
-
-### Bug Fixes
-
-* **components:** align columns cp page ([a5968b0](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/a5968b0))
-* **components:** align dropdown horizontally ([a7081e3](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/a7081e3))
-* **components:** change position and direction of assign ([7a7eeb3](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/7a7eeb3))
-* **components:** change supplymentary to attachment component ([143c452](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/143c452))
-* **components:** fix lint errors ([be173db](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/be173db))
-* **components:** fix lint errors ([c2b8e52](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/c2b8e52))
-* **components:** fix lint errors ([98046fb](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/98046fb))
-* **components:** fix lint errors ([2503ff9](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/2503ff9))
-* **components:** fix unsued lint error ([20c282c](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/20c282c))
-* **components:** load all users to control panel ([90c88e6](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/90c88e6))
-* **components:** load all users to control panel ([92dac6b](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/92dac6b))
-* **components:** load all users to control panel ([f20e44d](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/f20e44d))
-* **components:** load all users to control panel ([85fa14f](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/85fa14f))
-* **components:** loading data in the decision form ([8f499aa](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/8f499aa))
-* **components:** take care of case of zero files ([b70f728](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/b70f728))
-
-
-### Features
-
-* **components:** add assign editors to cp ([3cca44d](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/3cca44d))
-* **components:** add assign editors to cp ([987310d](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/987310d))
-
-
-
-
-<a name="0.2.0"></a>
-# [0.2.0](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@0.1.4...pubsweet-component-xpub-review@0.2.0) (2018-04-24)
-
-
-### Bug Fixes
-
-* **compoenents:** fix cases of empty objects in metadata ([7a5bfbc](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/7a5bfbc))
-* **components:** change placeholder ([d80a41a](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/d80a41a))
-* **components:** change text input fields ([775a961](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/775a961))
-* **components:** change value to files at upload components ([aa2b45e](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/aa2b45e))
-* **components:** fix file name problem ([73f33c9](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/73f33c9))
-* **components:** passport through route ([fdf9dce](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/fdf9dce))
-* **components:** passport through route ([593eeda](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/593eeda))
-* **components:** remove tables - add list of metadata ([b9d57cd](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/b9d57cd))
-
-
-### Features
-
-* **component:** add make invitation request ([659eb64](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/659eb64))
-* **component:** add make invitation request ([44f1574](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/44f1574))
-* **component:** add make invitation request ([7245d35](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/7245d35))
-* **component:** add make invitation request ([bda7d95](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/bda7d95))
-* **component:** add make invitation request ([b049aa3](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/b049aa3))
-* **component:** add make invitation request ([36faf21](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/36faf21))
-* **component:** add make invitation request ([5a9b393](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/5a9b393))
-* **component:** add make invitation request ([ff3f8fb](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/ff3f8fb))
-* **component:** add make invitation request ([335d0f0](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/335d0f0))
-* **component:** add make invitation request ([d070bb1](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/d070bb1))
-* **component:** add make invitation request ([f9cae33](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/f9cae33))
-* **component:** add make invitation request ([947c846](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/947c846))
-* **component:** add make invitation request ([38e5728](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/38e5728))
-* **component:** add make invitation request ([430e9e2](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/430e9e2))
-* **component:** add make invitation request ([30193b3](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/30193b3))
-* **component:** add make invitation request ([721bbaf](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/721bbaf))
-* **component:** add make invitation request ([c4317bb](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/c4317bb))
-* **component:** add make invitation request ([ae785b9](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/ae785b9))
-* **component:** add make invitation request ([9d0ad57](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/9d0ad57))
-* **component:** add make invitation request ([1412d87](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/1412d87))
-* **component:** add make invitation request ([1911bab](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/1911bab))
-* **component:** add make invitation request ([6f27a3e](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/6f27a3e))
-* **component:** add make invitation request ([3817c8a](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/3817c8a))
-* **component:** add make invitation request ([61a1f0b](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/61a1f0b))
-* **component:** add make invitation request ([4820e45](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/4820e45))
-* **component:** add make invitation request ([27e2984](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/27e2984))
-* **component:** add make invitation request ([9e00e11](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/9e00e11))
-* **component:** add make invitation request ([3d13943](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/3d13943))
-* **component:** add make invitation request ([9d731d3](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/9d731d3))
-* **component:** add make invitation request ([251381c](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/251381c))
-* **component:** add make invitation request ([dcd1f46](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/dcd1f46))
-* **component:** add make invitation request ([20628a4](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/20628a4))
-* **components:** add API endpoint invitation ([4739b84](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/4739b84))
-* **components:** add API endpoint invitation ([9276ef9](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/9276ef9))
-* **components:** add API endpoint invitation ([24810b8](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/24810b8))
-* **components:** add API endpoint invitation ([16bf6a1](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/16bf6a1))
-* **components:** add API endpoint invitation ([d19bf84](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/d19bf84))
-* **components:** add API endpoint invitation ([ee82d6b](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/ee82d6b))
-* **components:** add API endpoint invitation ([17d9532](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/17d9532))
-* **components:** add API endpoint invitation ([009b693](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/009b693))
-* **components:** add API endpoint invitation ([e50383f](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/e50383f))
-* **components:** add API endpoint invitation ([19932d7](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/19932d7))
-* **components:** add API endpoint invitation ([fc40c17](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/fc40c17))
-* **components:** add API endpoint invitation ([3c5cbea](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/3c5cbea))
-* **components:** add API endpoint invitation ([d21afe6](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/d21afe6))
-* **components:** add API endpoint invitation ([d06ae4b](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/d06ae4b))
-* **components:** add API endpoint invitation ([2703f3e](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/2703f3e))
-* **components:** add API endpoint invitation ([d6bb84a](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/d6bb84a))
-* **components:** add API endpoint invitation ([24ee6ca](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/24ee6ca))
-* **components:** add API endpoint invitation ([f963b76](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/f963b76))
-* **components:** add API endpoint invitation ([48e8e12](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/48e8e12))
-* **components:** add API endpoint invitation ([ae7d9aa](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/ae7d9aa))
-* **components:** add API endpoint invitation ([c6d0d94](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/c6d0d94))
-* **components:** add API endpoint invitation ([db805c4](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/db805c4))
-* **components:** add API endpoint invitation ([d897187](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/d897187))
-* **components:** add API endpoint invitation ([daff65a](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/daff65a))
-* **components:** add API endpoint invitation ([9e9b4ce](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/9e9b4ce))
-* **components:** add API endpoint invitation ([0ca4cfa](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/0ca4cfa))
-* **components:** add API endpoint invitation ([8de6954](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/8de6954))
-* **components:** add API endpoint invitation ([abdf121](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/abdf121))
-* **components:** add API endpoint invitation ([a781136](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/a781136))
-* **components:** add API endpoint invitation ([10fb6e2](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/10fb6e2))
-* **components:** add API endpoint invitation ([3fcc322](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/3fcc322))
-* **components:** add API endpoint invitation ([98d568e](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/98d568e))
-* **components:** create invite reviewer endpoints ([fc6cad4](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/fc6cad4))
-* **components:** fix correct update of reviewer ([6a423e4](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/6a423e4))
-* **components:** fix correct update of reviewer ([4a26556](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/4a26556))
-* **components:** fix correct update of reviewer ([4c9a7d9](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/4c9a7d9))
-* **components:** fix correct update of reviewer ([5988b36](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/5988b36))
-* **components:** fix correct update of reviewer ([b937db4](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/b937db4))
-* **components:** fix correct update of reviewer ([48a70a8](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/48a70a8))
-* **components:** fix correct update of reviewer ([b22a250](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/b22a250))
-* **components:** fix correct update of reviewer ([c030cce](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/c030cce))
-* **components:** fix correct update of reviewer ([b4ac0ec](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/b4ac0ec))
-* **components:** fix correct update of reviewer ([d7553ef](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/d7553ef))
-* **components:** fix correct update of reviewer ([a30f25e](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/a30f25e))
-* **components:** fix correct update of reviewer ([c1b734e](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/c1b734e))
-* **components:** fix correct update of reviewer ([ec31850](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/ec31850))
-* **components:** fix correct update of reviewer ([fe67780](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/fe67780))
-* **components:** fix correct update of reviewer ([acd3a2d](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/acd3a2d))
-* **components:** fix correct update of reviewer ([dcd2f94](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/dcd2f94))
-* **components:** fix correct update of reviewer ([ee775be](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/ee775be))
-* **components:** fix correct update of reviewer ([bc8ef13](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/bc8ef13))
-* **components:** fix correct update of reviewer ([45b7375](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/45b7375))
-* **components:** fix correct update of reviewer ([1b449ab](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/1b449ab))
-* **components:** fix correct update of reviewer ([be3ce7b](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/be3ce7b))
-* **components:** fix correct update of reviewer ([b700d30](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/b700d30))
-* **components:** fix correct update of reviewer ([30559e0](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/30559e0))
-* **components:** fix correct update of reviewer ([358a8f6](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/358a8f6))
-* **components:** fix correct update of reviewer ([3d2d412](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/3d2d412))
-* **components:** fix correct update of reviewer ([d5de1d0](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/d5de1d0))
-* **components:** fix correct update of reviewer ([fb692e9](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/fb692e9))
-* **components:** fix correct update of reviewer ([11c44ae](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/11c44ae))
-* **components:** fix correct update of reviewer ([46fdc54](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/46fdc54))
-* **components:** fix correct update of reviewer ([b42550f](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/b42550f))
-* **components:** fix correct update of reviewer ([2476402](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/2476402))
-* **components:** fix correct update of reviewer ([895bc73](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/895bc73))
-* **components:** invitation email ([da5d78d](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/da5d78d))
-* **components:** invitation email ([b479847](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/b479847))
-* **components:** invitation email ([f6d93cf](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/f6d93cf))
-* **components:** invitation email ([6ee4a13](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/6ee4a13))
-* **components:** invitation email ([2c3e61d](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/2c3e61d))
-* **components:** invitation email ([b27816d](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/b27816d))
-* **components:** invitation email ([af6f384](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/af6f384))
-* **components:** invitation email ([1ca6d60](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/1ca6d60))
-* **components:** invitation email ([e55a10a](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/e55a10a))
-* **components:** invitation email ([de5f871](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/de5f871))
-* **components:** invitation email ([087d151](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/087d151))
-* **components:** invitation email ([43a53a9](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/43a53a9))
-* **components:** invitation email ([74720ee](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/74720ee))
-* **components:** invitation email ([f252b17](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/f252b17))
-* **components:** invitation email ([ae51c4c](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/ae51c4c))
-* **components:** invitation email ([1e4bc4f](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/1e4bc4f))
-* **components:** invitation email ([f557112](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/f557112))
-* **components:** invitation email ([34d3054](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/34d3054))
-* **components:** invitation email ([d0d30af](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/d0d30af))
-* **components:** invitation email ([77a0ae4](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/77a0ae4))
-* **components:** invitation email ([75d3ac1](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/75d3ac1))
-* **components:** invitation email ([3aab5d1](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/3aab5d1))
-* **components:** invitation email ([f8bea7f](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/f8bea7f))
-* **components:** invitation email ([c2ef155](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/c2ef155))
-* **components:** invitation email ([fbac60d](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/fbac60d))
-* **components:** invitation email ([8afcd9c](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/8afcd9c))
-* **components:** invitation email ([860f233](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/860f233))
-* **components:** invitation email ([5d4d10e](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/5d4d10e))
-* **components:** invitation email ([b8c9d1d](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/b8c9d1d))
-* **components:** invitation email ([3d6b89b](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/3d6b89b))
-* **components:** invitation email ([0da74f6](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/0da74f6))
-* **components:** invitation email ([c2ebb60](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/c2ebb60))
-
-
-
-
-<a name="0.1.4"></a>
-## [0.1.4](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@0.1.3...pubsweet-component-xpub-review@0.1.4) (2018-04-11)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-<a name="0.1.3"></a>
-## [0.1.3](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@0.1.2...pubsweet-component-xpub-review@0.1.3) (2018-04-03)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-<a name="0.1.2"></a>
-## [0.1.2](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@0.1.1...pubsweet-component-xpub-review@0.1.2) (2018-03-30)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-<a name="0.1.1"></a>
-## [0.1.1](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@0.1.0...pubsweet-component-xpub-review@0.1.1) (2018-03-28)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-<a name="0.1.0"></a>
-# [0.1.0](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@0.0.5...pubsweet-component-xpub-review@0.1.0) (2018-03-27)
-
-
-### Bug Fixes
-
-* **components:** use version.id as key ([0ca2f56](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/0ca2f56))
-
-
-### Features
-
-* **components:** add Link from review page back to control panel ([860b737](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/860b737))
-* **styleguide:** page per section ([0bf0836](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/0bf0836))
-
-
-
-
-<a name="0.0.5"></a>
-## [0.0.5](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@0.0.4...pubsweet-component-xpub-review@0.0.5) (2018-03-19)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-<a name="0.0.4"></a>
-## [0.0.4](https://gitlab.coko.foundation/pubsweet/pubsweet/compare/pubsweet-component-xpub-review@0.0.3...pubsweet-component-xpub-review@0.0.4) (2018-03-15)
-
-
-
-
-**Note:** Version bump only for package pubsweet-component-xpub-review
-
-<a name="0.0.3"></a>
-
-## 0.0.3 (2018-03-09)
-
-### Bug Fixes
-
-* **xpub:** dubiously ignore linting errors ([a60d0ad](https://gitlab.coko.foundation/pubsweet/pubsweet/commit/a60d0ad))
diff --git a/packages/components/xpub-review/README.md b/packages/components/xpub-review/README.md
deleted file mode 100644
index 816d2d312..000000000
--- a/packages/components/xpub-review/README.md
+++ /dev/null
@@ -1,6 +0,0 @@
-## pubsweet-component-xpub-review
-
-A PubSweet component that provides interfaces for editors to invite reviewers, reviewers to submit their reviews, and editors to make their decisions.
-
-_Note:  
-Some of the container components for these pages are a bit complex, as they need to also connect child components that are nested deeper in the tree and pass them down as props - there may be a better solution to this._
diff --git a/packages/components/xpub-review/package.json b/packages/components/xpub-review/package.json
deleted file mode 100644
index 584cae13f..000000000
--- a/packages/components/xpub-review/package.json
+++ /dev/null
@@ -1,58 +0,0 @@
-{
-  "name": "pubsweet-component-xpub-review",
-  "version": "4.0.7",
-  "main": "src",
-  "author": "Collaborative Knowledge Foundation",
-  "license": "MIT",
-  "files": [
-    "src",
-    "dist"
-  ],
-  "dependencies": {
-    "@pubsweet/ui": "^9.1.3",
-    "@pubsweet/ui-toolkit": "^2.0.7",
-    "classnames": "^2.2.5",
-    "lodash": "^4.17.4",
-    "moment": "^2.18.1",
-    "prop-types": "^15.5.10",
-    "react-moment": "^0.6.1",
-    "react-select": "^1.0.0-rc.10",
-    "recompose": "^0.26.0",
-    "formik": "^1.4.2",
-    "striptags": "^3.1.0",
-    "styled-components": "^4.1.1",
-    "uuid": "^3.1.0",
-    "wax-prose-mirror": "^0.0.8",
-    "xpub-connect": "^2.0.7",
-    "xpub-edit": "^2.5.10",
-    "xpub-journal": "^0.0.6",
-    "xpub-selectors": "^0.2.8",
-    "xpub-upload": "^0.0.7",
-    "xpub-validators": "^0.0.6"
-  },
-  "devDependencies": {
-    "@babel/preset-env": "^7.0.0",
-    "@babel/preset-react": "^7.0.0",
-    "babel-core": "^6.26.0",
-    "babel-loader": "^8.0.5",
-    "css-loader": "^0.28.4",
-    "faker": "^4.1.0",
-    "file-loader": "^3.0.1",
-    "node-sass": "^4.5.3",
-    "react-styleguidist": "^8.0.6",
-    "sass-loader": "^6.0.6",
-    "style-loader": "^0.19.0",
-    "webpack": "^4.29.0",
-    "webpack-node-externals": "^1.6.0"
-  },
-  "peerDependencies": {
-    "apollo-client-preset": "^1.0.8",
-    "config": "^3.0.1",
-    "formik": "^1.4.2",
-    "pubsweet-client": ">=2.1.0",
-    "react": ">=16",
-    "react-apollo": "^2.3.3",
-    "react-redux": "^5.0.2",
-    "react-router-dom": "^4.2.2"
-  }
-}
diff --git a/packages/components/xpub-review/src/components/DecisionPage.js b/packages/components/xpub-review/src/components/DecisionPage.js
deleted file mode 100644
index 29127570b..000000000
--- a/packages/components/xpub-review/src/components/DecisionPage.js
+++ /dev/null
@@ -1,326 +0,0 @@
-import { compose, withProps } from 'recompose'
-import { graphql } from 'react-apollo'
-import { gql } from 'apollo-client-preset'
-import { withFormik } from 'formik'
-import { withLoader } from 'pubsweet-client'
-import { getCommentContent } from './review/util'
-
-import DecisionLayout from './decision/DecisionLayout'
-
-const reviewFields = `
-  id
-  created
-  updated
-  comments {
-    type
-    content
-    files {
-      id
-      created
-      label
-      filename
-      fileType
-      mimeType
-      size
-      url
-    }
-  }
-  isDecision
-  recommendation
-  user {
-    id
-    username
-  }
-`
-
-const fragmentFields = `
-  id
-  created
-  files {
-    id
-    created
-    label
-    filename
-    fileType
-    mimeType
-    size
-    url
-  }
-  reviews {
-    ${reviewFields}
-  }
-  decision
-  teams {
-    id
-    name
-    teamType
-    object {
-      objectId
-      objectType
-    }
-    objectType
-    members {
-      id
-      username
-    }
-    status {
-      user
-      status
-    }
-  }
-  status
-  meta {
-    title
-    source
-    abstract
-    declarations {
-      openData
-      openPeerReview
-      preregistered
-      previouslySubmitted
-      researchNexus
-      streamlinedReview
-    }
-    articleSections
-    articleType
-    history {
-      type
-      date
-    }
-    notes {
-      notesType
-      content
-    }
-    keywords
-  }
-  suggestions {
-    reviewers {
-      opposed
-      suggested
-    }
-    editors {
-      opposed
-      suggested
-    }
-  }
-`
-
-const query = gql`
-  query($id: ID!) {
-    currentUser {
-      id
-      username
-      admin
-    }
-
-    manuscript(id: $id) {
-      ${fragmentFields}
-      manuscriptVersions {
-        ${fragmentFields}
-      }
-    }
-  }
-`
-
-const updateReviewMutation = gql`
-  mutation($id: ID, $input: ReviewInput) {
-    updateReview(id: $id, input: $input) {
-      ${reviewFields}
-    }
-  }
-`
-
-const uploadReviewFilesMutation = gql`
-  mutation($file: Upload!) {
-    upload(file: $file) {
-      url
-    }
-  }
-`
-
-const createFileMutation = gql`
-  mutation($file: Upload!) {
-    createFile(file: $file) {
-      id
-      created
-      label
-      filename
-      fileType
-      mimeType
-      size
-      url
-    }
-  }
-`
-
-const submitMutation = gql`
-  mutation($id: ID!, $input: String) {
-    submitManuscript(id: $id, input: $input) {
-      id
-      ${fragmentFields}
-    }
-  }
-`
-
-export default compose(
-  graphql(query, {
-    options: ({ match }) => ({
-      variables: {
-        id: match.params.version,
-      },
-    }),
-  }),
-  graphql(uploadReviewFilesMutation, { name: 'uploadReviewFilesMutation' }),
-  graphql(updateReviewMutation, { name: 'updateReviewMutation' }),
-  graphql(createFileMutation, {
-    props: ({ mutate, ownProps: { match } }) => ({
-      createFile: file => {
-        mutate({
-          variables: {
-            file,
-          },
-          update: (proxy, { data: { createFile } }) => {
-            const data = proxy.readQuery({
-              query,
-              variables: {
-                id: match.params.version,
-              },
-            })
-
-            data.manuscript.reviews.map(review => {
-              if (review.id === file.objectId) {
-                review.comments.map(comment => {
-                  if (comment.type === createFile.fileType) {
-                    comment.files = [createFile]
-                  }
-                  return comment
-                })
-              }
-              return review
-            })
-
-            proxy.writeQuery({ query, data })
-          },
-        })
-      },
-    }),
-  }),
-  graphql(submitMutation, {
-    props: ({ mutate, ownProps }) => ({
-      completeDecision: ({ history, manuscript }) => {
-        mutate({
-          variables: {
-            id: manuscript.id,
-            input: JSON.stringify({
-              decision: manuscript.reviews.find(review => review.isDecision)
-                .recommendation,
-            }),
-          },
-        }).then(() => {
-          history.push('/')
-        })
-      },
-    }),
-  }),
-  withLoader(),
-  withProps(
-    ({
-      currentUser,
-      manuscript,
-      createFile,
-      updateReviewMutation,
-      uploadReviewFilesMutation,
-      match: {
-        params: { journal },
-      },
-    }) => ({
-      journal: { id: journal },
-      updateReview: (data, file) => {
-        const reviewData = {
-          isDecision: true,
-          manuscriptId: manuscript.id,
-        }
-
-        if (data.comment) {
-          reviewData.comments = [data.comment]
-        }
-
-        if (data.recommendation) {
-          reviewData.recommendation = data.recommendation
-        }
-
-        const review =
-          manuscript.reviews.find(review => review.isDecision) || {}
-        return updateReviewMutation({
-          variables: {
-            id: review.id || undefined,
-            input: reviewData,
-          },
-          update: (proxy, { data: { updateReview } }) => {
-            const data = proxy.readQuery({
-              query,
-              variables: {
-                id: manuscript.id,
-              },
-            })
-            const reviewIndex = data.manuscript.reviews.findIndex(
-              review => review.id === updateReview.id,
-            )
-            if (reviewIndex < 0) {
-              data.manuscript.reviews.push(updateReview)
-            } else {
-              data.manuscript.reviews[reviewIndex] = updateReview
-            }
-            proxy.writeQuery({ query, data })
-          },
-        })
-      },
-      uploadFile: (file, updateReview, type) =>
-        uploadReviewFilesMutation({
-          variables: {
-            file,
-          },
-        }).then(({ data }) => {
-          const newFile = {
-            url: data.upload.url,
-            filename: file.name,
-            size: file.size,
-            object: 'Review',
-            objectId: updateReview.id,
-            fileType: type,
-          }
-          createFile(newFile)
-        }),
-    }),
-  ),
-  withFormik({
-    mapPropsToValues: props =>
-      props.manuscript.reviews.find(review => review.isDecision) || {
-        comments: [],
-        recommendation: null,
-      },
-    isInitialValid: ({ manuscript }) => {
-      const rv = manuscript.reviews.find(review => review.isDecision) || {}
-      const isRecommendation = rv.recommendation != null
-      const isCommented = getCommentContent(rv, 'note') !== ''
-
-      return isCommented && isRecommendation
-    },
-    validate: (values, props) => {
-      const errors = {}
-      if (getCommentContent(values, 'note') === '') {
-        errors.comments = 'Required'
-      }
-
-      if (values.recommendation === null) {
-        errors.recommendation = 'Required'
-      }
-      return errors
-    },
-    displayName: 'decision',
-    handleSubmit: (
-      props,
-      { props: { completeDecision, history, manuscript } },
-    ) => completeDecision({ history, manuscript }),
-  }),
-)(DecisionLayout)
diff --git a/packages/components/xpub-review/src/components/ReviewPage.js b/packages/components/xpub-review/src/components/ReviewPage.js
deleted file mode 100644
index 2581ab4e2..000000000
--- a/packages/components/xpub-review/src/components/ReviewPage.js
+++ /dev/null
@@ -1,344 +0,0 @@
-import { compose, withProps } from 'recompose'
-import { graphql } from 'react-apollo'
-import { gql } from 'apollo-client-preset'
-import { withFormik } from 'formik'
-import { withLoader } from 'pubsweet-client'
-import { cloneDeep } from 'lodash'
-import { getCommentContent } from './review/util'
-import ReviewLayout from '../components/review/ReviewLayout'
-
-const reviewFields = `
-  id
-  created
-  updated
-  comments {
-    type
-    content
-    files {
-      id
-      created
-      label
-      filename
-      fileType
-      mimeType
-      size
-      url
-    }
-  }
-  isDecision
-  recommendation
-  user {
-    id
-    username
-  }
-`
-
-const teamFields = `
-  id
-  name
-  teamType
-  object {
-    objectId
-    objectType
-  }
-  members {
-    id
-    username
-  }
-`
-
-const fragmentFields = `
-  id
-  created
-  files {
-    id
-    created
-    label
-    filename
-    fileType
-    mimeType
-    size
-    url
-  }
-  reviews {
-    ${reviewFields}
-  }
-  decision
-  teams {
-    id
-    name
-    teamType
-    object {
-      objectId
-      objectType
-    }
-    objectType
-    members {
-      id
-      username
-    }
-    status {
-      user
-      status
-    }
-  }
-  status
-  meta {
-    title
-    source
-    abstract
-    declarations {
-      openData
-      openPeerReview
-      preregistered
-      previouslySubmitted
-      researchNexus
-      streamlinedReview
-    }
-    articleSections
-    articleType
-    history {
-      type
-      date
-    }
-    notes {
-      notesType
-      content
-    }
-    keywords
-  }
-  suggestions {
-    reviewers {
-      opposed
-      suggested
-    }
-    editors {
-      opposed
-      suggested
-    }
-  }
-`
-
-const query = gql`
-  query($id: ID!) {
-    currentUser {
-      id
-      username
-      admin
-    }
-
-    manuscript(id: $id) {
-      ${fragmentFields}
-      manuscriptVersions {
-        ${fragmentFields}
-      }
-    }
-  }
-`
-
-const updateTeam = gql`
-  mutation($id: ID!, $input: TeamInput) {
-    updateTeam(id: $id, input: $input) {
-      ${teamFields}
-    } 
-  }
-`
-
-const updateReviewMutation = gql`
-  mutation($id: ID, $input: ReviewInput) {
-    updateReview(id: $id, input: $input) {
-      ${reviewFields}
-    }
-  }
-`
-
-const uploadReviewFilesMutation = gql`
-  mutation($file: Upload!) {
-    upload(file: $file) {
-      url
-    }
-  }
-`
-
-const createFileMutation = gql`
-  mutation($file: Upload!) {
-    createFile(file: $file) {
-      id
-      created
-      label
-      filename
-      fileType
-      mimeType
-      size
-      url
-    }
-  }
-`
-
-export default compose(
-  graphql(query, {
-    options: ({ match }) => ({
-      variables: {
-        id: match.params.version,
-      },
-    }),
-  }),
-  graphql(uploadReviewFilesMutation, { name: 'uploadReviewFilesMutation' }),
-  graphql(updateReviewMutation, { name: 'updateReviewMutation' }),
-  graphql(updateTeam, { name: 'updateTeam' }),
-  graphql(createFileMutation, {
-    props: ({ mutate, ownProps: { match } }) => ({
-      createFile: file => {
-        mutate({
-          variables: {
-            file,
-          },
-          update: (proxy, { data: { createFile } }) => {
-            const data = proxy.readQuery({
-              query,
-              variables: {
-                id: match.params.version,
-              },
-            })
-
-            data.manuscript.reviews.map(review => {
-              if (review.id === file.objectId) {
-                review.comments.map(comment => {
-                  if (comment.type === createFile.fileType) {
-                    comment.files = [createFile]
-                  }
-                  return comment
-                })
-              }
-              return review
-            })
-
-            proxy.writeQuery({ query, data })
-          },
-        })
-      },
-    }),
-  }),
-  withLoader(),
-  withProps(
-    ({
-      manuscript,
-      currentUser,
-      match: {
-        params: { journal },
-      },
-      updateReviewMutation,
-      uploadReviewFilesMutation,
-      updateTeam,
-      createFile,
-    }) => ({
-      journal: { id: journal },
-      review:
-        manuscript.reviews.find(
-          review => review.user.id === currentUser.id && !review.isDecision,
-        ) || {},
-      status: (
-        (
-          (
-            manuscript.teams.find(team => team.teamType === 'reviewerEditor') ||
-            {}
-          ).status || []
-        ).find(status => status.user === currentUser.id) || {}
-      ).status,
-      updateReview: (review, file) => {
-        ;(review.comments || []).map(comment => {
-          delete comment.files
-          delete comment.__typename
-          return comment
-        })
-
-        const reviewData = {
-          recommendation: review.recommendation,
-          comments: review.comments,
-          manuscriptId: manuscript.id,
-        }
-
-        return updateReviewMutation({
-          variables: {
-            id: review.id || undefined,
-            input: reviewData,
-          },
-          update: (proxy, { data: { updateReview } }) => {
-            const data = proxy.readQuery({
-              query,
-              variables: {
-                id: manuscript.id,
-              },
-            })
-            let reviewIndex = data.manuscript.reviews.findIndex(
-              review => review.id === updateReview.id,
-            )
-            reviewIndex = reviewIndex < 0 ? 0 : reviewIndex
-            data.manuscript.reviews[reviewIndex] = updateReview
-            proxy.writeQuery({ query, data })
-          },
-        })
-      },
-      uploadFile: (file, updateReview, type) =>
-        uploadReviewFilesMutation({
-          variables: {
-            file,
-          },
-        }).then(({ data }) => {
-          const newFile = {
-            url: data.upload.url,
-            filename: file.name,
-            mimeType: file.type,
-            size: file.size,
-            object: 'Review',
-            objectId: updateReview.id,
-            fileType: type,
-          }
-          createFile(newFile)
-        }),
-      completeReview: history => {
-        const team = cloneDeep(manuscript.teams).find(
-          team => team.teamType === 'reviewerEditor',
-        )
-
-        team.status.map(status => {
-          if (status.user === currentUser.id) {
-            status.status = 'completed'
-          }
-          delete status.__typename
-          return status
-        })
-        updateTeam({
-          variables: {
-            id: team.id,
-            input: {
-              status: team.status,
-            },
-          },
-        }).then(() => {
-          history.push('/')
-        })
-      },
-    }),
-  ),
-  withFormik({
-    enableReinitialize: true,
-    mapPropsToValues: props =>
-      props.manuscript.reviews.find(review => !review.isDecision) || {
-        id: null,
-        comments: [],
-        recommendation: null,
-      },
-    isInitialValid: ({ review }) => {
-      if (!review.id) return false
-      const hasRecommendation = review.recommendation !== null
-      const comment = getCommentContent(review, 'note')
-      const isCommented = comment !== null && comment !== ''
-
-      return isCommented && hasRecommendation
-    },
-    displayName: 'review',
-    handleSubmit: (props, { props: { completeReview, history } }) =>
-      completeReview(history),
-  }),
-)(ReviewLayout)
diff --git a/packages/components/xpub-review/src/components/ReviewersPage.js b/packages/components/xpub-review/src/components/ReviewersPage.js
deleted file mode 100644
index 883719e26..000000000
--- a/packages/components/xpub-review/src/components/ReviewersPage.js
+++ /dev/null
@@ -1,233 +0,0 @@
-import { compose, withProps } from 'recompose'
-import { withFormik } from 'formik'
-import { graphql } from 'react-apollo'
-import { gql } from 'apollo-client-preset'
-import { withLoader } from 'pubsweet-client'
-import { cloneDeep, omit } from 'lodash'
-
-import Reviewers from '../components/reviewers/Reviewers'
-import ReviewerContainer from '../components/reviewers/ReviewerContainer'
-
-const teamFields = `
-  id
-  role
-  teamType
-  name
-  object {
-    objectId
-    objectType
-  }
-  objectType
-  members {
-    id
-    username
-  }
-  status {
-    user
-    status
-  }
-`
-
-const fragmentFields = `
-  id
-  created
-  files {
-    id
-    created
-    label
-    filename
-    mimeType
-    fileType
-    size
-    url
-  }
-  reviews {
-    open
-    recommendation
-    created
-    comments {
-      type
-      content
-      files {
-        fileType
-        id
-        label
-        url
-        filename
-      }
-    }
-    user {
-      id
-      username
-    }
-  }
-  decision
-  teams {
-    ${teamFields}
-  }
-  status
-`
-
-const createTeamMutation = gql`
-  mutation($input: TeamInput!) {
-    createTeam(input: $input) {
-      ${teamFields}
-    }
-  }
-`
-
-const updateTeamMutation = gql`
-  mutation($id: ID, $input: TeamInput) {
-    updateTeam(id: $id, input: $input) {
-      ${teamFields}
-    }
-  }
-`
-
-const query = gql`
-  query($id: ID!) {
-    currentUser {
-      id
-      username
-      admin
-    }
-
-    users {
-      id
-      username
-      admin
-    }
-
-    teams {
-      ${teamFields}
-    }
-
-    manuscript(id: $id) {
-      ${fragmentFields}
-    }
-  }
-`
-
-const update = match => (proxy, { data: { updateTeam, createTeam } }) => {
-  const data = proxy.readQuery({
-    query,
-    variables: {
-      id: match.params.version,
-    },
-  })
-
-  if (updateTeam) {
-    const teamIndex = data.teams.findIndex(team => team.id === updateTeam.id)
-    const manuscriptTeamIndex = data.manuscript.teams.findIndex(
-      team => team.id === updateTeam.id,
-    )
-    data.teams[teamIndex] = updateTeam
-    data.manuscript.teams[manuscriptTeamIndex] = updateTeam
-  }
-
-  if (createTeam) {
-    data.teams.push(createTeam)
-    data.manuscript.teams.push(createTeam)
-  }
-  proxy.writeQuery({ query, data })
-}
-
-const handleSubmit = (
-  { user },
-  { props: { manuscript, updateTeamMutation, createTeamMutation, match } },
-) => {
-  const team =
-    manuscript.teams.find(team => team.teamType === 'reviewerEditor') || {}
-
-  const teamAdd = {
-    object: {
-      objectId: manuscript.id,
-      objectType: 'Manuscript',
-    },
-    status: [{ user: user.id, status: 'invited' }],
-    name: 'Reviewer Editor',
-    teamType: 'reviewerEditor',
-    members: [user.id],
-  }
-  if (team.id) {
-    const newTeam = {
-      object: omit(team.object, ['__typename']),
-      status: team.status.map(status => omit(status, ['__typename'])),
-      name: team.name,
-      teamType: team.teamType,
-      members: cloneDeep(team.members).map(member => member.id),
-    }
-
-    newTeam.members.push(user.id)
-    newTeam.status.push({ user: user.id, status: 'invited' })
-    updateTeamMutation({
-      variables: {
-        id: team.id,
-        input: newTeam,
-      },
-      update: update(match),
-    })
-  } else {
-    createTeamMutation({
-      variables: {
-        input: teamAdd,
-      },
-      update: update(match),
-    })
-  }
-}
-
-export default compose(
-  graphql(query, {
-    options: ({ match }) => ({
-      variables: {
-        id: match.params.version,
-      },
-    }),
-  }),
-  graphql(createTeamMutation, { name: 'createTeamMutation' }),
-  graphql(updateTeamMutation, { name: 'updateTeamMutation' }),
-  withLoader(),
-  withProps(
-    ({
-      manuscript,
-      teams = [],
-      users,
-      match: {
-        params: { journal },
-      },
-    }) => {
-      const reviewerTeams =
-        teams.find(
-          team =>
-            team.teamType === 'reviewerEditor' &&
-            team.object.objectId === manuscript.id &&
-            team.object.objectType === 'Manuscript',
-        ) || {}
-
-      // Temporary solution until new Team model is back
-      const mem = cloneDeep(reviewerTeams.members || [])
-      mem.map(member => {
-        const status = reviewerTeams.status.find(
-          status => status.user === member.id,
-        )
-        member.status = (status || {}).status
-        return member
-      })
-      return {
-        reviewers: mem || [],
-        journal: { id: journal },
-        reviewerUsers: users,
-        Reviewer: ReviewerContainer,
-      }
-    },
-  ),
-  // withHandlers({
-  //   loadOptions: props => props.reviewerUsers, // loadOptions(props),
-  // }),
-  withFormik({
-    mapPropsToValues: () => ({ user: '' }),
-    displayName: 'reviewers',
-    handleSubmit,
-  }),
-)(Reviewers)
diff --git a/packages/components/xpub-review/src/components/assignEditors/AssignEditor.js b/packages/components/xpub-review/src/components/assignEditors/AssignEditor.js
deleted file mode 100644
index 24a82abd9..000000000
--- a/packages/components/xpub-review/src/components/assignEditors/AssignEditor.js
+++ /dev/null
@@ -1,143 +0,0 @@
-import React from 'react'
-import config from 'config'
-import { compose, withProps } from 'recompose'
-import { cloneDeep, get } from 'lodash'
-import { Menu } from '@pubsweet/ui'
-import { graphql } from 'react-apollo'
-import { gql } from 'apollo-client-preset'
-import { withLoader } from 'pubsweet-client'
-
-const editorOption = user => ({
-  label: user.username, // TODO: name
-  value: user.id,
-})
-
-const teamFields = `
-  id
-  name
-  teamType
-  object {
-    objectId
-    objectType
-  }
-  members {
-    id
-    username
-  }
-`
-
-const query = gql`
-  {
-    users {
-      id
-      username
-      admin
-    }
-  }
-`
-
-const updateTeam = gql`
-  mutation($id: ID!, $input: TeamInput) {
-    updateTeam(id: $id, input: $input) {
-      ${teamFields}
-    } 
-  }
-`
-
-const createTeamMutation = gql`
-  mutation($input: TeamInput!) {
-    createTeam(input: $input) {
-      ${teamFields}
-    }
-  }
-`
-
-// TODO: select multiple editors
-const AssignEditor = ({
-  updateTeam,
-  createTeam,
-  teamName,
-  teamRole,
-  value,
-  options,
-}) => (
-  <Menu
-    label={teamName}
-    onChange={user => {
-      if (value) {
-        updateTeam(user, teamRole)
-      } else {
-        createTeam(user, teamRole)
-      }
-    }}
-    options={options}
-    placeholder="Assign an editor…"
-    value={value}
-  />
-)
-
-export default compose(
-  graphql(query),
-  graphql(updateTeam, {
-    props: ({ mutate, ownProps }) => {
-      const updateTeam = (userId, teamRole) => {
-        const team = cloneDeep(ownProps.manuscript.teams).find(
-          team => team.teamType === teamRole,
-        )
-        mutate({
-          variables: {
-            id: team.id,
-            input: {
-              members: [userId],
-            },
-          },
-        })
-      }
-
-      return {
-        updateTeam,
-      }
-    },
-  }),
-  graphql(createTeamMutation, {
-    props: ({ mutate, ownProps }) => {
-      const createTeam = (userId, teamRole) => {
-        const input = {
-          object: {
-            objectId: ownProps.manuscript.id,
-            objectType: 'Manuscript',
-          },
-          name:
-            teamRole === 'seniorEditor' ? 'Senior Editor' : 'Handling Editor',
-          teamType: teamRole,
-          members: [userId],
-        }
-
-        mutate({
-          variables: {
-            input,
-          },
-        })
-      }
-
-      return {
-        createTeam,
-      }
-    },
-  }),
-  withProps(({ teamRole, manuscript, data = {} }) => {
-    const optionUsers = (data.users || []).map(user => editorOption(user))
-
-    const team =
-      (manuscript.teams || []).find(team => team.teamType === teamRole) || {}
-
-    const members = team.members || []
-    const teamName = get(config, `authsome.teams.${teamRole}.name`)
-    return {
-      teamName,
-      options: optionUsers,
-      value: members.length > 0 ? members[0].id : undefined,
-    }
-  }),
-  withLoader(),
-)(AssignEditor)
diff --git a/packages/components/xpub-review/src/components/assignEditors/AssignEditor.md b/packages/components/xpub-review/src/components/assignEditors/AssignEditor.md
deleted file mode 100644
index 490857063..000000000
--- a/packages/components/xpub-review/src/components/assignEditors/AssignEditor.md
+++ /dev/null
@@ -1,92 +0,0 @@
-A drop-down menu for assigning an editor to a project.
-
-```js
-const { JournalProvider } = require('xpub-journal')
-const journal = require('@pubsweet/styleguide/config/journal')
-
-const project = {
-  id: faker.random.uuid(),
-}
-
-const team = {
-  members: [],
-}
-
-const manuscriptTemplate = () => ({
-  id: faker.random.uuid(),
-  teams: [
-    {
-      id: faker.random.uuid(),
-      role: 'reviewerEditor',
-      name: 'reviewer',
-      object: {
-        id: faker.random.uuid(),
-        __typename: 'Manuscript',
-      },
-      objectType: 'manuscript',
-      members: [
-        {
-          user: { id: 1 },
-        },
-      ],
-    },
-  ],
-  meta: {
-    title: faker.lorem.sentence(25),
-    abstract: faker.lorem.sentence(100),
-    articleType: 'original-research',
-    declarations: {
-      openData: 'yes',
-      openPeerReview: 'no',
-      preregistered: 'yes',
-      previouslySubmitted: 'yes',
-      researchNexus: 'no',
-      streamlinedReview: 'no',
-    },
-  },
-  decision: {
-    id: faker.random.uuid(),
-    comments: [{ type: 'note', content: 'this needs review' }],
-    created: 'Thu Oct 11 2018',
-    open: false,
-    status: '<p>This is a decision</p>',
-    user: { id: 1 },
-  },
-  reviews: [
-    {
-      comments: [{ content: 'this needs review' }],
-      created: 'Thu Oct 11 2018',
-      open: false,
-      recommendation: 'revise',
-      user: { id: 1, username: 'test user' },
-    },
-  ],
-})
-
-const manuscript = Object.assign({}, manuscriptTemplate())
-
-const options = [
-  {
-    value: faker.random.uuid(),
-    label: faker.internet.userName(),
-  },
-  {
-    value: faker.random.uuid(),
-    label: faker.internet.userName(),
-  },
-  {
-    value: faker.random.uuid(),
-    label: faker.internet.userName(),
-  },
-]
-;<JournalProvider journal={journal}>
-  <AssignEditor
-    manuscript={manuscript}
-    team={team}
-    teamName="Senior Editor"
-    teamTypeName="seniorEditor"
-    options={options}
-    addUserToTeam={value => console.log(value)}
-  />
-</JournalProvider>
-```
diff --git a/packages/components/xpub-review/src/components/assignEditors/AssignEditorsReviewers.js b/packages/components/xpub-review/src/components/assignEditors/AssignEditorsReviewers.js
deleted file mode 100644
index c0039293e..000000000
--- a/packages/components/xpub-review/src/components/assignEditors/AssignEditorsReviewers.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import React from 'react'
-import styled from 'styled-components'
-import { Link } from 'react-router-dom'
-import { Roles } from '../molecules/Roles'
-
-const Root = styled.div``
-const Title = styled.div``
-
-const AssignEditorsReviewers = ({ manuscript, journal, AssignEditor }) => (
-  <Root>
-    <Title>Assign Editors</Title>
-    <Roles>
-      <AssignEditor manuscript={manuscript} teamRole="seniorEditor" />
-      <AssignEditor manuscript={manuscript} teamRole="handlingEditor" />
-    </Roles>
-    <Link to={`/journals/${journal.id}/versions/${manuscript.id}/reviewers`}>
-      Assign Reviewers
-    </Link>
-  </Root>
-)
-
-export default AssignEditorsReviewers
diff --git a/packages/components/xpub-review/src/components/atoms/AdminSection.js b/packages/components/xpub-review/src/components/atoms/AdminSection.js
deleted file mode 100644
index a78c83a79..000000000
--- a/packages/components/xpub-review/src/components/atoms/AdminSection.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import styled from 'styled-components'
-import { th } from '@pubsweet/ui-toolkit'
-
-const AdminSection = styled.div`
-  margin-bottom: calc(${th('gridUnit')} * 3);
-`
-
-export default AdminSection
diff --git a/packages/components/xpub-review/src/components/atoms/Columns.js b/packages/components/xpub-review/src/components/atoms/Columns.js
deleted file mode 100644
index 406921bd1..000000000
--- a/packages/components/xpub-review/src/components/atoms/Columns.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import styled from 'styled-components'
-
-const Columns = styled.div`
-  display: grid;
-  grid-column-gap: 2em;
-  grid-template-areas: 'manuscript admin';
-  grid-template-columns: minmax(200px, 80ch) minmax(200px, 50ch);
-  justify-content: center;
-`
-
-const Manuscript = styled.div`
-  grid-area: manuscript;
-`
-
-const Admin = styled.div`
-  grid-area: admin;
-`
-
-export { Columns, Manuscript, Admin }
diff --git a/packages/components/xpub-review/src/components/decision/Decision.js b/packages/components/xpub-review/src/components/decision/Decision.js
deleted file mode 100644
index 7cdb3ff2e..000000000
--- a/packages/components/xpub-review/src/components/decision/Decision.js
+++ /dev/null
@@ -1,54 +0,0 @@
-import React from 'react'
-import styled from 'styled-components'
-
-import { NoteViewer } from 'xpub-edit'
-import { Attachment } from '@pubsweet/ui'
-
-const Heading = styled.div``
-const Note = styled.div``
-const Content = styled.div``
-const DecisionStatus = styled.div``
-
-const findComments = (decision = {}, type) => {
-  const comments = decision.comments || []
-  return comments.find(comment => comment.type === type)
-}
-
-// Due to migration to new Data Model
-// Attachement component needs different data structure to work
-// needs to change the pubsweet ui Attachement to support the new Data Model
-const filesToAttachment = file => ({
-  name: file.filename,
-  url: file.url,
-})
-
-const Decision = ({ review }) => (
-  <div>
-    <div>
-      {findComments(review, 'note') && [
-        <Heading>Note</Heading>,
-        <Note>
-          <Content>
-            <NoteViewer value={findComments(review, 'note').content} />
-          </Content>
-          {findComments(review, 'note') &&
-            (findComments(review, 'note').files || []).map(attachment => (
-              <Attachment
-                file={filesToAttachment(attachment)}
-                key={attachment.url}
-                uploaded
-              />
-            ))}
-        </Note>,
-      ]}
-    </div>
-
-    <div>
-      <Heading>Decision</Heading>
-
-      <DecisionStatus>{review.recommendation}</DecisionStatus>
-    </div>
-  </div>
-)
-
-export default Decision
diff --git a/packages/components/xpub-review/src/components/decision/Decision.md b/packages/components/xpub-review/src/components/decision/Decision.md
deleted file mode 100644
index 6217d8575..000000000
--- a/packages/components/xpub-review/src/components/decision/Decision.md
+++ /dev/null
@@ -1,13 +0,0 @@
-A decision on a version of a project.
-
-```js
-const decision = {
-  id: faker.random.uuid(),
-  comments: [{ type: 'note', content: 'this needs review' }],
-  created: 'Thu Oct 11 2018',
-  open: false,
-  status: '<p>This is a decision</p>',
-  user: { identities: [] },
-}
-;<Decision decision={decision} />
-```
diff --git a/packages/components/xpub-review/src/components/decision/DecisionForm.js b/packages/components/xpub-review/src/components/decision/DecisionForm.js
deleted file mode 100644
index f03b00ed1..000000000
--- a/packages/components/xpub-review/src/components/decision/DecisionForm.js
+++ /dev/null
@@ -1,157 +0,0 @@
-import React from 'react'
-import { NoteEditor } from 'xpub-edit'
-import { cloneDeep, omit } from 'lodash'
-import { FieldArray, Field } from 'formik'
-import { withJournal } from 'xpub-journal'
-import { required } from 'xpub-validators'
-import {
-  Button,
-  Flexbox,
-  RadioGroup,
-  UploadButton,
-  UploadingFile,
-} from '@pubsweet/ui'
-
-import {
-  getCommentFiles,
-  getCommentContent,
-  stripHtml,
-  createComments,
-} from '../review/util'
-
-import AdminSection from '../atoms/AdminSection'
-
-const NoteDecision = (updateReview, uploadFile) => props => (
-  <AdminSection>
-    <Field
-      component={NoteInput}
-      name="comments"
-      updateReview={updateReview}
-      validate={required}
-    />
-    <Field
-      component={AttachmentsInput('note')}
-      updateReview={updateReview}
-      uploadFile={uploadFile}
-    />
-  </AdminSection>
-)
-
-const NoteInput = ({
-  field,
-  form: { values, setFieldValue },
-  updateReview,
-}) => (
-  <NoteEditor
-    key="note-input"
-    onBlur={value => {
-      const { updateIndex, comment } = createComments(
-        values,
-        {
-          type: 'note',
-          content: stripHtml(value),
-        },
-        'note',
-      )
-
-      setFieldValue(`comments.${updateIndex}`, comment)
-      updateReview(
-        cloneDeep(omit({ comment }, ['comment.files', 'comment.__typename'])),
-      )
-    }}
-    placeholder="Write/paste your decision letter here, or upload it using the upload button on the right."
-    title="Decision"
-    value={getCommentContent({ comments: field.value }, 'note')}
-  />
-)
-
-const AttachmentsInput = type => ({
-  field,
-  form: { values, setFieldValue },
-  updateReview,
-  uploadFile,
-}) => [
-  <UploadButton
-    buttonText="↑ Upload files"
-    key="note-attachment"
-    onChange={event => {
-      const val = event.target.files[0]
-      const file = cloneDeep(val)
-      file.filename = val.name
-      file.type = type
-
-      const { updateIndex, comment } = createComments(
-        field.value,
-        { files: [file] },
-        type,
-      )
-
-      setFieldValue(`comments.${updateIndex}.files`, comment.files)
-
-      updateReview({}).then(({ data: { updateReview } }) => {
-        uploadFile(val, updateReview, type)
-      })
-    }}
-  />,
-  <Flexbox>
-    {getCommentFiles(field.value, 'note').map(val => {
-      const file = cloneDeep(val)
-      file.name = file.filename
-      return <UploadingFile file={file} key={file.name} uploaded />
-    })}
-  </Flexbox>,
-]
-
-const RecommendationInput = journal => ({
-  field,
-  form: { setFieldValue },
-  updateReview,
-}) => (
-  <RadioGroup
-    {...field}
-    inline
-    onChange={val => {
-      setFieldValue(`recommendation`, val)
-      updateReview({ recommendation: val })
-    }}
-    options={journal.recommendations}
-    value={field.value === '' ? null : field.value}
-  />
-)
-
-const DecisionForm = ({
-  journal,
-  handleSubmit,
-  uploadFile,
-  updateReview,
-  isValid,
-}) => (
-  <form onSubmit={handleSubmit}>
-    <AdminSection key="note">
-      <div name="note">
-        <FieldArray
-          component={NoteDecision(updateReview, uploadFile)}
-          key="comments-array"
-          name="comments"
-        />
-      </div>
-    </AdminSection>
-
-    <AdminSection key="recommendation">
-      <Field
-        component={RecommendationInput(journal)}
-        name="recommendation"
-        updateReview={updateReview}
-        validate={required}
-      />
-    </AdminSection>
-
-    <AdminSection key="submit">
-      <Button disabled={!isValid} primary type="submit">
-        Submit
-      </Button>
-    </AdminSection>
-  </form>
-)
-
-export default withJournal(DecisionForm)
diff --git a/packages/components/xpub-review/src/components/decision/DecisionForm.md b/packages/components/xpub-review/src/components/decision/DecisionForm.md
deleted file mode 100644
index 9a8ece129..000000000
--- a/packages/components/xpub-review/src/components/decision/DecisionForm.md
+++ /dev/null
@@ -1,55 +0,0 @@
-A form for entering a decision on a version of a project.
-
-```js
-const { withFormik } = require('formik')
-
-const journal = {
-  id: faker.random.uuid(),
-}
-
-const manuscript = {
-  id: faker.random.uuid(),
-  meta: {
-    title: faker.lorem.sentence(25),
-    abstract: faker.lorem.sentence(100),
-    articleType: 'original-research',
-    declarations: {
-      openData: 'yes',
-      openPeerReview: 'no',
-      preregistered: 'yes',
-      previouslySubmitted: 'yes',
-      researchNexus: 'no',
-      streamlinedReview: 'no',
-    },
-  },
-  decision: {
-    id: faker.random.uuid(),
-    comments: { type: 'note', content: 'this needs review' },
-    created: 'Thu Oct 11 2018',
-    open: false,
-    recommendation: '<p>This is a decision</p>',
-    user: { identities: [] },
-  },
-  reviews: [
-    {
-      comments: { content: 'this needs review' },
-      created: 'Thu Oct 11 2018',
-      open: false,
-      recommendation: '',
-      user: { identities: [] },
-    },
-  ],
-}
-
-const ConnectedDecisionForm = withFormik({
-  initialValues: {},
-  mapPropsToValues: ({ manuscript }) => manuscript,
-  displayName: 'decision',
-  handleSubmit: (props, { props: { onSubmit, history } }) =>
-    onSubmit(props, { history }),
-})(DecisionForm)
-;<ConnectedDecisionForm
-  manuscript={manuscript}
-  uploadFile={() => new XMLHttpRequest()}
-/>
-```
diff --git a/packages/components/xpub-review/src/components/decision/DecisionLayout.js b/packages/components/xpub-review/src/components/decision/DecisionLayout.js
deleted file mode 100644
index 765d1d894..000000000
--- a/packages/components/xpub-review/src/components/decision/DecisionLayout.js
+++ /dev/null
@@ -1,110 +0,0 @@
-import React from 'react'
-import moment from 'moment'
-
-import { Tabs } from '@pubsweet/ui'
-import DecisionForm from './DecisionForm'
-import DecisionReviews from './DecisionReviews'
-import AssignEditorsReviewers from '../assignEditors/AssignEditorsReviewers'
-import AssignEditor from '../assignEditors/AssignEditor'
-import ReviewMetadata from '../metadata/ReviewMetadata'
-import Decision from './Decision'
-import EditorSection from './EditorSection'
-import { Columns, Manuscript, Admin } from '../atoms/Columns'
-import AdminSection from '../atoms/AdminSection'
-
-const addEditor = (manuscript, label) => ({
-  content: <EditorSection manuscript={manuscript} />,
-  key: manuscript.id,
-  label,
-})
-
-const DecisionLayout = ({
-  handleSubmit,
-  updateReview,
-  uploadFile,
-  manuscript,
-  journal,
-  isValid,
-}) => {
-  const decisionSections = []
-  const editorSections = []
-  const manuscriptVersions = manuscript.manuscriptVersions || []
-  manuscriptVersions.forEach(manuscript => {
-    const submittedMoment = moment(manuscript.updated)
-    const label = submittedMoment.format('YYYY-MM-DD')
-
-    decisionSections.push({
-      content: (
-        <div>
-          <ReviewMetadata manuscript={manuscript} />
-          <DecisionReviews manuscript={manuscript} />
-          <Decision
-            review={manuscript.reviews.find(review => review.isDecision)}
-          />
-        </div>
-      ),
-      key: manuscript.id,
-      label,
-    })
-
-    editorSections.push(addEditor(manuscript, label))
-  }, [])
-
-  const submittedMoment = moment()
-  const label = submittedMoment.format('YYYY-MM-DD')
-  if (manuscript.status !== 'revising') {
-    decisionSections.push({
-      content: (
-        <div>
-          <AdminSection key="assign-editors">
-            <AssignEditorsReviewers
-              AssignEditor={AssignEditor}
-              journal={journal}
-              manuscript={manuscript}
-            />
-          </AdminSection>
-          <AdminSection key="review-metadata">
-            <ReviewMetadata manuscript={manuscript} />
-          </AdminSection>
-          <AdminSection key="decision-review">
-            <DecisionReviews manuscript={manuscript} />
-          </AdminSection>
-          <AdminSection key="decision-form">
-            <DecisionForm
-              handleSubmit={handleSubmit}
-              isValid={isValid}
-              updateReview={updateReview}
-              uploadFile={uploadFile}
-            />
-          </AdminSection>
-        </div>
-      ),
-      key: manuscript.id,
-      label,
-    })
-
-    editorSections.push(addEditor(manuscript, label))
-  }
-
-  return (
-    <Columns>
-      <Manuscript>
-        <Tabs
-          activeKey={editorSections[editorSections.length - 1].key}
-          sections={editorSections}
-          title="Versions"
-        />
-      </Manuscript>
-
-      <Admin>
-        <Tabs
-          activeKey={decisionSections[decisionSections.length - 1].key}
-          sections={decisionSections}
-          title="Versions"
-        />
-      </Admin>
-    </Columns>
-  )
-}
-
-export default DecisionLayout
diff --git a/packages/components/xpub-review/src/components/decision/DecisionLayout.md b/packages/components/xpub-review/src/components/decision/DecisionLayout.md
deleted file mode 100644
index 74d181c33..000000000
--- a/packages/components/xpub-review/src/components/decision/DecisionLayout.md
+++ /dev/null
@@ -1,116 +0,0 @@
-A page for an editor to make a decision on a version of a project.
-
-```js
-const { withFormik } = require('formik')
-
-const AssignEditor = require('../assignEditors/AssignEditor').default
-
-const journal = {
-  id: faker.random.uuid(),
-}
-
-const manuscriptTemplate = () => ({
-  id: faker.random.uuid(),
-  teams: [
-    {
-      id: faker.random.uuid(),
-      role: 'author',
-      name: 'Authors',
-      object: {
-        id: faker.random.uuid(),
-        __typename: 'Manuscript',
-      },
-      objectType: 'manuscript',
-      members: [
-        {
-          user: {},
-        },
-      ],
-    },
-  ],
-  meta: {
-    title: faker.lorem.sentence(25),
-    abstract: faker.lorem.sentence(100),
-    articleType: 'original-research',
-    declarations: {
-      openData: 'yes',
-      openPeerReview: 'no',
-      preregistered: 'yes',
-      previouslySubmitted: 'yes',
-      researchNexus: 'no',
-      streamlinedReview: 'no',
-    },
-  },
-  decision: {
-    id: faker.random.uuid(),
-    comments: [{ type: 'note', content: 'this needs review' }],
-    created: 'Thu Oct 11 2018',
-    open: false,
-    status: '<p>This is a decision</p>',
-    user: { identities: [] },
-  },
-  reviews: [
-    {
-      comments: { content: 'this needs review' },
-      created: 'Thu Oct 11 2018',
-      open: false,
-      recommendation: '',
-      user: { identities: [] },
-    },
-  ],
-})
-
-const manuscript = Object.assign({}, manuscriptTemplate(), {
-  manuscriptVersions: [manuscriptTemplate()],
-})
-
-const team = {
-  members: [],
-}
-
-const options = [
-  {
-    value: faker.random.uuid(),
-    label: faker.internet.userName(),
-  },
-  {
-    value: faker.random.uuid(),
-    label: faker.internet.userName(),
-  },
-  {
-    value: faker.random.uuid(),
-    label: faker.internet.userName(),
-  },
-]
-
-const AssignEditorContainer = ({
-  project,
-  teamName,
-  teamTypeName,
-  addUserToTeam,
-}) => (
-  <AssignEditor
-    team={team}
-    options={options}
-    manuscript={manuscript}
-    teamName={teamName}
-    teamTypeName={teamTypeName}
-    addUserToTeam={addUserToTeam}
-  />
-)
-
-const ConnectedDecisionLayout = withFormik({
-  initialValues: {},
-  mapPropsToValues: ({ manuscript }) => manuscript,
-  displayName: 'decision',
-  handleSubmit: (props, { props: { onSubmit, history } }) =>
-    onSubmit(props, { history }),
-})(DecisionLayout)
-;<div style={{ position: 'relative', height: 600 }}>
-  <ConnectedDecisionLayout
-    journal={journal}
-    manuscript={manuscript}
-    uploadFile={() => {}}
-  />
-</div>
-```
diff --git a/packages/components/xpub-review/src/components/decision/DecisionReview.js b/packages/components/xpub-review/src/components/decision/DecisionReview.js
deleted file mode 100644
index adf818ef0..000000000
--- a/packages/components/xpub-review/src/components/decision/DecisionReview.js
+++ /dev/null
@@ -1,106 +0,0 @@
-import React from 'react'
-import styled from 'styled-components'
-import { compose, withState, withHandlers } from 'recompose'
-import { withJournal } from 'xpub-journal'
-import { Button } from '@pubsweet/ui'
-import { th } from '@pubsweet/ui-toolkit'
-import Review from '../review/Review'
-
-const ToggleReview = ({ open, toggle }) => (
-  <Button onClick={toggle} plain>
-    {open ? 'Hide' : 'Show'}
-  </Button>
-)
-
-const Bullet = ({ journal, recommendation }) => {
-  const recommendationColor = () =>
-    recommendation
-      ? journal.recommendations.find(item => item.value === recommendation)
-          .color
-      : 'black'
-
-  const Dot = styled.span`
-    border-radius: 100%;
-    display: inline-block;
-    height: 10px;
-    margin-right: 10px;
-    width: 10px;
-    background-color: ${recommendationColor};
-  `
-
-  return <Dot />
-}
-
-const ReviewHeading = ({
-  journal,
-  name,
-  open,
-  ordinal,
-  recommendation,
-  toggleOpen,
-}) => {
-  const Root = styled.div`
-    display: flex;
-    align-items: baseline;
-  `
-  const Ordinal = styled.span``
-  const Name = styled.span``
-  const Controls = styled.span`
-    flex-grow: 1;
-    text-align: right;
-  `
-
-  return (
-    <Root>
-      <Bullet journal={journal} recommendation={recommendation} />
-      <Ordinal>Review {ordinal}</Ordinal>
-      &nbsp;
-      <Name>{name || 'Anonymous'}</Name>
-      <Controls>
-        <ToggleReview open={open} toggle={toggleOpen} />
-      </Controls>
-    </Root>
-  )
-}
-
-const DecisionReview = ({ review, reviewer, journal, open, toggleOpen }) => {
-  const { recommendation } = review
-  const { name, ordinal } = reviewer
-
-  const Root = styled.div`
-    margin-bottom: calc(${th('gridUnit')} * 3);
-  `
-
-  const ReviewBody = styled.div`
-    margin-left: 1em;
-  `
-
-  return (
-    <Root>
-      <ReviewHeading
-        journal={journal}
-        name={name}
-        open={open}
-        ordinal={ordinal}
-        recommendation={recommendation}
-        toggleOpen={toggleOpen}
-      />
-
-      {open && (
-        <ReviewBody>
-          <Review review={review} />
-        </ReviewBody>
-      )}
-    </Root>
-  )
-}
-
-export default compose(
-  withJournal,
-  withState('open', 'setOpen', ({ open }) => open),
-  withHandlers({
-    toggleOpen: props => () => {
-      props.setOpen(open => !open)
-    },
-  }),
-)(DecisionReview)
diff --git a/packages/components/xpub-review/src/components/decision/DecisionReview.md b/packages/components/xpub-review/src/components/decision/DecisionReview.md
deleted file mode 100644
index e0220b579..000000000
--- a/packages/components/xpub-review/src/components/decision/DecisionReview.md
+++ /dev/null
@@ -1,35 +0,0 @@
-Reviews of a version of a project, as shown when making a decision.
-
-```js
-const review = {
-  comments: [{ content: 'this needs review' }],
-  created: 'Thu Oct 11 2018',
-  open: false,
-  recommendation: 'revise',
-  user: { id: 1, username: 'test user' },
-}
-
-const reviewer = {
-  ordinal: faker.random.number({ min: 1, max: 5 }),
-  name: faker.name.findName(),
-}
-;<DecisionReview open review={review} reviewer={{ name: 'test user' }} />
-```
-
-The review is hidden by default, but can be toggled to display the review.
-
-```js
-const review = {
-  comments: [{ content: 'this needs review' }],
-  created: 'Thu Oct 11 2018',
-  open: false,
-  recommendation: 'revise',
-  user: { id: 1, username: 'test user' },
-}
-
-const reviewer = {
-  ordinal: faker.random.number({ min: 1, max: 5 }),
-  name: faker.name.findName(),
-}
-;<DecisionReview review={review} reviewer={{ name: 'test user' }} />
-```
diff --git a/packages/components/xpub-review/src/components/decision/DecisionReviews.js b/packages/components/xpub-review/src/components/decision/DecisionReviews.js
deleted file mode 100644
index 3ac96155e..000000000
--- a/packages/components/xpub-review/src/components/decision/DecisionReviews.js
+++ /dev/null
@@ -1,44 +0,0 @@
-import React from 'react'
-// import { getUserFromTeam } from 'xpub-selectors'
-import DecisionReview from './DecisionReview'
-
-// TODO: read reviewer ordinal and name from project reviewer
-// const { status } =
-//     getUserFromTeam(manuscript, 'reviewerEditor').filter(
-//       member => member.user.id === currentUser.id,
-//     )[0] || {}
-//   return status
-const getCompletedReviews = (manuscript, currentUser) => {
-  const team =
-    manuscript.teams.find(team => team.teamType === 'reviewerEditor') || {}
-  const { status } =
-    (team.status || []).filter(member => member.user === currentUser.id)[0] ||
-    {}
-  return status
-}
-
-const DecisionReviews = ({ manuscript }) => (
-  <div>
-    {manuscript.reviews &&
-      manuscript.reviews
-        .filter(
-          review =>
-            getCompletedReviews(manuscript, review.user) === 'completed' &&
-            review.isDecision === false,
-        )
-        .map((review, index) => (
-          <div key={review.id}>
-            <DecisionReview
-              open
-              review={review}
-              reviewer={{
-                name: review.user.username,
-                ordinal: index + 1,
-              }}
-            />
-          </div>
-        ))}
-  </div>
-)
-
-export default DecisionReviews
diff --git a/packages/components/xpub-review/src/components/decision/DecisionReviews.md b/packages/components/xpub-review/src/components/decision/DecisionReviews.md
deleted file mode 100644
index d8b2a158e..000000000
--- a/packages/components/xpub-review/src/components/decision/DecisionReviews.md
+++ /dev/null
@@ -1,68 +0,0 @@
-Reviews of a version of a project, as shown when making a decision.
-
-```js
-const { JournalProvider } = require('xpub-journal')
-const journal = require('@pubsweet/styleguide/config/journal')
-
-const manuscriptTemplate = () => ({
-  id: faker.random.uuid(),
-  teams: [
-    {
-      id: faker.random.uuid(),
-      role: 'reviewerEditor',
-      name: 'Reviewer',
-      object: {
-        id: faker.random.uuid(),
-        __typename: 'Manuscript',
-      },
-      objectType: 'manuscript',
-      members: [
-        {
-          user: {
-            id: 1,
-            username: 'test user',
-          },
-          status: 'accepted',
-        },
-      ],
-    },
-  ],
-  meta: {
-    title: faker.lorem.sentence(25),
-    abstract: faker.lorem.sentence(100),
-    articleType: 'original-research',
-    declarations: {
-      openData: 'yes',
-      openPeerReview: 'no',
-      preregistered: 'yes',
-      previouslySubmitted: 'yes',
-      researchNexus: 'no',
-      streamlinedReview: 'no',
-    },
-  },
-  decision: {
-    id: faker.random.uuid(),
-    comments: [{ type: 'note', content: 'this needs review' }],
-    created: 'Thu Oct 11 2018',
-    open: false,
-    status: '<p>This is a decision</p>',
-    user: { id: 1 },
-  },
-  reviews: [
-    {
-      comments: [{ content: 'this needs review' }],
-      created: 'Thu Oct 11 2018',
-      open: false,
-      recommendation: 'revise',
-      user: { id: 1, username: 'test user' },
-    },
-  ],
-})
-
-const manuscript = Object.assign({}, manuscriptTemplate(), {
-  manuscriptVersions: [manuscriptTemplate()],
-})
-;<JournalProvider journal={journal}>
-  <DecisionReviews manuscript={manuscript} />
-</JournalProvider>
-```
diff --git a/packages/components/xpub-review/src/components/decision/EditorSection.js b/packages/components/xpub-review/src/components/decision/EditorSection.js
deleted file mode 100644
index 2c05b01f9..000000000
--- a/packages/components/xpub-review/src/components/decision/EditorSection.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import React from 'react'
-import { Wax } from 'wax-prose-mirror'
-import { EditorWrapper } from '../molecules/EditorWrapper'
-import { Info } from '../molecules/Info'
-
-export default ({ manuscript }) =>
-  ((manuscript.files || []).find(file => file.fileType === 'manuscript') || '')
-    .mimeType ===
-  'application/vnd.openxmlformats-officedocument.wordprocessingml.document' ? (
-    <EditorWrapper>
-      <Wax key={manuscript.id} readonly value={manuscript.meta.source} />
-    </EditorWrapper>
-  ) : (
-    <Info>No supported view of the file</Info>
-  )
diff --git a/packages/components/xpub-review/src/components/index.js b/packages/components/xpub-review/src/components/index.js
deleted file mode 100644
index 0290b63d6..000000000
--- a/packages/components/xpub-review/src/components/index.js
+++ /dev/null
@@ -1,2 +0,0 @@
-export { default as DecisionPage } from './DecisionPage'
-export { default as ReviewPage } from './ReviewPage'
diff --git a/packages/components/xpub-review/src/components/metadata/ReviewMetadata.js b/packages/components/xpub-review/src/components/metadata/ReviewMetadata.js
deleted file mode 100644
index 18cbfab49..000000000
--- a/packages/components/xpub-review/src/components/metadata/ReviewMetadata.js
+++ /dev/null
@@ -1,144 +0,0 @@
-import React from 'react'
-import styled from 'styled-components'
-
-import { Attachment } from '@pubsweet/ui'
-
-const Root = styled.div``
-
-const Title = styled.div``
-
-const Heading = styled.span`
-  font-weight: inherit;
-  padding: 0 1em 0 0;
-  white-space: nowrap;
-  text-align: right;
-  flex-grow: 0;
-  flex-shrink: 0;
-  flex-basis: 50%;
-`
-const Metadata = styled.div`
-  div {
-    display: flex;
-    flex-direction: row;
-    justify-content: flex-start;
-  }
-`
-
-const Cell = styled.span`
-  padding: 0;
-  flex-grow: 0;
-  flex-shrink: 0;
-  flex-basis: 50%;
-`
-
-const getNote = (notes, type) =>
-  notes.find(note => note.notesType === type) || {}
-
-const getDeclarations = (manuscript, field) =>
-  ((manuscript.meta || {}).declarations || {})[field]
-
-const getSupplementaryFiles = supplementary =>
-  (supplementary || []).filter(file => file.fileType === 'supplementary') || []
-
-// Due to migration to new Data Model
-// Attachement component needs different data structure to work
-// needs to change the pubsweet ui Attachement to support the new Data Model
-const filesToAttachment = file => ({
-  name: file.filename,
-  url: file.url,
-})
-
-const ReviewMetadata = ({ manuscript }) => (
-  <Root>
-    <Title>Metadata</Title>
-    <Metadata>
-      <div>
-        <Heading>Open Peer Review :</Heading>
-        <Cell>
-          {getDeclarations(manuscript, 'openPeerReview') === 'yes'
-            ? 'Yes'
-            : 'No'}
-        </Cell>
-      </div>
-      <div>
-        <Heading>Streamlined Review :</Heading>
-        <Cell>
-          {getDeclarations(manuscript, 'streamlinedReview') === 'yes'
-            ? 'Please view supplementary uploaded files'
-            : 'No'}
-        </Cell>
-      </div>
-      <div>
-        <Heading>Part of Research Nexus :</Heading>
-        <Cell>
-          {getDeclarations(manuscript, 'researchNexus') === 'yes'
-            ? 'Yes'
-            : 'No'}
-        </Cell>
-      </div>
-      <div>
-        <Heading>Pre-registered :</Heading>
-        <Cell>
-          {getDeclarations(manuscript, 'preregistered') === 'yes'
-            ? 'Yes'
-            : 'No'}
-        </Cell>
-      </div>
-      <div>
-        <Heading>Suggested Reviewers :</Heading>
-        <Cell>
-          {((manuscript.suggestions || {}).reviewers || {}).suggested || 'None'}
-        </Cell>
-      </div>
-      <div>
-        <Heading>Opposed Reviewers :</Heading>
-        <Cell>
-          {((manuscript.suggestions || {}).reviewers || {}).opposed || 'None'}
-        </Cell>
-      </div>
-      <div>
-        <Heading>Suggested Editors :</Heading>
-        <Cell>
-          {((manuscript.suggestions || {}).editors || {}).suggested || 'None'}
-        </Cell>
-      </div>
-      <div>
-        <Heading>Opposed Editors :</Heading>
-        <Cell>
-          {((manuscript.suggestions || {}).editors || {}).opposed || 'None'}
-        </Cell>
-      </div>
-      <div>
-        <Heading>Special Instructions :</Heading>
-        <Cell>
-          {getNote(manuscript.meta.notes || [], 'specialInstructions')
-            .content || 'None'}
-        </Cell>
-      </div>
-      {getSupplementaryFiles(manuscript.files).length > 0 && (
-        <div>
-          <Heading>
-            {getSupplementaryFiles(manuscript.files).length} supplementary{' '}
-            {getSupplementaryFiles(manuscript.files).length === 1
-              ? 'file'
-              : 'files'}
-            :
-          </Heading>
-          {!!getSupplementaryFiles(manuscript.files).length && (
-            <Cell>
-              {getSupplementaryFiles(manuscript.files).map(file => (
-                <Attachment
-                  file={filesToAttachment(file)}
-                  key={file.url}
-                  uploaded
-                />
-              ))}
-            </Cell>
-          )}
-        </div>
-      )}
-    </Metadata>
-  </Root>
-)
-
-export default ReviewMetadata
diff --git a/packages/components/xpub-review/src/components/metadata/ReviewMetadata.md b/packages/components/xpub-review/src/components/metadata/ReviewMetadata.md
deleted file mode 100644
index 7666b612e..000000000
--- a/packages/components/xpub-review/src/components/metadata/ReviewMetadata.md
+++ /dev/null
@@ -1,63 +0,0 @@
-Project metadata, displayed at the top of the review form.
-
-```js
-const manuscriptTemplate = () => ({
-  id: faker.random.uuid(),
-  teams: [
-    {
-      id: faker.random.uuid(),
-      role: 'reviewerEditor',
-      name: 'Reviewer',
-      object: {
-        id: faker.random.uuid(),
-        __typename: 'Manuscript',
-      },
-      objectType: 'manuscript',
-      members: [
-        {
-          user: {
-            id: 1,
-            username: 'test user',
-          },
-          status: 'accepted',
-        },
-      ],
-    },
-  ],
-  meta: {
-    title: faker.lorem.sentence(25),
-    abstract: faker.lorem.sentence(100),
-    articleType: 'original-research',
-    declarations: {
-      openData: 'yes',
-      openPeerReview: 'no',
-      preregistered: 'yes',
-      previouslySubmitted: 'yes',
-      researchNexus: 'no',
-      streamlinedReview: 'no',
-    },
-  },
-  decision: {
-    id: faker.random.uuid(),
-    comments: [{ type: 'note', content: 'this needs review' }],
-    created: 'Thu Oct 11 2018',
-    open: false,
-    status: '<p>This is a decision</p>',
-    user: { id: 1 },
-  },
-  reviews: [
-    {
-      comments: [{ content: 'this needs review' }],
-      created: 'Thu Oct 11 2018',
-      open: false,
-      recommendation: 'revise',
-      user: { id: 1, username: 'test user' },
-    },
-  ],
-})
-
-const manuscript = Object.assign({}, manuscriptTemplate(), {
-  manuscriptVersions: [manuscriptTemplate()],
-})
-;<ReviewMetadata manuscript={manuscript} />
-```
diff --git a/packages/components/xpub-review/src/components/molecules/EditorWrapper.js b/packages/components/xpub-review/src/components/molecules/EditorWrapper.js
deleted file mode 100644
index 8db6b31ef..000000000
--- a/packages/components/xpub-review/src/components/molecules/EditorWrapper.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import styled from 'styled-components'
-
-const EditorWrapper = styled.div`
-  .wax-container {
-    position: relative;
-    .main-editor {
-      margin: 3% 0 0 0;
-    }
-  }
-`
-
-export { EditorWrapper }
diff --git a/packages/components/xpub-review/src/components/molecules/Info.js b/packages/components/xpub-review/src/components/molecules/Info.js
deleted file mode 100644
index ce196e93b..000000000
--- a/packages/components/xpub-review/src/components/molecules/Info.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import styled from 'styled-components'
-
-const Info = styled.span`
-  padding: 0;
-  margin: 0;
-  list-style: none;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  height: 500px;
-`
-
-export { Info }
diff --git a/packages/components/xpub-review/src/components/molecules/Roles.js b/packages/components/xpub-review/src/components/molecules/Roles.js
deleted file mode 100644
index d7499552f..000000000
--- a/packages/components/xpub-review/src/components/molecules/Roles.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import styled from 'styled-components'
-
-const Roles = styled.div`
-  display: flex;
-  flex-direction: row;
-  justify-content: space-around;
-  font-size: 0.8em;
-  margin-bottom: 0.6em;
-  margin-left: 0.5em;
-  margin-top: 0;
-  padding-left: 1.5em;
-  text-transform: uppercase;
-`
-
-const Role = styled.div`
-  display: flex;
-
-  &:not(:last-of-type) {
-    margin-right: 3em;
-  }
-`
-
-export { Roles, Role }
diff --git a/packages/components/xpub-review/src/components/review/Review.js b/packages/components/xpub-review/src/components/review/Review.js
deleted file mode 100644
index 6dafc5095..000000000
--- a/packages/components/xpub-review/src/components/review/Review.js
+++ /dev/null
@@ -1,70 +0,0 @@
-import React from 'react'
-import styled from 'styled-components'
-import { NoteViewer } from 'xpub-edit'
-import { Attachment } from '@pubsweet/ui'
-import { th } from '@pubsweet/ui-toolkit'
-import { getCommentFiles } from './util'
-
-const Heading = styled.div``
-const Note = styled.div`
-  font-size: ${th('fontSizeBaseSmall')};
-  line-height: ${th('lineHeightBaseSmall')};
-`
-const Recommendation = styled(Note)``
-const Content = styled.div``
-
-// Due to migration to new Data Model
-// Attachement component needs different data structure to work
-// needs to change the pubsweet ui Attachement to support the new Data Model
-const filesToAttachment = file => ({
-  name: file.filename,
-  url: file.url,
-})
-
-const findComments = (review = {}, type) => {
-  const comments = review.comments || []
-  return comments.find(comment => comment.type === type)
-}
-
-const ReviewComments = (review, type) => (
-  <Note>
-    <Content>
-      <NoteViewer value={findComments(review, type).content} />
-    </Content>
-    {getCommentFiles(review, type).map(attachment => (
-      <Attachment
-        file={filesToAttachment(attachment)}
-        key={attachment.url}
-        uploaded
-      />
-    ))}
-  </Note>
-)
-
-const Review = ({ review }) => (
-  <div>
-    {findComments(review, 'note') && (
-      <div>
-        <Heading>Note</Heading>
-
-        {ReviewComments(review, 'note')}
-      </div>
-    )}
-    {findComments(review, 'confidential') && (
-      <div>
-        <Heading>Confidential</Heading>
-
-        {ReviewComments(review, 'confidential')}
-      </div>
-    )}
-    {review.recommendation && (
-      <div>
-        <Heading>Recommendation</Heading>
-
-        <Recommendation>{review.recommendation}</Recommendation>
-      </div>
-    )}
-  </div>
-)
-
-export default Review
diff --git a/packages/components/xpub-review/src/components/review/Review.md b/packages/components/xpub-review/src/components/review/Review.md
deleted file mode 100644
index c1b178e53..000000000
--- a/packages/components/xpub-review/src/components/review/Review.md
+++ /dev/null
@@ -1,12 +0,0 @@
-A review of a version of a project.
-
-```js
-const review = {
-  comments: [{ content: 'this needs review' }],
-  created: 'Thu Oct 11 2018',
-  open: false,
-  recommendation: 'revise',
-  user: { id: 1 },
-}
-;<Review review={review} />
-```
diff --git a/packages/components/xpub-review/src/components/review/ReviewForm.js b/packages/components/xpub-review/src/components/review/ReviewForm.js
deleted file mode 100644
index e6cee89af..000000000
--- a/packages/components/xpub-review/src/components/review/ReviewForm.js
+++ /dev/null
@@ -1,202 +0,0 @@
-import React from 'react'
-import styled from 'styled-components'
-import { cloneDeep, set } from 'lodash'
-import { Field } from 'formik'
-import { NoteEditor } from 'xpub-edit'
-import {
-  Button,
-  Flexbox,
-  RadioGroup,
-  UploadButton,
-  UploadingFile,
-} from '@pubsweet/ui'
-
-import { withJournal } from 'xpub-journal'
-import { getCommentFiles, stripHtml, createComments } from './util'
-import AdminSection from '../atoms/AdminSection'
-
-const AttachmentsInput = ({
-  field,
-  form: { values },
-  updateReview,
-  uploadFile,
-  type,
-}) => [
-  <UploadButton
-    buttonText="↑ Upload files"
-    onChange={event => {
-      const val = event.target.files[0]
-      const file = cloneDeep(val)
-      file.filename = val.name
-      file.type = type
-
-      const { updateIndex, comment } = createComments(
-        values,
-        { files: [file] },
-        type,
-      )
-
-      const data = cloneDeep(values)
-      set(data, `comments.${updateIndex}`, comment)
-
-      updateReview(data).then(({ data: { updateReview } }) => {
-        uploadFile(val, updateReview, type)
-      })
-    }}
-  />,
-  <Flexbox>
-    {getCommentFiles(values, type).map(val => {
-      const file = cloneDeep(val)
-      file.name = file.filename
-      return <UploadingFile file={file} key={file.name} uploaded />
-    })}
-  </Flexbox>,
-]
-
-const NoteInput = ({
-  field,
-  form: { values, setFieldValue },
-  updateReview,
-}) => (
-  <NoteEditor
-    key="note-comment"
-    placeholder="Enter your review…"
-    title="Comments to the Author"
-    {...field}
-    onChange={value => {
-      const { comment } = createComments(
-        values,
-        {
-          type: 'note',
-          content: stripHtml(value),
-        },
-        'note',
-      )
-
-      setFieldValue(`comments.0`, comment)
-      const data = cloneDeep(values)
-      set(data, `comments.0`, comment)
-      updateReview(data)
-    }}
-    value={field.value || ''}
-  />
-)
-
-const ConfidentialInput = ({
-  field,
-  form: { values, setFieldValue },
-  updateReview,
-}) => (
-  <NoteEditor
-    key="confidential-comment"
-    placeholder="Enter a confidential note to the editor (optional)…"
-    title="Confidential Comments to Editor (Optional)"
-    {...field}
-    onChange={value => {
-      const { comment } = createComments(
-        values,
-        {
-          type: 'confidential',
-          content: stripHtml(value),
-        },
-        'confidential',
-      )
-
-      setFieldValue(`comments.1`, comment)
-      const data = cloneDeep(values)
-      set(data, `comments.1`, comment)
-      updateReview(data)
-    }}
-    value={field.value || ''}
-  />
-)
-
-const RecommendationInput = ({
-  field,
-  form: { values },
-  updateReview,
-  journal,
-}) => (
-  <RadioGroup
-    inline
-    {...field}
-    onChange={val => {
-      const data = cloneDeep(values)
-      set(data, 'recommendation', val)
-      updateReview(data)
-    }}
-    options={journal.recommendations}
-  />
-)
-
-const ReviewComment = props => [
-  <AdminSection>
-    <div name="note">
-      <Field
-        component={extraProps => <NoteInput {...props} {...extraProps} />}
-        key="noteField"
-        name="comments.0.content"
-      />
-      <Field
-        component={extraProps => (
-          <AttachmentsInput type="note" {...props} {...extraProps} />
-        )}
-      />
-    </div>
-  </AdminSection>,
-  <AdminSection>
-    <div name="confidential">
-      <Field
-        component={extraProps => (
-          <ConfidentialInput {...props} {...extraProps} />
-        )}
-        key="confidentialField"
-        name="comments.1.content"
-      />
-      <Field
-        component={extraProps => (
-          <AttachmentsInput type="confidential" {...props} {...extraProps} />
-        )}
-      />
-    </div>
-  </AdminSection>,
-]
-
-const Title = styled.div``
-
-const ReviewForm = ({
-  journal,
-  isValid,
-  handleSubmit,
-  updateReview,
-  uploadFile,
-  review,
-}) => (
-  <form onSubmit={handleSubmit}>
-    <ReviewComment updateReview={updateReview} uploadFile={uploadFile} />
-    <AdminSection>
-      <div name="Recommendation">
-        <Title>Recommendation</Title>
-        <Field
-          component={props => (
-            <RecommendationInput
-              journal={journal}
-              updateReview={updateReview}
-              {...props}
-            />
-          )}
-          name="recommendation"
-          updateReview={updateReview}
-        />
-      </div>
-    </AdminSection>
-
-    <AdminSection>
-      <Button disabled={!isValid} primary type="submit">
-        Submit
-      </Button>
-    </AdminSection>
-  </form>
-)
-
-export default withJournal(ReviewForm)
diff --git a/packages/components/xpub-review/src/components/review/ReviewForm.md b/packages/components/xpub-review/src/components/review/ReviewForm.md
deleted file mode 100644
index 9f739211d..000000000
--- a/packages/components/xpub-review/src/components/review/ReviewForm.md
+++ /dev/null
@@ -1,90 +0,0 @@
-A form for entering a review of a version of a project.
-
-```js
-const { withFormik } = require('formik')
-
-const journal = {
-  id: faker.random.uuid(),
-}
-
-const manuscriptTemplate = () => ({
-  id: faker.random.uuid(),
-  teams: [
-    {
-      id: faker.random.uuid(),
-      role: 'reviewerEditor',
-      name: 'reviewer',
-      object: {
-        id: faker.random.uuid(),
-        __typename: 'Manuscript',
-      },
-      objectType: 'manuscript',
-      members: [
-        {
-          user: { id: 1 },
-        },
-      ],
-    },
-  ],
-  meta: {
-    title: faker.lorem.sentence(25),
-    abstract: faker.lorem.sentence(100),
-    articleType: 'original-research',
-    declarations: {
-      openData: 'yes',
-      openPeerReview: 'no',
-      preregistered: 'yes',
-      previouslySubmitted: 'yes',
-      researchNexus: 'no',
-      streamlinedReview: 'no',
-    },
-  },
-  decision: {
-    id: faker.random.uuid(),
-    comments: [{ type: 'note', content: 'this needs review' }],
-    created: 'Thu Oct 11 2018',
-    open: false,
-    status: '<p>This is a decision</p>',
-    user: { id: 1 },
-  },
-  reviews: [
-    {
-      comments: [{ content: 'this needs review' }],
-      created: 'Thu Oct 11 2018',
-      open: false,
-      recommendation: '',
-      user: { id: 1 },
-    },
-  ],
-})
-
-const manuscript = Object.assign({}, manuscriptTemplate(), {
-  manuscriptVersions: [manuscriptTemplate()],
-})
-
-const review = {
-  comments: [{ content: 'this needs review' }],
-  created: 'Thu Oct 11 2018',
-  open: false,
-  recommendation: '',
-  user: { id: 1 },
-}
-
-const currentUser = {
-  id: 1,
-}
-
-const ConnectedReviewForm = withFormik({
-  initialValues: {},
-  mapPropsToValues: ({ manuscript, currentUser }) =>
-    manuscript.reviews.find(review => review.user.id === currentUser.id),
-  displayName: 'review',
-  handleSubmit: (props, { props: { onSubmit, history } }) =>
-    onSubmit(props, { history }),
-})(ReviewForm)
-;<ConnectedReviewForm
-  manuscript={manuscript}
-  currentUser={currentUser}
-  uploadFile={() => new XMLHttpRequest()}
-/>
-```
diff --git a/packages/components/xpub-review/src/components/review/ReviewLayout.js b/packages/components/xpub-review/src/components/review/ReviewLayout.js
deleted file mode 100644
index 387259389..000000000
--- a/packages/components/xpub-review/src/components/review/ReviewLayout.js
+++ /dev/null
@@ -1,96 +0,0 @@
-import React from 'react'
-
-import moment from 'moment'
-import { Tabs } from '@pubsweet/ui'
-
-import ReviewForm from './ReviewForm'
-import ReviewMetadata from '../metadata/ReviewMetadata'
-import Review from './Review'
-import EditorSection from '../decision/EditorSection'
-import { Columns, Manuscript, Admin } from '../atoms/Columns'
-
-const addEditor = (manuscript, label) => ({
-  content: <EditorSection manuscript={manuscript} />,
-  key: manuscript.id,
-  label,
-})
-
-const ReviewLayout = ({
-  currentUser,
-  manuscript,
-  review,
-  reviewer,
-  handleSubmit,
-  isValid,
-  status,
-  updateReview,
-  uploadFile,
-}) => {
-  const reviewSections = []
-  const editorSections = []
-  const manuscriptVersions = manuscript.manuscriptVersions || []
-  manuscriptVersions.forEach(manuscript => {
-    const label = moment().format('YYYY-MM-DD')
-    reviewSections.push({
-      content: (
-        <div>
-          <ReviewMetadata manuscript={manuscript} />
-          <Review
-            review={manuscript.reviews.find(review => !review.isDecision) || {}}
-          />
-        </div>
-      ),
-      key: manuscript.id,
-      label,
-    })
-
-    editorSections.push(addEditor(manuscript, label))
-  }, [])
-
-  if (manuscript.status !== 'revising') {
-    const label = moment().format('YYYY-MM-DD')
-    reviewSections.push({
-      content: (
-        <div>
-          <ReviewMetadata manuscript={manuscript} />
-          {status === 'completed' ? (
-            <Review review={review} />
-          ) : (
-            <ReviewForm
-              handleSubmit={handleSubmit}
-              isValid={isValid}
-              review={review}
-              updateReview={updateReview}
-              uploadFile={uploadFile}
-            />
-          )}
-        </div>
-      ),
-      key: manuscript.id,
-      label,
-    })
-
-    editorSections.push(addEditor(manuscript, label))
-  }
-  return (
-    <Columns>
-      <Manuscript>
-        <Tabs
-          activeKey={editorSections[editorSections.length - 1].key}
-          sections={editorSections}
-          title="Versions"
-        />
-      </Manuscript>
-
-      <Admin>
-        <Tabs
-          activeKey={reviewSections[reviewSections.length - 1].key}
-          sections={reviewSections}
-          title="Versions"
-        />
-      </Admin>
-    </Columns>
-  )
-}
-
-export default ReviewLayout
diff --git a/packages/components/xpub-review/src/components/review/ReviewLayout.md b/packages/components/xpub-review/src/components/review/ReviewLayout.md
deleted file mode 100644
index 2ff154f99..000000000
--- a/packages/components/xpub-review/src/components/review/ReviewLayout.md
+++ /dev/null
@@ -1,94 +0,0 @@
-A page for a reviewer to submit a review of a version of a project.
-
-```js
-const { withFormik } = require('formik')
-
-const journal = {
-  id: faker.random.uuid(),
-}
-
-const manuscriptTemplate = () => ({
-  id: faker.random.uuid(),
-  teams: [
-    {
-      id: faker.random.uuid(),
-      role: 'reviewerEditor',
-      name: 'reviewer',
-      object: {
-        id: faker.random.uuid(),
-        __typename: 'Manuscript',
-      },
-      objectType: 'manuscript',
-      members: [
-        {
-          user: { id: 1 },
-        },
-      ],
-    },
-  ],
-  meta: {
-    title: faker.lorem.sentence(25),
-    abstract: faker.lorem.sentence(100),
-    articleType: 'original-research',
-    declarations: {
-      openData: 'yes',
-      openPeerReview: 'no',
-      preregistered: 'yes',
-      previouslySubmitted: 'yes',
-      researchNexus: 'no',
-      streamlinedReview: 'no',
-    },
-  },
-  decision: {
-    id: faker.random.uuid(),
-    comments: [{ type: 'note', content: 'this needs review' }],
-    created: 'Thu Oct 11 2018',
-    open: false,
-    status: '<p>This is a decision</p>',
-    user: { id: 1 },
-  },
-  reviews: [
-    {
-      comments: [{ content: 'this needs review' }],
-      created: 'Thu Oct 11 2018',
-      open: false,
-      recommendation: '',
-      user: { id: 1 },
-    },
-  ],
-})
-
-const manuscript = Object.assign({}, manuscriptTemplate(), {
-  manuscriptVersions: [manuscriptTemplate()],
-})
-
-const review = {
-  comments: [{ content: 'this needs review' }],
-  created: 'Thu Oct 11 2018',
-  open: false,
-  recommendation: '',
-  user: { id: 1 },
-}
-
-const currentUser = {
-  id: 1,
-}
-
-const ConnectedReviewLayout = withFormik({
-  initialValues: {},
-  mapPropsToValues: ({ manuscript, currentUser }) =>
-    manuscript.reviews.find(review => review.user.id === currentUser.id),
-  displayName: 'review',
-  handleSubmit: (props, { props: { onSubmit, history } }) =>
-    onSubmit(props, { history }),
-})(ReviewLayout)
-;<div style={{ position: 'relative', height: 600 }}>
-  <ConnectedReviewLayout
-    journal={journal}
-    manuscript={manuscript}
-    review={review}
-    uploadFile={() => {}}
-    currentUser={currentUser}
-  />
-</div>
-```
diff --git a/packages/components/xpub-review/src/components/review/util.js b/packages/components/xpub-review/src/components/review/util.js
deleted file mode 100644
index a760b1ba6..000000000
--- a/packages/components/xpub-review/src/components/review/util.js
+++ /dev/null
@@ -1,38 +0,0 @@
-export const stripHtml = htmlString => {
-  const temp = document.createElement('span')
-  temp.innerHTML = htmlString
-  return temp.textContent
-}
-
-export const getCommentFiles = (review = {}, type) => {
-  const comments =
-    (review.comments || []).find(comment => (comment || {}).type === type) || {}
-  return comments.files || []
-}
-
-export const getCommentContent = (review = {}, type) => {
-  const comments =
-    (review.comments || []).find(comment => (comment || {}).type === type) || {}
-  return comments.content || ''
-}
-
-export const createComments = (values, val, type) => {
-  let updateIndex = (values.comments || []).findIndex(
-    comment => (comment || {}).type === type,
-  )
-  updateIndex =
-    (values.comments || []).length > 0 && updateIndex < 0 ? 1 : updateIndex
-  updateIndex = updateIndex < 0 ? 0 : updateIndex
-
-  const comment = Object.assign(
-    {
-      type,
-      content: '',
-      files: [],
-    },
-    (values.comments || [])[updateIndex],
-    val,
-  )
-
-  return { updateIndex, comment }
-}
diff --git a/packages/components/xpub-review/src/components/reviewers/Reviewer.js b/packages/components/xpub-review/src/components/reviewers/Reviewer.js
deleted file mode 100644
index 5367ceb26..000000000
--- a/packages/components/xpub-review/src/components/reviewers/Reviewer.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import React from 'react'
-import styled from 'styled-components'
-// import { map } from 'lodash'
-// import Moment from 'react-moment'
-import { Avatar } from '@pubsweet/ui'
-import { th } from '@pubsweet/ui-toolkit'
-
-const Root = styled.div`
-  font-family: ${th('fontReviewer')};
-  margin-right: ${th('gridUnit')};
-  padding: ${th('gridUnit')};
-`
-
-const ordinalLetter = ordinal =>
-  ordinal ? String.fromCharCode(96 + ordinal) : null
-
-const Reviewer = ({ reviewer, removeReviewer }) => (
-  <Root>
-    <Avatar
-      height={70}
-      reviewerLetter={ordinalLetter(null)}
-      status={reviewer.status || ''}
-      width={100}
-    />
-    <div>{reviewer.username}</div>
-    {/* <div>
-      {map(reviewer.events, (event, key) => (
-        <Event key={`${key}-${event}`}>
-          {key} on <Moment format="YYYY-MM-DD">{event}</Moment>
-        </Event>
-      ))}
-    </div>
-    {reviewer.status === 'Pending' && (
-      <Button onClick={removeReviewer}>x</Button>
-    )} */}
-  </Root>
-)
-
-export default Reviewer
diff --git a/packages/components/xpub-review/src/components/reviewers/Reviewer.md b/packages/components/xpub-review/src/components/reviewers/Reviewer.md
deleted file mode 100644
index e25abb222..000000000
--- a/packages/components/xpub-review/src/components/reviewers/Reviewer.md
+++ /dev/null
@@ -1,47 +0,0 @@
-A reviewer who has been invited:
-
-```js
-const reviewer = {
-  status: 'invited',
-  user: {
-    username: faker.internet.userName(),
-  },
-}
-;<Reviewer reviewer={reviewer} removeReviewer={() => console.log('remove')} />
-```
-
-A reviewer who has accepted their invitation:
-
-```js
-const reviewer = {
-  status: 'accepted',
-  user: {
-    username: faker.internet.userName(),
-  },
-}
-;<Reviewer reviewer={reviewer} removeReviewer={() => console.log('remove')} />
-```
-
-A reviewer who has declined their invitation:
-
-```js
-const reviewer = {
-  status: 'declined',
-  user: {
-    username: faker.internet.userName(),
-  },
-}
-;<Reviewer reviewer={reviewer} removeReviewer={() => console.log('remove')} />
-```
-
-A reviewer who has submitted their review:
-
-```js
-const reviewer = {
-  status: 'reviewed',
-  user: {
-    username: faker.internet.userName(),
-  },
-}
-;<Reviewer reviewer={reviewer} removeReviewer={() => console.log('remove')} />
-```
diff --git a/packages/components/xpub-review/src/components/reviewers/ReviewerContainer.js b/packages/components/xpub-review/src/components/reviewers/ReviewerContainer.js
deleted file mode 100644
index 92f68ef89..000000000
--- a/packages/components/xpub-review/src/components/reviewers/ReviewerContainer.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import { compose, withHandlers } from 'recompose'
-import { connect } from 'react-redux'
-import { actions } from 'pubsweet-client'
-import Reviewer from './Reviewer'
-
-const removeReviewer = props => () => {
-  const { id } = props.reviewer
-
-  return props.deleteFragment(props.project, { id })
-}
-
-export default compose(
-  connect(
-    null,
-    {
-      deleteFragment: actions.deleteFragment,
-    },
-  ),
-  withHandlers({
-    removeReviewer: props => removeReviewer(props),
-  }),
-)(Reviewer)
diff --git a/packages/components/xpub-review/src/components/reviewers/ReviewerForm.js b/packages/components/xpub-review/src/components/reviewers/ReviewerForm.js
deleted file mode 100644
index db27927ff..000000000
--- a/packages/components/xpub-review/src/components/reviewers/ReviewerForm.js
+++ /dev/null
@@ -1,55 +0,0 @@
-import React from 'react'
-import Select from 'react-select'
-import { Field } from 'formik'
-import { Button } from '@pubsweet/ui'
-import { required } from 'xpub-validators'
-import 'react-select/dist/react-select.css'
-
-const OptionRenderer = option => (
-  <div>
-    <div>{option.username}</div>
-    <div>{option.email}</div>
-  </div>
-)
-
-const ReviewerInput = ({
-  field,
-  form: { values, setFieldValue },
-  push,
-  replace,
-  reviewerUsers,
-}) => (
-  <Select.Creatable
-    {...field}
-    labelKey="username"
-    onChange={user => {
-      setFieldValue('user', user)
-    }}
-    optionRenderer={OptionRenderer}
-    options={reviewerUsers}
-    promptTextCreator={label => `Add ${label}?`}
-    valueKey="id"
-  />
-)
-
-const ReviewerForm = ({
-  reset,
-  isValid,
-  handleSubmit,
-  onSubmit,
-  reviewerUsers,
-}) => (
-  <form onSubmit={handleSubmit}>
-    <Field
-      component={ReviewerInput}
-      name="user"
-      reviewerUsers={reviewerUsers}
-      validate={required}
-    />
-    <Button disabled={!isValid} primary type="submit">
-      Invite reviewer
-    </Button>
-  </form>
-)
-
-export default ReviewerForm
diff --git a/packages/components/xpub-review/src/components/reviewers/ReviewerForm.md b/packages/components/xpub-review/src/components/reviewers/ReviewerForm.md
deleted file mode 100644
index 28ba3f44b..000000000
--- a/packages/components/xpub-review/src/components/reviewers/ReviewerForm.md
+++ /dev/null
@@ -1,40 +0,0 @@
-A form for inviting a reviewer to a version of a project.
-
-```js
-const { withFormik } = require('formik')
-
-const reviewerUsers = [
-  {
-    id: faker.random.uuid(),
-    email: faker.internet.email(),
-    username: faker.internet.userName(),
-  },
-  {
-    id: faker.random.uuid(),
-    email: faker.internet.email(),
-    username: faker.internet.userName(),
-  },
-  {
-    id: faker.random.uuid(),
-    email: faker.internet.email(),
-    username: faker.internet.userName(),
-  },
-]
-
-const loadOptions = input => {
-  // TODO: filter users
-
-  return Promise.resolve({ options: reviewerUsers })
-}
-
-const ConnectedReviewerForm = withFormik({
-  initialValues: {},
-  mapPropsToValues: ({ manuscript }) => manuscript,
-  displayName: 'reviewers',
-  handleSubmit: () => {},
-})(ReviewerForm)
-;<ConnectedReviewerForm
-  loadOptions={loadOptions}
-  form={{ values: { teams: [] } }}
-/>
-```
diff --git a/packages/components/xpub-review/src/components/reviewers/ReviewerFormContainer.js b/packages/components/xpub-review/src/components/reviewers/ReviewerFormContainer.js
deleted file mode 100644
index e0ba787d5..000000000
--- a/packages/components/xpub-review/src/components/reviewers/ReviewerFormContainer.js
+++ /dev/null
@@ -1,139 +0,0 @@
-import { compose, withHandlers } from 'recompose'
-import { cloneDeep } from 'lodash'
-import { withFormik } from 'formik'
-import { graphql } from 'react-apollo'
-import { gql } from 'apollo-client-preset'
-import ReviewerForm from './ReviewerForm'
-
-const createTeamMutation = gql`
-  mutation($input: TeamInput!) {
-    createTeam(input: $input) {
-      id
-      type
-      teamType
-      name
-      object {
-        objectId
-        objectType
-      }
-      members {
-        id
-        username
-      }
-    }
-  }
-`
-
-const updateTeamMutation = gql`
-  mutation($id: ID, $input: TeamInput) {
-    updateTeam(id: $id, input: $input) {
-      id
-      type
-      teamType
-      name
-      object {
-        objectId
-        objectType
-      }
-      members {
-        id
-        username
-      }
-    }
-  }
-`
-
-const query = gql`
-  query {
-    teams {
-      id
-      teamType
-      name
-      object {
-        objectId
-        objectType
-      }
-      members {
-        id
-      }
-      status {
-        user
-        status
-      }
-    }
-  }
-`
-
-const update = (
-  proxy,
-  { data: { updateTeamMutation, createTeamMutation, teams } },
-) => {
-  const data = proxy.readQuery({ query })
-  if (updateTeamMutation) {
-    const teamIndex = teams.findIndex(team => team.id === updateTeamMutation.id)
-    data[teamIndex] = updateTeamMutation
-  }
-
-  if (createTeamMutation) {
-    data.push(createTeamMutation)
-  }
-
-  proxy.writeQuery({ query, data })
-}
-
-const handleSubmit = (
-  { user },
-  { props: { manuscript, updateTeamMutation, createTeamMutation } },
-) => {
-  const team =
-    manuscript.teams.find(team => team.teamType === 'reviewerEditor') || {}
-
-  const teamAdd = {
-    object: {
-      objectId: manuscript.id,
-      objectType: 'Manuscript',
-    },
-    status: [{ user: user.id, status: 'invited' }],
-    name: 'Reviewer Editor',
-    teamType: 'reviewerEditor',
-    members: [user.id],
-  }
-  if (team.id) {
-    const newTeam = cloneDeep(team)
-    newTeam.status.push({ user: user.id, status: 'invited' })
-    newTeam.members.push(user.id)
-    updateTeamMutation({
-      variables: {
-        id: team.id,
-        input: newTeam,
-      },
-      update,
-    })
-  } else {
-    createTeamMutation({
-      variables: {
-        input: teamAdd,
-      },
-      update,
-    })
-  }
-}
-
-const loadOptions = props => input => {
-  const options = props.reviewerUsers
-
-  return Promise.resolve({ options })
-}
-
-export default compose(
-  graphql(createTeamMutation, { name: 'createTeamMutation' }),
-  graphql(updateTeamMutation, { name: 'updateTeamMutation' }),
-  withHandlers({
-    loadOptions: props => loadOptions(props),
-  }),
-  withFormik({
-    mapPropsToValues: () => ({ user: '' }),
-    displayName: 'reviewers',
-    handleSubmit,
-  }),
-)(ReviewerForm)
diff --git a/packages/components/xpub-review/src/components/reviewers/Reviewers.js b/packages/components/xpub-review/src/components/reviewers/Reviewers.js
deleted file mode 100644
index 7204e5b27..000000000
--- a/packages/components/xpub-review/src/components/reviewers/Reviewers.js
+++ /dev/null
@@ -1,57 +0,0 @@
-import React from 'react'
-import styled from 'styled-components'
-import { Link } from '@pubsweet/ui'
-import { th } from '@pubsweet/ui-toolkit'
-import ReviewerForm from './ReviewerForm'
-
-const Root = styled.div`
-  display: flex;
-  margin-top: calc(${th('gridUnit')} * 3);
-`
-const Form = styled.div``
-const ReviewersList = styled.div`
-  display: flex;
-  flex-wrap: wrap;
-`
-
-const Reviewers = ({
-  Reviewer,
-  journal,
-  isValid,
-  loadOptions,
-  version,
-  reviewers,
-  reviewerUsers,
-  manuscript,
-  handleSubmit,
-  teams,
-}) => (
-  <Root>
-    <Form>
-      <ReviewerForm
-        handleSubmit={handleSubmit}
-        isValid={isValid}
-        journal={journal}
-        loadOptions={loadOptions}
-        reviewerUsers={reviewerUsers}
-      />
-      <Link
-        to={`/journals/${journal.id}/versions/${manuscript.id}/decisions/${
-          manuscript.id
-        }`}
-      >
-        Back to Control Panel
-      </Link>
-    </Form>
-
-    {reviewers && (
-      <ReviewersList>
-        {reviewers.map(reviewer => (
-          <Reviewer journal={journal} key={reviewer.id} reviewer={reviewer} />
-        ))}
-      </ReviewersList>
-    )}
-  </Root>
-)
-
-export default Reviewers
diff --git a/packages/components/xpub-review/src/components/reviewers/Reviewers.md b/packages/components/xpub-review/src/components/reviewers/Reviewers.md
deleted file mode 100644
index c8bf9bb0f..000000000
--- a/packages/components/xpub-review/src/components/reviewers/Reviewers.md
+++ /dev/null
@@ -1,146 +0,0 @@
-On the reviewers page, the handling editor can:
-
-* Search users by entering a username or email address.
-* Add a user as a reviewer of this version (which also adds them as a reviewer of the project, if not already present).
-* View a list of reviewers of this version and perform actions on each reviewer.
-
-```js
-const { withFormik } = require('formik')
-const { compose, withHandlers } = require('recompose')
-const Reviewer = require('./Reviewer').default
-const ReviewerForm = require('./ReviewerForm').default
-
-const journal = {
-  id: faker.random.uuid(),
-  reviewers: [
-    {
-      id: faker.random.uuid(),
-      user: faker.random.uuid(),
-    },
-  ],
-}
-
-const manuscriptTemplate = () => ({
-  id: faker.random.uuid(),
-  teams: [
-    {
-      id: faker.random.uuid(),
-      role: 'reviewerEditor',
-      name: 'reviewer',
-      object: {
-        id: faker.random.uuid(),
-        __typename: 'Manuscript',
-      },
-      objectType: 'manuscript',
-      members: [
-        {
-          user: { id: 1 },
-        },
-      ],
-    },
-  ],
-  meta: {
-    title: faker.lorem.sentence(25),
-    abstract: faker.lorem.sentence(100),
-    articleType: 'original-research',
-    declarations: {
-      openData: 'yes',
-      openPeerReview: 'no',
-      preregistered: 'yes',
-      previouslySubmitted: 'yes',
-      researchNexus: 'no',
-      streamlinedReview: 'no',
-    },
-  },
-  decision: {
-    id: faker.random.uuid(),
-    comments: [{ type: 'note', content: 'this needs review' }],
-    created: 'Thu Oct 11 2018',
-    open: false,
-    status: '<p>This is a decision</p>',
-    user: { id: 1 },
-  },
-  reviews: [
-    {
-      comments: [{ content: 'this needs review' }],
-      created: 'Thu Oct 11 2018',
-      open: false,
-      recommendation: 'revise',
-      user: { id: 1, username: 'test user' },
-    },
-  ],
-})
-
-const manuscript = Object.assign({}, manuscriptTemplate())
-
-const reviewers = [
-  {
-    status: 'invited',
-    user: { id: 1, username: 'test user' },
-  },
-]
-
-const reviewerUsers = [
-  {
-    id: faker.random.uuid(),
-    email: faker.internet.email(),
-    username: faker.internet.userName(),
-  },
-  {
-    id: faker.random.uuid(),
-    email: faker.internet.email(),
-    username: faker.internet.userName(),
-  },
-  {
-    id: faker.random.uuid(),
-    email: faker.internet.email(),
-    username: faker.internet.userName(),
-  },
-]
-
-initialState = {
-  reviewers,
-}
-
-const ReviewerFormContainer = compose(
-  withFormik({
-    form: 'reviewers',
-    handleSubmit: ({ user }) => {
-      setState({
-        reviewers: state.reviewers.concat({
-          id: faker.random.uuid(),
-          reviewer: faker.random.uuid(),
-          events: {
-            invited: new Date().toISOString(),
-          },
-          _user: user,
-          _reviewer: {
-            ordinal: null,
-          },
-        }),
-      })
-    },
-  }),
-  withHandlers({
-    loadOptions: props => input =>
-      Promise.resolve({ options: props.reviewerUsers }),
-  }),
-)(ReviewerForm)
-
-const ReviewerContainer = withHandlers({
-  removeReviewer: props => () =>
-    setState({
-      reviewers: state.reviewers.filter(
-        reviewer => reviewer.id !== props.reviewer.id,
-      ),
-    }),
-})(Reviewer)
-;<Reviewers
-  ReviewerForm={ReviewerFormContainer}
-  Reviewer={ReviewerContainer}
-  journal={journal}
-  manuscript={manuscript}
-  reviewers={state.reviewers}
-  reviewerUsers={reviewerUsers}
-/>
-```
diff --git a/packages/components/xpub-review/src/index.js b/packages/components/xpub-review/src/index.js
deleted file mode 100644
index 6f1f42a64..000000000
--- a/packages/components/xpub-review/src/index.js
+++ /dev/null
@@ -1,5 +0,0 @@
-module.exports = {
-  frontend: {
-    components: [() => require('./components')],
-  },
-}
diff --git a/packages/components/xpub-submit/README.md b/packages/components/xpub-submit/README.md
index 9c0f08033..b4d5981c2 100644
--- a/packages/components/xpub-submit/README.md
+++ b/packages/components/xpub-submit/README.md
@@ -1,6 +1,6 @@
 ## pubsweet-component-xpub-submit
 
-A PubSweet component that provides the form which the author completes before submitting a manuscript. It uses redux-form to handle the form state.
+A PubSweet component that provides the form which the author completes before submitting a manuscript.
 
-_Note:  
+_Note:
 The previously-released version of this component used JSON configuration to describe the form, and that can be implemented here too, once we know more about the types of input that are needed in submission forms for other journals._
diff --git a/packages/components/xpub-submit/package.json b/packages/components/xpub-submit/package.json
index e761e4167..1e73866fe 100644
--- a/packages/components/xpub-submit/package.json
+++ b/packages/components/xpub-submit/package.json
@@ -44,7 +44,6 @@
   "peerDependencies": {
     "pubsweet-client": ">=2.1.0",
     "react": ">=16",
-    "react-redux": "^5.0.2",
     "react-router-dom": "^4.2.2"
   }
 }
diff --git a/packages/components/xpub-teams-manager/package.json b/packages/components/xpub-teams-manager/package.json
index d4fa1d3ea..0b4c9558f 100644
--- a/packages/components/xpub-teams-manager/package.json
+++ b/packages/components/xpub-teams-manager/package.json
@@ -16,7 +16,6 @@
     "prop-types": "^15.5.10",
     "react-dom": "^16.2.0",
     "recompose": "^0.26.0",
-    "redux": "^3.7.2",
     "styled-components": "^4.1.1",
     "xpub-connect": "^2.0.7"
   },
diff --git a/packages/components/xpub-upload/package.json b/packages/components/xpub-upload/package.json
index 107439214..eebafe150 100644
--- a/packages/components/xpub-upload/package.json
+++ b/packages/components/xpub-upload/package.json
@@ -9,14 +9,12 @@
     "dist"
   ],
   "dependencies": {
-    "react-redux": "^5.0.2",
     "react-router-dom": "^4.2.2",
     "recompose": "^0.26.0"
   },
   "peerDependencies": {
     "pubsweet-client": ">=2.1.0",
     "react": ">=16",
-    "react-redux": ">=5.0.2",
     "react-router-dom": ">=4.2.2"
   }
 }
diff --git a/packages/styleguide/package.json b/packages/styleguide/package.json
index 2fba583bd..add24bf97 100644
--- a/packages/styleguide/package.json
+++ b/packages/styleguide/package.json
@@ -26,12 +26,9 @@
     "react": "^16.2.0",
     "react-apollo": "^2.3.3",
     "react-dom": "^16.2.0",
-    "react-redux": "^5.0.2",
     "react-router-dom": "^4.2.2",
     "react-styleguidist": "^8.0.6",
     "recompose": "^0.26.0",
-    "redux": "^3.6.0",
-    "redux-form": "^7.0.3",
     "regenerator-runtime": "^0.13.1",
     "styled-components": "^4.1.1",
     "styled-normalize": "^8.0.4",
diff --git a/packages/styleguide/src/components/Wrapper.js b/packages/styleguide/src/components/Wrapper.js
index 68496f253..9e7a81674 100644
--- a/packages/styleguide/src/components/Wrapper.js
+++ b/packages/styleguide/src/components/Wrapper.js
@@ -1,9 +1,5 @@
 import React from 'react'
-import { Provider } from 'react-redux'
 import { BrowserRouter as Router } from 'react-router-dom'
-import { reducer as formReducer } from 'redux-form'
-import currentUser from 'pubsweet-client/src/reducers/currentUser'
-import { createStore, combineReducers } from 'redux'
 import { JournalProvider } from 'xpub-journal'
 import { MockedProvider } from 'react-apollo/test-utils'
 import gql from 'graphql-tag'
@@ -12,25 +8,6 @@ import ErrorBoundary from './ErrorBoundary'
 import { currentTheme, themes, componentStore } from './StyleGuideRenderer'
 import * as journal from '../../config/journal'
 
-const rootReducer = combineReducers({
-  form: formReducer,
-  currentUser,
-})
-
-const store = createStore(
-  rootReducer,
-  {
-    currentUser: {
-      user: {
-        admin: true,
-        type: 'user',
-        id: 1,
-      },
-    },
-  },
-  window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__(),
-)
-
 const mocks = [
   {
     request: {
@@ -70,17 +47,15 @@ class Wrapper extends React.Component {
   render() {
     return (
       <ErrorBoundary>
-        <Provider store={store}>
-          <MockedProvider addTypename={false} mocks={mocks}>
-            <ThemeProvider theme={themes[this.state.themeName]}>
-              <JournalProvider journal={journal}>
-                <Router>
-                  <Root>{this.props.children}</Root>
-                </Router>
-              </JournalProvider>
-            </ThemeProvider>
-          </MockedProvider>
-        </Provider>
+        <MockedProvider addTypename={false} mocks={mocks}>
+          <ThemeProvider theme={themes[this.state.themeName]}>
+            <JournalProvider journal={journal}>
+              <Router>
+                <Root>{this.props.children}</Root>
+              </Router>
+            </JournalProvider>
+          </ThemeProvider>
+        </MockedProvider>
       </ErrorBoundary>
     )
   }
diff --git a/packages/ui/package.json b/packages/ui/package.json
index 0cd0fe5a4..0132677bb 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -27,12 +27,9 @@
     "react": "^16.2.0",
     "react-dom": "^16.2.0",
     "react-feather": "^1.0.8",
-    "react-redux": "^5.0.2",
     "react-router-dom": "^4.2.2",
     "react-tag-autocomplete": "^5.5.0",
     "recompose": "^0.26.0",
-    "redux": "^3.6.0",
-    "redux-form": "^7.0.3",
     "styled-components": "^4.1.1"
   },
   "devDependencies": {
diff --git a/packages/ui/src/atoms/ValidatedField.js b/packages/ui/src/atoms/ValidatedField.js
deleted file mode 100644
index cc795a804..000000000
--- a/packages/ui/src/atoms/ValidatedField.js
+++ /dev/null
@@ -1,61 +0,0 @@
-import React from 'react'
-import { compose, withHandlers } from 'recompose'
-import { Field } from 'redux-form'
-import styled from 'styled-components'
-import { th } from '@pubsweet/ui-toolkit'
-
-// TODO: pass ...props.input to children automatically?
-
-const MessageWrapper = styled.div`
-  font-family: ${th('fontInterface')};
-  display: block;
-  margin-top: calc(${th('gridUnit')} * -3);
-`
-
-const Message = styled.div`
-  &:not(:last-child) {
-    margin-bottom: ${th('gridUnit')};
-  }
-  font-size: ${th('fontSizeBaseSmall')};
-  line-height: ${th('lineHeightBaseSmall')};
-`
-
-const ErrorMessage = styled(Message)`
-  color: ${th('colorError')};
-`
-
-const ValidatedFieldComponent = ({ component: Component }) => ({
-  meta,
-  input,
-  ...extraProps
-}) => {
-  let validationStatus
-  if (meta.touched) validationStatus = 'success'
-  if (meta.touched && meta.error) validationStatus = 'error'
-  return (
-    <div>
-      <Component
-        {...extraProps}
-        {...input}
-        validationStatus={validationStatus}
-      />
-
-      {/* live region DOM node must be initially present for changes to be announced */}
-      <MessageWrapper role="alert">
-        {meta.touched && meta.error && (
-          <ErrorMessage>{meta.error}</ErrorMessage>
-        )}
-      </MessageWrapper>
-    </div>
-  )
-}
-
-const ValidatedField = ({ fieldComponent, ...rest }) => (
-  <Field {...rest} component={fieldComponent} />
-)
-
-export default compose(
-  withHandlers({
-    fieldComponent: ValidatedFieldComponent,
-  }),
-)(ValidatedField)
diff --git a/packages/ui/src/atoms/ValidatedField.md b/packages/ui/src/atoms/ValidatedField.md
deleted file mode 100644
index 5e7c789df..000000000
--- a/packages/ui/src/atoms/ValidatedField.md
+++ /dev/null
@@ -1,33 +0,0 @@
-A form field that displays the results of validation.
-
-With an error:
-
-```js
-const { reduxForm } = require('redux-form')
-
-const ValidatedFieldForm = reduxForm({
-  form: 'validated-field-error',
-  onChange: values => console.log(values),
-})(ValidatedField)
-;<ValidatedFieldForm
-  name="error"
-  validate={() => 'Required'}
-  component={TextField}
-/>
-```
-
-Or with success color only:
-
-```js
-const { reduxForm } = require('redux-form')
-
-const ValidatedFieldForm = reduxForm({
-  form: 'validated-field-success',
-  onChange: values => console.log(values),
-})(ValidatedField)
-;<ValidatedFieldForm
-  name="success"
-  validate={() => undefined}
-  component={TextField}
-/>
-```
diff --git a/packages/ui/src/atoms/index.js b/packages/ui/src/atoms/index.js
index b73a753fe..0d3323d9c 100644
--- a/packages/ui/src/atoms/index.js
+++ b/packages/ui/src/atoms/index.js
@@ -13,7 +13,6 @@ export { default as Tags } from './Tags'
 export { default as Tab } from './Tab'
 export { default as Spinner } from './Spinner'
 export { default as TextField } from './TextField'
-export { default as ValidatedField } from './ValidatedField'
 export { default as ValidatedFieldFormik } from './ValidatedFieldFormik'
 export { default as StateItem } from './StateItem'
 export { default as AlignmentBox } from './AlignmentBox'
-- 
GitLab