From fbdb6e69f8acc2832f89c61494efabb724d1b846 Mon Sep 17 00:00:00 2001 From: Alexandru Munteanu <alexandru.munt@gmail.com> Date: Thu, 5 Jul 2018 12:50:09 +0300 Subject: [PATCH] feat(author-confirm): show notification bar untill author has confirmed --- .../component-faraday-selectors/src/index.js | 4 + .../src/components/AppBar/AppBar.js | 139 +++++++++++------- .../src/components/Dashboard/Dashboard.js | 4 +- .../src/components/Dashboard/DashboardPage.js | 1 + packages/xpub-faraday/app/FaradayApp.js | 8 +- 5 files changed, 96 insertions(+), 60 deletions(-) diff --git a/packages/component-faraday-selectors/src/index.js b/packages/component-faraday-selectors/src/index.js index ad0747cc0..bdb821d5a 100644 --- a/packages/component-faraday-selectors/src/index.js +++ b/packages/component-faraday-selectors/src/index.js @@ -97,3 +97,7 @@ export const getUserPermissions = ({ currentUser }) => objectType: t.object.type, role: t.teamType.permissions, })) + +export const isAuthorConfirmed = ({ currentUser }) => + !currentUserIs({ currentUser }, 'staff') && + get(currentUser, 'user.isConfirmed') diff --git a/packages/components-faraday/src/components/AppBar/AppBar.js b/packages/components-faraday/src/components/AppBar/AppBar.js index 9c04e8949..ad8a6eacc 100644 --- a/packages/components-faraday/src/components/AppBar/AppBar.js +++ b/packages/components-faraday/src/components/AppBar/AppBar.js @@ -4,65 +4,112 @@ import { connect } from 'react-redux' import { Icon, th } from '@pubsweet/ui' import { withRouter } from 'react-router-dom' import styled, { withTheme } from 'styled-components' -import { withState, withHandlers, compose } from 'recompose' +import { withState, withHandlers, withProps, compose } from 'recompose' + +import { currentUserIs } from '../../../../component-faraday-selectors/src' const AppBar = ({ + goTo, + user, + brand, + theme, expanded, toggleMenu, - brand, - user, - goTo, currentUser, onLogoutClick, - theme, + shouldShowConfirmation, }) => ( - <Root> - <Brand> - {React.cloneElement(brand, { - onClick: goTo('/'), - })} - </Brand> - {user && ( - <User> - <div onClick={toggleMenu}> - <Icon color={theme.colorText}>user</Icon> - <span> - {get(user, 'firstName') || get(user, 'username') || 'User'} - </span> - <Icon color={theme.colorText}>chevron-down</Icon> - </div> - {expanded && ( - <Dropdown> - <DropdownOption>Settings</DropdownOption> - {currentUser.admin && ( - <DropdownOption onClick={goTo('/admin')}> - Admin dashboard - </DropdownOption> - )} - <DropdownOption onClick={onLogoutClick}>Logout</DropdownOption> - </Dropdown> - )} - </User> + <Root className="appbar"> + <Row bordered className="row"> + <Brand> + {React.cloneElement(brand, { + onClick: goTo('/'), + })} + </Brand> + {user && ( + <User> + <div onClick={toggleMenu}> + <Icon color={theme.colorText}>user</Icon> + <span> + {get(user, 'firstName') || get(user, 'username') || 'User'} + </span> + <Icon color={theme.colorText}>chevron-down</Icon> + </div> + {expanded && ( + <Dropdown> + <DropdownOption>Settings</DropdownOption> + {currentUser.admin && ( + <DropdownOption onClick={goTo('/admin')}> + Admin dashboard + </DropdownOption> + )} + <DropdownOption onClick={onLogoutClick}>Logout</DropdownOption> + </Dropdown> + )} + </User> + )} + </Row> + {shouldShowConfirmation && ( + <Row bgColor="salmon" centered className="row"> + <ConfirmationText> + Your author account is not confirmed. Check your email. + </ConfirmationText> + </Row> )} {expanded && <ToggleOverlay onClick={toggleMenu} />} </Root> ) +export default compose( + withRouter, + withTheme, + connect(state => ({ + currentUser: get(state, 'currentUser.user'), + isStaff: currentUserIs(state, 'staff'), + })), + withState('expanded', 'setExpanded', false), + withHandlers({ + toggleMenu: ({ setExpanded }) => () => { + setExpanded(v => !v) + }, + goTo: ({ setExpanded, history }) => path => () => { + setExpanded(v => false) + history.push(path) + }, + }), + withProps(({ isStaff, currentUser }) => ({ + shouldShowConfirmation: !isStaff && !get(currentUser, 'isConfirmed'), + })), +)(AppBar) + // #region styled-components const Root = styled.div` align-items: center; - box-shadow: ${th('dropShadow')}; + background-color: #ffffff; font-family: ${th('fontInterface')}; display: flex; - justify-content: space-between; - height: 60px; + flex-direction: column; flex-grow: 1; + width: 100vw; + position: fixed; - width: 100%; + top: 0; z-index: 10; - background-color: #ffffff; ` +const Row = styled.div` + align-items: center; + align-self: stretch; + background-color: ${({ bgColor }) => bgColor || 'transparent'}; + box-shadow: ${({ bordered }) => (bordered ? th('dropShadow') : 'none')}; + display: flex; + justify-content: ${({ centered }) => + centered ? 'center' : 'space-between;'}; +` + +const ConfirmationText = styled.span` + font-size: ${th('fontSizeBaseSmall')}; +` const Brand = styled.div` padding: 10px 20px; cursor: pointer; @@ -126,21 +173,3 @@ const ToggleOverlay = styled.div` opacity: 0; ` // #endregion - -export default compose( - withRouter, - withTheme, - connect(state => ({ - currentUser: get(state, 'currentUser.user'), - })), - withState('expanded', 'setExpanded', false), - withHandlers({ - toggleMenu: ({ setExpanded }) => () => { - setExpanded(v => !v) - }, - goTo: ({ setExpanded, history }) => path => () => { - setExpanded(v => false) - history.push(path) - }, - }), -)(AppBar) diff --git a/packages/components-faraday/src/components/Dashboard/Dashboard.js b/packages/components-faraday/src/components/Dashboard/Dashboard.js index 9a368a487..e40141b33 100644 --- a/packages/components-faraday/src/components/Dashboard/Dashboard.js +++ b/packages/components-faraday/src/components/Dashboard/Dashboard.js @@ -7,6 +7,7 @@ import { DashboardItems, DashboardFilters } from './' const Dashboard = ({ dashboard, + currentUser, filterItems, filterValues, deleteProject, @@ -16,7 +17,7 @@ const Dashboard = ({ getDefaultFilterValue, createDraftSubmission, }) => ( - <Root> + <Root className="dashboard"> <Header> <Heading>Manuscripts</Heading> <HeaderButtons> @@ -50,6 +51,7 @@ const Root = styled.div` flex-direction: column; margin: auto; max-width: 60em; + overflow: auto; ` const Header = styled.div` diff --git a/packages/components-faraday/src/components/Dashboard/DashboardPage.js b/packages/components-faraday/src/components/Dashboard/DashboardPage.js index 999e87de3..7dc3702ac 100644 --- a/packages/components-faraday/src/components/Dashboard/DashboardPage.js +++ b/packages/components-faraday/src/components/Dashboard/DashboardPage.js @@ -37,6 +37,7 @@ export default compose( reviewer => reviewer && reviewer.user === currentUser.id, ), ), + all: sortedCollections, } const userPermissions = getUserPermissions(state) diff --git a/packages/xpub-faraday/app/FaradayApp.js b/packages/xpub-faraday/app/FaradayApp.js index 8938b7556..ae333761c 100644 --- a/packages/xpub-faraday/app/FaradayApp.js +++ b/packages/xpub-faraday/app/FaradayApp.js @@ -7,13 +7,13 @@ import { withJournal } from 'xpub-journal' import { AppBar } from 'pubsweet-components-faraday/src/components' const App = ({ children, currentUser, journal, logoutUser }) => ( - <Root> + <Root className="faraday-root"> <AppBar brand={journal.metadata.name} onLogoutClick={logoutUser} user={currentUser} /> - <MainContainer>{children}</MainContainer> + <MainContainer className="faraday-main">{children}</MainContainer> </Root> ) @@ -35,7 +35,7 @@ const Root = styled.div` ` const MainContainer = styled.div` - padding: 90px 10px 40px; - min-height: 100vh; background-color: ${props => props.theme.backgroundColor || '#fff'}; + padding: 110px 10px 0 10px; + height: 100vh; ` -- GitLab