Skip to content
This repository has been archived by the owner on Nov 17, 2023. It is now read-only.

Commit

Permalink
feat(ui): implement new settings menu design
Browse files Browse the repository at this point in the history
  • Loading branch information
mrfelton committed May 29, 2019
1 parent ab23709 commit b450031
Show file tree
Hide file tree
Showing 15 changed files with 113 additions and 297 deletions.
35 changes: 0 additions & 35 deletions renderer/components/Settings/SettingsMenu/Fiat/Fiat.js

This file was deleted.

3 changes: 0 additions & 3 deletions renderer/components/Settings/SettingsMenu/Fiat/index.js

This file was deleted.

6 changes: 0 additions & 6 deletions renderer/components/Settings/SettingsMenu/Fiat/messages.js

This file was deleted.

42 changes: 0 additions & 42 deletions renderer/components/Settings/SettingsMenu/Locale/Locale.js

This file was deleted.

3 changes: 0 additions & 3 deletions renderer/components/Settings/SettingsMenu/Locale/index.js

This file was deleted.

6 changes: 0 additions & 6 deletions renderer/components/Settings/SettingsMenu/Locale/messages.js

This file was deleted.

48 changes: 0 additions & 48 deletions renderer/components/Settings/SettingsMenu/Menu/Menu.js

This file was deleted.

3 changes: 0 additions & 3 deletions renderer/components/Settings/SettingsMenu/Menu/index.js

This file was deleted.

10 changes: 0 additions & 10 deletions renderer/components/Settings/SettingsMenu/Menu/messages.js

This file was deleted.

193 changes: 99 additions & 94 deletions renderer/components/Settings/SettingsMenu/SettingsMenu.js
@@ -1,114 +1,119 @@
import React from 'react' import React from 'react'
import PropTypes from 'prop-types' import PropTypes from 'prop-types'
import { Box, Flex } from 'rebass' import { withRouter } from 'react-router-dom'
import styled from 'styled-components' import { FormattedMessage } from 'react-intl'
import { StatusIndicator, Text } from 'components/UI' import { getLanguageName } from '@zap/i18n'
import { Flex } from 'rebass'
import { Dropmenu, StatusIndicator } from 'components/UI'
import { WalletName } from 'components/Util' import { WalletName } from 'components/Util'
import AngleUp from 'components/Icon/AngleUp' import Logout from 'components/Icon/Logout'
import AngleDown from 'components/Icon/AngleDown' import Settings from 'components/Icon/Settings'
import Menu from './Menu' import messages from './messages'
import Fiat from './Fiat'
import Locale from './Locale'
import Theme from './Theme'


const StyledText = styled(Text)` const buildLocaleMenu = localeProps => {
cursor: pointer; const { locales, setLocale, currentLocale } = localeProps
transition: all 0.25s; return Object.keys(locales).map(lang => {
&:hover { return {
opacity: 0.6; id: `locale-${lang}`,
} title: getLanguageName(lang),
` onClick: () => setLocale(lang),

isSelected: currentLocale === lang,
class SettingsMenu extends React.Component { hasIndent: true,
menuRef = React.createRef()
buttonRef = React.createRef()

componentDidMount() {
document.addEventListener('mousedown', this.handleClickOutside)
}

componentWillUnmount() {
document.removeEventListener('mousedown', this.handleClickOutside)
}

setButtonRef = node => {
this.buttonRef = node
}

setWrapperRef = node => {
this.menuRef = node
}

handleButtonClick = event => {
const { isSettingsMenuOpen, closeSettingsMenu, openSettingsMenu } = this.props
if (this.buttonRef && this.buttonRef.contains(event.target)) {
isSettingsMenuOpen ? closeSettingsMenu() : openSettingsMenu()
} }
} })
}


handleClickOutside = event => { const buildThemeMenu = themeProps => {
const { isSettingsMenuOpen, closeSettingsMenu } = this.props const { themes, setTheme, currentTheme } = themeProps
if ( return Object.keys(themes).map(theme => {
isSettingsMenuOpen && return {
this.menuRef && id: `currency-${theme}`,
!this.menuRef.contains(event.target) && title: <FormattedMessage {...messages[`theme_option_${theme}`]} />,
(this.buttonRef && !this.buttonRef.contains(event.target)) onClick: () => setTheme(theme),
) { isSelected: currentTheme === theme,
closeSettingsMenu() hasIndent: true,
} }
} })
}


renderSettingsMenu = () => { const buildCurrencyMenu = fiatProps => {
const { const { fiatTickers, setFiatTicker, fiatTicker } = fiatProps
activeSubMenu, return fiatTickers.map(currency => {
fiatProps, return {
localeProps, id: `currency-${currency}`,
themeProps, title: currency,
setActiveSubMenu, onClick: () => setFiatTicker(currency),
openModal, isSelected: fiatTicker === currency,
} = this.props hasIndent: true,
switch (activeSubMenu) {
case 'fiat':
return <Fiat {...fiatProps} />
case 'locale':
return <Locale {...localeProps} />
case 'theme':
return <Theme {...themeProps} />
default:
return <Menu openModal={openModal} setActiveSubMenu={setActiveSubMenu} />
} }
} })
}

const SettingsMenu = ({
localeProps,
themeProps,
fiatProps,
activeWalletSettings,
openModal,
history,
...rest
}) => {
const logout = () => history.push('/logout')
const openSettings = () => openModal('SETTINGS_FORM')


render() { const items = [
const { activeWalletSettings, isSettingsMenuOpen, ...rest } = this.props {
id: 'logout',
title: (
<FormattedMessage
{...messages[activeWalletSettings.type === 'local' ? 'logout_title' : 'disconnect_title']}
/>
),
icon: <Logout />,
onClick: logout,
},
{
id: 'settings',
title: <FormattedMessage {...messages.settings_title} />,
icon: <Settings />,
onClick: openSettings,
},
{ id: 'bar1', type: 'bar' },
{
id: 'locale',
title: <FormattedMessage {...messages.locale_title} />,
submenu: buildLocaleMenu(localeProps),
},
{
id: 'theme',
title: <FormattedMessage {...messages.theme_title} />,
submenu: buildThemeMenu(themeProps),
},
{
id: 'currency',
title: <FormattedMessage {...messages.currency_title} />,
submenu: buildCurrencyMenu(fiatProps),
},
]


return ( return (
<Box {...rest}> <Dropmenu items={items} justify="right" {...rest}>
<Flex <Flex alignItems="center">
ref={this.setButtonRef} <StatusIndicator mr={2} variant="online" />
alignItems="center" <WalletName wallet={activeWalletSettings} />
css={{ cursor: 'pointer' }} </Flex>
onClick={this.handleButtonClick} </Dropmenu>
> )
<StatusIndicator mr={2} variant="online" />
<Flex alignItems="center">
<StyledText mr={1} textAlign="left">
<WalletName wallet={activeWalletSettings} />
</StyledText>
{isSettingsMenuOpen ? <AngleUp width="0.6em" /> : <AngleDown width="0.6em" />}
</Flex>
</Flex>
{isSettingsMenuOpen && <Box ref={this.setWrapperRef}>{this.renderSettingsMenu()}</Box>}
</Box>
)
}
} }


SettingsMenu.propTypes = { SettingsMenu.propTypes = {
activeSubMenu: PropTypes.string, activeSubMenu: PropTypes.string,
activeWalletSettings: PropTypes.object, activeWalletSettings: PropTypes.object,
closeSettingsMenu: PropTypes.func.isRequired, closeSettingsMenu: PropTypes.func.isRequired,
fiatProps: PropTypes.object.isRequired, fiatProps: PropTypes.object.isRequired,
history: PropTypes.shape({
push: PropTypes.func.isRequired,
}),
isSettingsMenuOpen: PropTypes.bool, isSettingsMenuOpen: PropTypes.bool,
localeProps: PropTypes.object.isRequired, localeProps: PropTypes.object.isRequired,
openModal: PropTypes.func.isRequired, openModal: PropTypes.func.isRequired,
Expand All @@ -117,4 +122,4 @@ SettingsMenu.propTypes = {
themeProps: PropTypes.object.isRequired, themeProps: PropTypes.object.isRequired,
} }


export default SettingsMenu export default withRouter(SettingsMenu)

0 comments on commit b450031

Please sign in to comment.