diff --git a/packages/components-faraday/src/components/Admin/AddEditUser.js b/packages/components-faraday/src/components/Admin/AddEditUser.js index 73da41f467687462474ce99641d919a682b0a6de..1d487d28f91576f8240e48a15368d22b38605f0f 100644 --- a/packages/components-faraday/src/components/Admin/AddEditUser.js +++ b/packages/components-faraday/src/components/Admin/AddEditUser.js @@ -4,6 +4,7 @@ import { connect } from 'react-redux' import { reduxForm } from 'redux-form' import styled from 'styled-components' import { actions } from 'pubsweet-client' +import { create } from 'pubsweet-client/src/helpers/api' import { withJournal } from 'xpub-journal' import { ConnectPage } from 'xpub-connect' import { selectUser } from 'xpub-selectors' @@ -16,6 +17,15 @@ import EditUserForm from './EditUserForm' const getRoleOptions = journal => map(journal.roles, (value, key) => ({ label: value, value: key })) +const onSubmit = (values, dispatch, { isEdit }) => { + if (!isEdit) { + create('/users/invite', values).then( + r => r, + // err => console.log(err), + ) + } +} + const AddEditUser = ({ handleSubmit, journal, isEdit, user }) => ( <Root> <FormContainer onSubmit={handleSubmit}> @@ -54,7 +64,7 @@ export default compose( withProps(({ user }) => ({ initialValues: user })), reduxForm({ form: 'userManagement', - onSubmit: values => values, + onSubmit, }), )(AddEditUser) diff --git a/packages/components-faraday/src/components/Admin/Admin.js b/packages/components-faraday/src/components/Admin/Admin.js index 4d32f9f9f52c789b2213b9fb7eef5c6eed29ab29..023333aa86afe52d50e160e46185793e4cb59428 100644 --- a/packages/components-faraday/src/components/Admin/Admin.js +++ b/packages/components-faraday/src/components/Admin/Admin.js @@ -4,102 +4,6 @@ import { Icon, Menu } from '@pubsweet/ui' import { Pagination } from './' -const AddButton = styled.button` - align-items: center; - border: none; - cursor: pointer; - display: flex; - font-family: Helvetica; - font-size: 12px; - text-align: left; - color: #667080; - - &:active, - &:focus { - outline: none; - } -` - -const Header = styled.div` - display: flex; - flex-direction: row; - align-items: center; - - & span { - font-family: Helvetica; - font-size: 24px; - font-weight: bold; - text-align: left; - color: #667080; - } -` - -const SubHeader = styled.div` - align-items: center; - border-bottom: 1px solid #667080; - display: flex; - flex-direction: row; - justify-content: space-between; - margin-top: 20px; - padding-bottom: 10px; - - > div:first-child { - display: flex; - align-items: center; - } - - span { - font-family: Helvetica; - font-size: 14px; - text-align: left; - color: #667080; - } -` - -const Table = styled.table` - border-spacing: 0; - border-collapse: collapse; - margin-top: 10px; - width: 100vw; - - & thead tr { - height: 40px; - border-bottom: 1px solid #667080; - font-family: Helvetica; - font-size: 14px; - font-weight: bold; - text-align: left; - color: #667080; - } -` - -const Row = styled.tr` - border-bottom: 1px solid #667080; - color: #667080; - font-family: Helvetica; - font-size: 14px; - height: 40px; - text-align: left; -` - -const Status = styled.td` - & span { - border: solid 1px #667080; - text-transform: uppercase; - font-family: Helvetica; - font-size: 12px; - font-weight: bold; - text-align: left; - color: #667080; - padding: 2px 10px; - } -` - -const Input = styled.input` - height: 20px; - width: 20px; -` - const TableRow = ({ toggleUser, selected, email, username, type }) => ( <Row> <td> @@ -195,3 +99,99 @@ const Admin = ({ ) export default Admin + +const AddButton = styled.button` + align-items: center; + border: none; + cursor: pointer; + display: flex; + font-family: Helvetica; + font-size: 12px; + text-align: left; + color: #667080; + + &:active, + &:focus { + outline: none; + } +` + +const Header = styled.div` + display: flex; + flex-direction: row; + align-items: center; + + & span { + font-family: Helvetica; + font-size: 24px; + font-weight: bold; + text-align: left; + color: #667080; + } +` + +const SubHeader = styled.div` + align-items: center; + border-bottom: 1px solid #667080; + display: flex; + flex-direction: row; + justify-content: space-between; + margin-top: 20px; + padding-bottom: 10px; + + > div:first-child { + display: flex; + align-items: center; + } + + span { + font-family: Helvetica; + font-size: 14px; + text-align: left; + color: #667080; + } +` + +const Table = styled.table` + border-spacing: 0; + border-collapse: collapse; + margin-top: 10px; + width: 100vw; + + & thead tr { + height: 40px; + border-bottom: 1px solid #667080; + font-family: Helvetica; + font-size: 14px; + font-weight: bold; + text-align: left; + color: #667080; + } +` + +const Row = styled.tr` + border-bottom: 1px solid #667080; + color: #667080; + font-family: Helvetica; + font-size: 14px; + height: 40px; + text-align: left; +` + +const Status = styled.td` + & span { + border: solid 1px #667080; + text-transform: uppercase; + font-family: Helvetica; + font-size: 12px; + font-weight: bold; + text-align: left; + color: #667080; + padding: 2px 10px; + } +` + +const Input = styled.input` + height: 20px; + width: 20px; +` diff --git a/packages/components-faraday/src/components/Admin/AdminDashboard.js b/packages/components-faraday/src/components/Admin/AdminDashboard.js new file mode 100644 index 0000000000000000000000000000000000000000..c158ada275d31b30da07ed2d1a520d9c8733b958 --- /dev/null +++ b/packages/components-faraday/src/components/Admin/AdminDashboard.js @@ -0,0 +1,76 @@ +import React from 'react' +import { Icon } from '@pubsweet/ui' +import styled from 'styled-components' +import { withRouter } from 'react-router-dom' + +const AdminDashboard = ({ history }) => ( + <Root> + <Title>Admin Dashboard</Title> + <CardContainer> + <Card> + <Icon color="#667080" size={32}> + edit + </Icon> + <span>Journal configuration</span> + </Card> + <Card onClick={() => history.push('/admin/users')}> + <Icon color="#667080" size={32}> + users + </Icon> + <span>Users</span> + </Card> + <Card> + <Icon color="#667080" size={32}> + settings + </Icon> + <span>Roles</span> + </Card> + </CardContainer> + </Root> +) + +const Root = styled.div` + display: flex; + flex-direction: column; + padding: 0 12px; +` + +const Title = styled.span` + color: #667080; + font-family: Helvetica; + font-size: 24px; + font-weight: bold; + text-align: left; +` + +const CardContainer = styled.div` + display: flex; + flex-wrap: wrap; + margin-top: 24px; +` + +const Card = styled.div` + align-items: center; + border: 1px solid #979797; + cursor: pointer; + display: flex; + flex-direction: column; + justify-content: center; + height: 160px; + margin: 0 25px 25px 0; + width: 210px; + + &:hover { + background-color: #ddd; + } + + > span { + color: #667080; + font-family: Helvetica; + font-size: 18px; + margin-top: 10px; + text-align: center; + } +` + +export default withRouter(AdminDashboard) diff --git a/packages/components-faraday/src/components/Admin/index.js b/packages/components-faraday/src/components/Admin/index.js index 4f1e2831e6e6710d184684b30b4257f9493ea47a..d57c7f72d0204105e10c497c80f16609581eb012 100644 --- a/packages/components-faraday/src/components/Admin/index.js +++ b/packages/components-faraday/src/components/Admin/index.js @@ -1,4 +1,3 @@ -import AdminPage from './AdminPage' - -export default AdminPage +export { default as AdminUsers } from './AdminPage' export { default as Pagination } from './Pagination' +export { default as AdminDashboard } from './AdminDashboard' diff --git a/packages/components-faraday/src/components/AppBar/AppBar.js b/packages/components-faraday/src/components/AppBar/AppBar.js index 3ca92d4e133e27f84d3dd2c592248498b38d8d8c..585a9c1179292476496e988cdebd487cd8266313 100644 --- a/packages/components-faraday/src/components/AppBar/AppBar.js +++ b/packages/components-faraday/src/components/AppBar/AppBar.js @@ -6,7 +6,9 @@ import { withState, withHandlers, compose } from 'recompose' const AppBar = ({ expanded, toggleMenu, brand, user, goTo }) => ( <Root> - {brand} + {React.cloneElement(brand, { + onClick: goTo('/'), + })} {user && ( <User> <div onClick={toggleMenu}> diff --git a/packages/components-faraday/src/components/SignUp/SignUpInvitationPage.js b/packages/components-faraday/src/components/SignUp/SignUpInvitationPage.js index 5a4164c173dc64ba312f4c62eb1f32e05eca47f6..728f547710f6fb0379fc2b41c3a78c72f57e5f70 100644 --- a/packages/components-faraday/src/components/SignUp/SignUpInvitationPage.js +++ b/packages/components-faraday/src/components/SignUp/SignUpInvitationPage.js @@ -1,20 +1,31 @@ import { withJournal } from 'xpub-journal' +import { create } from 'pubsweet-client/src/helpers/api' import { compose, withState, withProps, withHandlers } from 'recompose' import SignUpInvitation from './SignUpInvitationForm' +const confirmUser = (email, token) => (values, dispatch, { history }) => { + const request = { ...values, email, token } + if (values) { + create('/users/invite/password/reset', request).then( + r => history.push('/'), + // err => console.log(err), + ) + } +} + export default compose( withJournal, withState('step', 'changeStep', 0), - withHandlers({ - nextStep: ({ changeStep }) => () => changeStep(step => step + 1), - prevStep: ({ changeStep }) => () => changeStep(step => step - 1), - submitConfirmation: () => values => values, - }), withProps(({ location }) => { const params = new URLSearchParams(location.search) const email = params.get('email') const token = params.get('token') return { email, token } }), + withHandlers({ + nextStep: ({ changeStep }) => () => changeStep(step => step + 1), + prevStep: ({ changeStep }) => () => changeStep(step => step - 1), + submitConfirmation: ({ email, token }) => confirmUser(email, token), + }), )(SignUpInvitation) diff --git a/packages/components-faraday/src/components/UIComponents/Logo.js b/packages/components-faraday/src/components/UIComponents/Logo.js index 3f1557e5409e81d88ee5390e59679a898dd290e5..c13036c24def5a3eeb234d2ce9b288973d0e25a1 100644 --- a/packages/components-faraday/src/components/UIComponents/Logo.js +++ b/packages/components-faraday/src/components/UIComponents/Logo.js @@ -1,7 +1,9 @@ import React from 'react' -const Logo = ({ srcUrl }) => ( - <img alt="Hindawi" height="36" src={srcUrl} title="Hindawi" /> +const Logo = ({ srcUrl, onClick }) => ( + <div onClick={onClick}> + <img alt="Hindawi" height="36" src={srcUrl} title="Hindawi" /> + </div> ) export default Logo diff --git a/packages/xpub-faraday/app/FaradayApp.js b/packages/xpub-faraday/app/FaradayApp.js index b0d85d593e9c724617969260771a2fd07000812b..0ceec8097357dbede9310136caf0dd82869d2972 100644 --- a/packages/xpub-faraday/app/FaradayApp.js +++ b/packages/xpub-faraday/app/FaradayApp.js @@ -9,15 +9,6 @@ import { AppBar } from 'pubsweet-components-faraday/src/components' const App = ({ children, currentUser, journal }) => ( <Root> <AppBar brand={journal.metadata.name} user={currentUser} /> - {/* <AppBar - brandLink="/" - brandName={journal.metadata.name} - loginLink="/login" - logo={journal.metadata.logo} - logoutLink="/logout" - userName={currentUser ? currentUser.username : null} - /> */} - <MainContainer>{children}</MainContainer> </Root> ) @@ -28,7 +19,7 @@ const Root = styled.div` const MainContainer = styled.div` padding: 8px; - margin-top: 50px; + margin-top: 20px; ` export default compose( diff --git a/packages/xpub-faraday/app/routes.js b/packages/xpub-faraday/app/routes.js index 05f92a9889f4a4f38ec15c69f492dd0a227dbdbf..c4802e9396471e7f719a20904d844d4b8f0d4cce 100644 --- a/packages/xpub-faraday/app/routes.js +++ b/packages/xpub-faraday/app/routes.js @@ -14,7 +14,10 @@ import { Wizard } from 'pubsweet-component-wizard/src/components' import ManuscriptPage from 'pubsweet-component-xpub-manuscript/src/components/ManuscriptPage' import ConfirmationPage from 'pubsweet-components-faraday/src/components/UIComponents/ConfirmationPage' import NotFound from 'pubsweet-components-faraday/src/components/UIComponents/NotFound' -import AdminPage from 'pubsweet-components-faraday/src/components/Admin' +import { + AdminDashboard, + AdminUsers, +} from 'pubsweet-components-faraday/src/components/Admin' import AddEditUser from 'pubsweet-components-faraday/src/components/Admin/AddEditUser' import SignUpInvitationPage from 'pubsweet-components-faraday/src/components/SignUp/SignUpInvitationPage' @@ -31,7 +34,8 @@ const Routes = () => ( exact path="/confirmation-page" /> - <PrivateRoute component={AdminPage} exact path="/admin" /> + <PrivateRoute component={AdminDashboard} exact path="/admin" /> + <PrivateRoute component={AdminUsers} exact path="/admin/users" /> <PrivateRoute component={AddEditUser} exact path="/admin/users/add" /> <PrivateRoute component={AddEditUser} @@ -39,7 +43,6 @@ const Routes = () => ( path="/admin/users/edit/:userId" /> <PrivateRoute component={LogoutPage} exact path="/logout" /> - <PrivateRoute component={SignUpInvitationPage} exact path="/invite" /> <PrivateRoute component={Wizard} exact @@ -50,6 +53,7 @@ const Routes = () => ( exact path="/projects/:project/versions/:version/manuscript" /> + <Route component={SignUpInvitationPage} exact path="/invite" /> <Route component={NotFound} /> </Switch> </FaradayApp> diff --git a/packages/xpub-faraday/config/default.js b/packages/xpub-faraday/config/default.js index b5acdae84239af709cacddfc81852a9fb7d37b62..dcab7794e79dc3521cc7e72e98109bed99dcdb1f 100644 --- a/packages/xpub-faraday/config/default.js +++ b/packages/xpub-faraday/config/default.js @@ -25,7 +25,7 @@ module.exports = { 'pubsweet-client': { API_ENDPOINT: '/api', 'login-redirect': '/', - 'redux-log': true, + 'redux-log': false, theme: process.env.PUBSWEET_THEME, }, 'mail-transport': { diff --git a/packages/xpub-faraday/package.json b/packages/xpub-faraday/package.json index f344bc49ec85ca3a6bcc1dff01299b0c19211e00..d77e882622dce55df0caf84bd064b79c94fe289c 100644 --- a/packages/xpub-faraday/package.json +++ b/packages/xpub-faraday/package.json @@ -21,7 +21,6 @@ "prop-types": "^15.5.10", "pubsweet": "^1.1.1", "pubsweet-client": "^1.1.1", - "pubsweet-component-admin": "^0.0.1", "pubsweet-component-ink-backend": "^0.1.1", "pubsweet-component-ink-frontend": "^0.2.3", "pubsweet-component-xpub-app": "^0.0.2",