From 391b10acf2fbafa1d38e6d590cff93cadf8ab8c9 Mon Sep 17 00:00:00 2001
From: malexsan <alexandru.munt@gmail.com>
Date: Tue, 4 Dec 2018 17:37:35 +0200
Subject: [PATCH] feat(adminUsers): replace api get with a gql query

---
 packages/component-faraday-ui/package.json    |   3 +-
 .../src/modals/FormModal.js                   |  21 ++--
 packages/component-user/typeDefs.js           |  23 ++++
 packages/components-faraday/package.json      |   7 +-
 .../src/components/Admin/AdminUsers.js        |  56 ++++-----
 packages/styleguide/src/webpack-config.js     |   2 +-
 packages/xpub-faraday/config/default.js       |   5 +
 packages/xpub-faraday/package.json            |  12 +-
 .../xpub-faraday/webpack/rules.development.js |   2 +-
 .../xpub-faraday/webpack/rules.production.js  |   2 +-
 packages/xpub-faraday/webpack/rules.test.js   |   2 +-
 yarn.lock                                     | 113 +++++++++++++++++-
 12 files changed, 190 insertions(+), 58 deletions(-)

diff --git a/packages/component-faraday-ui/package.json b/packages/component-faraday-ui/package.json
index 020fd030a..a3124d61c 100644
--- a/packages/component-faraday-ui/package.json
+++ b/packages/component-faraday-ui/package.json
@@ -7,10 +7,11 @@
     "@pubsweet/ui": "^8.6.0",
     "@pubsweet/ui-toolkit": "^1.2.0",
     "country-list": "^1.1.0",
+    "formik": "^1.3.2",
     "grid-styled": "5.0.2",
     "prop-types": "^15.6.2",
     "querystring": "^0.2.0",
-    "react": "^16.4.2",
+    "react": "^16.6.0",
     "styled-components": "^3.4.2"
   }
 }
diff --git a/packages/component-faraday-ui/src/modals/FormModal.js b/packages/component-faraday-ui/src/modals/FormModal.js
index e9adb3b78..c8d4ac798 100644
--- a/packages/component-faraday-ui/src/modals/FormModal.js
+++ b/packages/component-faraday-ui/src/modals/FormModal.js
@@ -1,7 +1,6 @@
 import React, { Fragment } from 'react'
 import { get } from 'lodash'
 import styled from 'styled-components'
-import { reduxForm } from 'redux-form'
 import { th } from '@pubsweet/ui-toolkit'
 import { required } from 'xpub-validators'
 import { compose, setDisplayName, withHandlers, withProps } from 'recompose'
@@ -24,6 +23,8 @@ import {
   ItemOverrideAlert,
 } from 'pubsweet-component-faraday-ui'
 
+import { Formik } from 'formik'
+
 const AddUserForm = ({ roles, countries, titles }) => (
   <Fragment>
     <Row alignItems="baseline" mb={1} mt={1}>
@@ -177,6 +178,12 @@ const EditForm = ({ titles, countries }) => (
   </Fragment>
 )
 
+const FormikForm = () => (
+  <Formik onSubmit={(...props) => console.log(props)}>
+    {ceva => console.log(ceva) || <span onClick={ceva.handleSubmit}>gg</span>}
+  </Formik>
+)
+
 const FormModal = ({
   edit,
   user,
@@ -196,12 +203,9 @@ const FormModal = ({
   <Root>
     <IconButton icon="x" onClick={onClose} right={5} secondary top={5} />
     <H2>{title}</H2>
-    {edit && <Text secondary>{user.email}</Text>}
-    {edit ? (
-      <EditForm countries={countries} titles={titles} />
-    ) : (
-      <AddUserForm countries={countries} roles={roles} titles={titles} />
-    )}
+
+    <FormikForm />
+
     {modalError && (
       <Row mb={1}>
         <Text error>{modalError}</Text>
@@ -253,9 +257,6 @@ export default compose(
     },
     confirmText: edit ? 'EDIT USER' : 'SAVE USER',
   })),
-  reduxForm({
-    form: 'add-edit',
-  }),
   setDisplayName('FormModal'),
 )(FormModal)
 
diff --git a/packages/component-user/typeDefs.js b/packages/component-user/typeDefs.js
index d7060e75d..ac3ffd253 100644
--- a/packages/component-user/typeDefs.js
+++ b/packages/component-user/typeDefs.js
@@ -3,4 +3,27 @@ module.exports = `
     id: String!
     name: String
   }
+
+  extend type User {
+    affiliation: String
+    country: String
+    editorInChief: Boolean
+    handlingEditor: Boolean
+    isActive: Boolean
+    isConfirmed: Boolean
+    firstName: String
+    lastName: String
+    title: String
+  }
+
+  extend input UserInput {
+    firstName: String
+    lastName: String
+    title: String
+    country: String
+    affiliation: String
+    admin: Boolean
+    editorInChief: Boolean
+    handlingEditor: Boolean
+  }
 `
diff --git a/packages/components-faraday/package.json b/packages/components-faraday/package.json
index d7844c443..68ec4b8b0 100644
--- a/packages/components-faraday/package.json
+++ b/packages/components-faraday/package.json
@@ -8,15 +8,16 @@
     "@pubsweet/ui": "^8.6.0",
     "@pubsweet/ui-toolkit": "latest",
     "country-list": "^1.1.0",
+    "formik": "^1.3.2",
     "graphql-tag": "^2.10.0",
     "moment": "^2.22.1",
     "prop-types": "^15.5.10",
     "pubsweet-component-login": "^1.2.0",
-    "react": "^16.4.2",
+    "react": "^16.6.0",
     "react-apollo": "^2.3.2",
-    "react-dnd": "^2.5.4",
+    "react-dnd": "^7.0.0",
     "react-dnd-html5-backend": "^2.5.4",
-    "react-dom": "^16.1.0",
+    "react-dom": "^16.6.0",
     "react-router-dom": "^4.2.2",
     "react-tippy": "^1.2.2",
     "recompose": "^0.30.0",
diff --git a/packages/components-faraday/src/components/Admin/AdminUsers.js b/packages/components-faraday/src/components/Admin/AdminUsers.js
index 7dc07fce9..9c06664a6 100644
--- a/packages/components-faraday/src/components/Admin/AdminUsers.js
+++ b/packages/components-faraday/src/components/Admin/AdminUsers.js
@@ -1,17 +1,13 @@
 import React, { Fragment } from 'react'
 import { get } from 'lodash'
 import { Button } from '@pubsweet/ui'
-import { connect } from 'react-redux'
 import styled from 'styled-components'
 import { th } from '@pubsweet/ui-toolkit'
-import { actions } from 'pubsweet-client'
-import { ConnectPage } from 'xpub-connect'
 import { withJournal } from 'xpub-journal'
 import { compose, withHandlers, withProps } from 'recompose'
-import { getAdminUsers } from 'pubsweet-component-faraday-selectors'
-import { Query } from 'react-apollo'
-import gql from 'graphql-tag'
 
+import gql from 'graphql-tag'
+import { graphql } from 'react-apollo'
 import {
   Row,
   Text,
@@ -29,10 +25,18 @@ import { AddUser } from './'
 import { updateUserStatus, onSubmit } from './utils'
 
 const GET_USERS = gql`
-  query Users {
+  {
     users {
       id
+      admin
+      country
       username
+      lastName
+      isActive
+      firstName
+      isConfirmed
+      editorInChief
+      handlingEditor
     }
   }
 `
@@ -45,6 +49,7 @@ const Users = ({
   journal,
   getUsers,
   isFetching,
+  getUserName,
   getUserRoles,
   itemsPerPage,
   deactivateUser,
@@ -75,13 +80,6 @@ const Users = ({
       <Pagination {...rest} itemsPerPage={itemsPerPage} page={page} />
     </Row>
 
-    <Query query={GET_USERS}>
-      {({ data }) => {
-        console.log('props query', data)
-        return <span>sebi e retardat</span>
-      }}
-    </Query>
-
     <Table>
       <thead>
         <tr>
@@ -107,11 +105,7 @@ const Users = ({
         {paginatedItems.map(user => (
           <UserRow key={user.id}>
             <td>
-              <Text pl={1}>{`${get(user, 'firstName', '')} ${get(
-                user,
-                'lastName',
-                '',
-              )}`}</Text>
+              <Text pl={1}>{getUserName(user)}</Text>
             </td>
             <td colSpan={2}>
               <Text>{user.email}</Text>
@@ -165,23 +159,17 @@ const Users = ({
 )
 
 export default compose(
-  ConnectPage(() => [actions.getUsers()]),
-  connect(
-    state => ({
-      items: getAdminUsers(state),
-    }),
-    {
-      getUsers: actions.getUsers,
-    },
-  ),
   withJournal,
   withFetching,
-  withPagination,
-  withProps(({ journal: { roles = {} } }) => ({
+  graphql(GET_USERS),
+  withProps(({ journal: { roles = {} }, data: { users } }) => ({
     roles: Object.keys(roles),
+    items: users,
   })),
+  withPagination,
   withHandlers({
-    getStatusLabel: () => ({ isConfirmed, isActive = true }) => {
+    getStatusLabel: () => ({ admin, isConfirmed, isActive = true }) => {
+      if (admin) return 'ACTIVE'
       if (!isActive) {
         return 'INACTIVE'
       }
@@ -203,6 +191,12 @@ export default compose(
           handleError(setModalError)(err)
         })
     },
+    getUserName: () => user => {
+      if (user.admin) {
+        return 'Admin'
+      }
+      return `${get(user, 'firstName', '')} ${get(user, 'lastName', '')}`
+    },
     getUserRoles: ({ journal: { roles = {} } }) => user => {
       const parsedRoles = Object.entries(roles)
         .reduce((acc, role) => (user[role[0]] ? [...acc, role[1]] : acc), [])
diff --git a/packages/styleguide/src/webpack-config.js b/packages/styleguide/src/webpack-config.js
index e94d05781..b5132f279 100644
--- a/packages/styleguide/src/webpack-config.js
+++ b/packages/styleguide/src/webpack-config.js
@@ -46,7 +46,7 @@ module.exports = dir => {
             },
             // Files
             {
-              exclude: [/\.jsx?$/, /\.html$/, /\.json$/],
+              exclude: [/\.(js|jsx|mjs)$/, /\.html$/, /\.json$/],
               loader: 'file-loader',
               options: {
                 name: 'static/media/[name].[hash:8].[ext]',
diff --git a/packages/xpub-faraday/config/default.js b/packages/xpub-faraday/config/default.js
index 4bd9d05a5..295d5346f 100644
--- a/packages/xpub-faraday/config/default.js
+++ b/packages/xpub-faraday/config/default.js
@@ -5,6 +5,8 @@ const logger = require('winston')
 const components = require('./components.json')
 const journalConfig = require('../app/config/journal')
 
+const users = require('../../component-user')
+
 const getDbConfig = () => {
   if (process.env.DATABASE) {
     return {
@@ -43,8 +45,11 @@ module.exports = {
     port: 3000,
     logger,
     uploads: 'uploads',
+    secret: 'SECRET',
     enableExperimentalGraphql: true,
     graphiql: true,
+    typeDefs: `${users.typeDefs}`,
+    // resolvers,
   },
   'pubsweet-client': {
     API_ENDPOINT: '/api',
diff --git a/packages/xpub-faraday/package.json b/packages/xpub-faraday/package.json
index 7e997fbc9..fa964915f 100644
--- a/packages/xpub-faraday/package.json
+++ b/packages/xpub-faraday/package.json
@@ -32,12 +32,13 @@
     "pubsweet-client": "^6.1.0",
     "pubsweet-component-login": "^1.2.0",
     "pubsweet-server": "10.1.1",
-    "react": "^16.4.2",
-    "react-dnd": "^2.5.4",
-    "react-dnd-html5-backend": "^2.5.4",
-    "react-dom": "^16.2.0",
+    "react": "^16.6.0",
+    "react-dnd": "^7.0.0",
+    "react-dnd-html5-backend": "^7.0.0",
+    "react-dom": "^16.6.0",
     "react-router-dom": "^4.2.2",
     "recompose": "^0.30.0",
+    "formik": "^1.3.2",
     "redux": "^3.6.0",
     "redux-form": "7.0.3",
     "redux-logger": "^3.0.1",
@@ -82,7 +83,8 @@
     "start": "pubsweet start",
     "start:services": "docker-compose up postgres",
     "server": "pubsweet server",
-    "start-now": "echo $secret > config/local-development.json && npm run server",
+    "start-now":
+      "echo $secret > config/local-development.json && npm run server",
     "build": "NODE_ENV=production pubsweet build",
     "clean": "rm -rf node_modules",
     "debug": "pgrep -f startup/start.js | xargs kill -sigusr1",
diff --git a/packages/xpub-faraday/webpack/rules.development.js b/packages/xpub-faraday/webpack/rules.development.js
index 548c24f16..f2426d600 100644
--- a/packages/xpub-faraday/webpack/rules.development.js
+++ b/packages/xpub-faraday/webpack/rules.development.js
@@ -44,7 +44,7 @@ module.exports = [
 
       // files
       {
-        exclude: [/\.jsx?$/, /\.html$/, /\.json$/],
+        exclude: [/\.(js|jsx|mjs)$/, /\.html$/, /\.json$/],
         loader: 'file-loader',
         options: {
           name: 'static/media/[name].[hash:8].[ext]',
diff --git a/packages/xpub-faraday/webpack/rules.production.js b/packages/xpub-faraday/webpack/rules.production.js
index 0fe8d5b7e..56eecf0b3 100644
--- a/packages/xpub-faraday/webpack/rules.production.js
+++ b/packages/xpub-faraday/webpack/rules.production.js
@@ -49,7 +49,7 @@ module.exports = [
 
       // files
       {
-        exclude: [/\.jsx?$/, /\.html$/, /\.json$/],
+        exclude: [/\.(js|jsx|mjs)$/, /\.html$/, /\.json$/],
         loader: 'file-loader',
         options: {
           name: 'static/media/[name].[hash:8].[ext]',
diff --git a/packages/xpub-faraday/webpack/rules.test.js b/packages/xpub-faraday/webpack/rules.test.js
index 0fe8d5b7e..56eecf0b3 100644
--- a/packages/xpub-faraday/webpack/rules.test.js
+++ b/packages/xpub-faraday/webpack/rules.test.js
@@ -49,7 +49,7 @@ module.exports = [
 
       // files
       {
-        exclude: [/\.jsx?$/, /\.html$/, /\.json$/],
+        exclude: [/\.(js|jsx|mjs)$/, /\.html$/, /\.json$/],
         loader: 'file-loader',
         options: {
           name: 'static/media/[name].[hash:8].[ext]',
diff --git a/yarn.lock b/yarn.lock
index ec3a52c68..01a62f9fa 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3974,6 +3974,16 @@ dnd-core@^2.5.4:
     lodash "^4.2.0"
     redux "^3.7.1"
 
+dnd-core@^7.0.2:
+  version "7.0.2"
+  resolved "https://registry.yarnpkg.com/dnd-core/-/dnd-core-7.0.2.tgz#6c080eb57243fa0372fd083b3db242d9eb525010"
+  integrity sha512-InwRBi6zTndtE3+3nTYpLJkYMEr7utSR7OziAoSFhtQsbUfJE1KeqxM+ZFRIMKn6ehxUTAC+QU6QC7IG9u86Mg==
+  dependencies:
+    asap "^2.0.6"
+    invariant "^2.2.4"
+    lodash "^4.17.11"
+    redux "^4.0.1"
+
 dns-equal@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
@@ -5423,6 +5433,21 @@ formik@1.3.0:
     tslib "^1.9.3"
     warning "^3.0.0"
 
+formik@^1.3.2:
+  version "1.3.2"
+  resolved "https://registry.yarnpkg.com/formik/-/formik-1.3.2.tgz#f97b9e71084db4a51f7bde798584c094b3696738"
+  integrity sha512-WzKX8MGfSJTBF97oDDeP2meb2/I1bi1dLdkICmUfPB2KJ9mcdBOmsOPY8cE1cfV25ML3DzLomYsUezH+yedpvQ==
+  dependencies:
+    create-react-context "^0.2.2"
+    deepmerge "^2.1.1"
+    hoist-non-react-statics "^2.5.5"
+    lodash.clonedeep "^4.5.0"
+    lodash.topath "4.5.2"
+    prop-types "^15.6.1"
+    react-fast-compare "^1.0.0"
+    tslib "^1.9.3"
+    warning "^3.0.0"
+
 forwarded@~0.1.2:
   version "0.1.2"
   resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
@@ -6199,6 +6224,13 @@ hoist-non-react-statics@^3.0.0:
   dependencies:
     react-is "^16.3.2"
 
+hoist-non-react-statics@^3.1.0:
+  version "3.2.1"
+  resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.2.1.tgz#c09c0555c84b38a7ede6912b61efddafd6e75e1e"
+  integrity sha512-TFsu3TV3YLY+zFTZDrN8L2DTFanObwmBLpWvJs1qfUuEQ5bTAdFcwfx2T/bsCXfM9QHSLvjfP+nihEl0yvozxw==
+  dependencies:
+    react-is "^16.3.2"
+
 home-or-tmp@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
@@ -6553,7 +6585,7 @@ invariant@^2.0.0, invariant@^2.1.0, invariant@^2.2.0, invariant@^2.2.1, invarian
   dependencies:
     loose-envify "^1.0.0"
 
-invariant@^2.2.3:
+invariant@^2.2.3, invariant@^2.2.4:
   version "2.2.4"
   resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
   integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
@@ -7513,6 +7545,11 @@ js-tokens@^3.0.0, js-tokens@^3.0.2:
   resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
   integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
 
+"js-tokens@^3.0.0 || ^4.0.0":
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+  integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
 js-yaml@^3.4.3, js-yaml@^3.7.0, js-yaml@^3.9.0, js-yaml@^3.9.1:
   version "3.10.0"
   resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc"
@@ -8262,7 +8299,7 @@ lodash@4.17.5, lodash@^4, lodash@^4.0.0, lodash@^4.1.0, lodash@^4.13.1, lodash@^
   resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511"
   integrity sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==
 
-lodash@^4.17.0:
+lodash@^4.17.0, lodash@^4.17.11:
   version "4.17.11"
   resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
   integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
@@ -8316,6 +8353,13 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3
   dependencies:
     js-tokens "^3.0.0"
 
+loose-envify@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+  integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+  dependencies:
+    js-tokens "^3.0.0 || ^4.0.0"
+
 loud-rejection@^1.0.0:
   version "1.6.0"
   resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
@@ -11071,6 +11115,14 @@ react-dnd-html5-backend@^2.5.4:
   dependencies:
     lodash "^4.2.0"
 
+react-dnd-html5-backend@^7.0.0:
+  version "7.0.2"
+  resolved "https://registry.yarnpkg.com/react-dnd-html5-backend/-/react-dnd-html5-backend-7.0.2.tgz#f74181ca0ff05be13eb6094629c5ad560f558a7e"
+  integrity sha512-BPhmHeQjvhPXRykHvFLbM+TJFrrarcuf/mIArNEmXzZuNhLfbOnHtMSzR8lPwodABcDAYj7hEF7vTABXX298vA==
+  dependencies:
+    dnd-core "^7.0.2"
+    lodash "^4.17.11"
+
 react-dnd@^2.5.4:
   version "2.5.4"
   resolved "https://registry.yarnpkg.com/react-dnd/-/react-dnd-2.5.4.tgz#0b6dc5e9d0dfc2909f4f4fe736e5534f3afd1bd9"
@@ -11083,6 +11135,18 @@ react-dnd@^2.5.4:
     lodash "^4.2.0"
     prop-types "^15.5.10"
 
+react-dnd@^7.0.0:
+  version "7.0.2"
+  resolved "https://registry.yarnpkg.com/react-dnd/-/react-dnd-7.0.2.tgz#8f5611a6e877592932c082d6280c64d1c817f420"
+  integrity sha512-nJnHJo/tNQjyod234+hPNopWHPvgH0gujf3pcdJWRe3l0GL+jSXXwXJ2SFwIHkVmxPYrx8+gbKU3+Pq26p6fkg==
+  dependencies:
+    dnd-core "^7.0.2"
+    hoist-non-react-statics "^3.1.0"
+    invariant "^2.1.0"
+    lodash "^4.17.11"
+    recompose "^0.30.0"
+    shallowequal "^1.1.0"
+
 react-docgen-annotation-resolver@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/react-docgen-annotation-resolver/-/react-docgen-annotation-resolver-1.0.0.tgz#abbb343698b3b319537142082b6bb7d835fe2f1f"
@@ -11116,7 +11180,7 @@ react-dom@^15.6.1:
     object-assign "^4.1.0"
     prop-types "^15.5.10"
 
-react-dom@^16.1.0, react-dom@^16.2.0:
+react-dom@^16.2.0:
   version "16.2.0"
   resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044"
   integrity sha512-zpGAdwHVn9K0091d+hr+R0qrjoJ84cIBFL2uU60KvWBPfZ7LPSrfqviTxGHWN0sjPZb2hxWzMexwrvJdKePvjg==
@@ -11126,6 +11190,16 @@ react-dom@^16.1.0, react-dom@^16.2.0:
     object-assign "^4.1.1"
     prop-types "^15.6.0"
 
+react-dom@^16.6.0:
+  version "16.6.3"
+  resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.6.3.tgz#8fa7ba6883c85211b8da2d0efeffc9d3825cccc0"
+  integrity sha512-8ugJWRCWLGXy+7PmNh8WJz3g1TaTUt1XyoIcFN+x0Zbkoz+KKdUyx1AQLYJdbFXjuF41Nmjn5+j//rxvhFjgSQ==
+  dependencies:
+    loose-envify "^1.1.0"
+    object-assign "^4.1.1"
+    prop-types "^15.6.2"
+    scheduler "^0.11.2"
+
 react-error-overlay@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-4.0.0.tgz#d198408a85b4070937a98667f500c832f86bd5d4"
@@ -11355,6 +11429,16 @@ react@^16.4.2:
     object-assign "^4.1.1"
     prop-types "^15.6.0"
 
+react@^16.6.0:
+  version "16.6.3"
+  resolved "https://registry.yarnpkg.com/react/-/react-16.6.3.tgz#25d77c91911d6bbdd23db41e70fb094cc1e0871c"
+  integrity sha512-zCvmH2vbEolgKxtqXL2wmGCUxUyNheYn/C+PD1YAjfxHC54+MhdruyhO7QieQrYsYeTxrn93PM2y0jRH1zEExw==
+  dependencies:
+    loose-envify "^1.1.0"
+    object-assign "^4.1.1"
+    prop-types "^15.6.2"
+    scheduler "^0.11.2"
+
 read-cmd-shim@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz#2d5d157786a37c055d22077c32c53f8329e91c7b"
@@ -11621,6 +11705,14 @@ redux@^3.6.0, redux@^3.7.1:
     loose-envify "^1.1.0"
     symbol-observable "^1.0.3"
 
+redux@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.1.tgz#436cae6cc40fbe4727689d7c8fae44808f1bfef5"
+  integrity sha512-R7bAtSkk7nY6O/OYMVR9RiBI+XghjF9rlbl5806HJbQph0LJVHZrU5oaO4q70eUKiqMRqm4y07KLTlMZ2BlVmg==
+  dependencies:
+    loose-envify "^1.4.0"
+    symbol-observable "^1.2.0"
+
 referrer-policy@1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/referrer-policy/-/referrer-policy-1.1.0.tgz#35774eb735bf50fb6c078e83334b472350207d79"
@@ -12225,6 +12317,14 @@ sax@>=0.6.0, sax@^1.2.4, sax@~1.2.1:
   resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
   integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
 
+scheduler@^0.11.2:
+  version "0.11.3"
+  resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.11.3.tgz#b5769b90cf8b1464f3f3cfcafe8e3cd7555a2d6b"
+  integrity sha512-i9X9VRRVZDd3xZw10NY5Z2cVMbdYg6gqFecfj79USv1CFN+YrJ3gIPRKf1qlY+Sxly4djoKdfx1T+m9dnRB8kQ==
+  dependencies:
+    loose-envify "^1.1.0"
+    object-assign "^4.1.1"
+
 schema-utils@^0.3.0:
   version "0.3.0"
   resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf"
@@ -12413,6 +12513,11 @@ shallow-clone@^1.0.0:
     kind-of "^5.0.0"
     mixin-object "^2.0.1"
 
+shallowequal@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
+  integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
+
 shebang-command@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
@@ -13238,7 +13343,7 @@ symbol-observable@^0.2.2:
   resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40"
   integrity sha1-lag9smGG1q9+ehjb2XYKL4bQj0A=
 
-symbol-observable@^1.0.2, symbol-observable@^1.0.3, symbol-observable@^1.0.4, symbol-observable@^1.1.0:
+symbol-observable@^1.0.2, symbol-observable@^1.0.3, symbol-observable@^1.0.4, symbol-observable@^1.1.0, symbol-observable@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
   integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
-- 
GitLab